
Estoy intentando hacer chroot en la imagen de Ubuntu 16.04 que Nvidia tiene para desarrollar en el escudo. Lo coloqué en una tarjeta SD y lo monté en /mnt/chroots. No puedo hacer que apt-get update funcione sin fallar, el ping también falla. Se agradecería la ayuda.
cd rootfs
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/
mount -o bind /dev/pts dev/pts/
chroot . /bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH
También agregué root a los grupos:
groupadd -g 3001 aid_net_bt_admin
groupadd -g 3002 aid_net_bt
groupadd -g 3003 aid_inet
groupadd -g 3004 aid_inet_raw
groupadd -g 3005 aid_inet_admin
gpasswd -a root aid_net_bt_admin
gpasswd -a root aid_net_bt
gpasswd -a root aid_inet
gpasswd -a root aid_inet_raw
gpasswd -a root aid_inet_admin
/etc/resolv.conf
nameserver 8.8.8.8
con /etc/init.d/networking inicio
root@localhost:/# apt-get update
Err:1 http://ports.ubuntu.com/ubuntu-ports xenial InRelease
Temporary failure resolving 'ports.ubuntu.com'
Err:2 http://ports.ubuntu.com/ubuntu-ports xenial-updates InRelease
Temporary failure resolving 'ports.ubuntu.com'
Err:3 http://ports.ubuntu.com/ubuntu-ports xenial-security InRelease
Temporary failure resolving 'ports.ubuntu.com'
Reading package lists... Done
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports...nial/InRelease Temporary failure resolving 'ports.ubuntu.com'
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports...ates/InRelease Temporary failure resolving 'ports.ubuntu.com'
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports...rity/InRelease Temporary failure resolving 'ports.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.
Respuesta1
Tienes 2 problemas diferentes aquí.
- apto para no resolver DNS
- ping no funciona
-
APT NO RESUELVE DNS:
El problema es que APT utiliza _apt como nuestro usuario sin privilegios. En Android con red paranoica, solo los usuarios del grupo 3003 Aid_inet o 3004 Aid_inet_raw pueden abrir sockets de red. Cuando apt se instala, crea el usuario _apt.
# add unprivileged user for the apt methods
adduser --force-badname --system --home /nonexistent \
--no-create-home --quiet _apt || true
El usuario se ve así en /etc/passwd
root@localhost:~
# grep -E "_apt" /etc/passwd
_apt:x:103:65534::/nonexistent:/bin/false
El formato de contraseña es
Nombre de usuario: Contraseña cifrada: Número de ID de usuario (UID): Número de ID de grupo del usuario (GID): Nombre completo del usuario (GECOS): Directorio de inicio del usuario: Shell de inicio de sesión
Al mirar al usuario _apt, el GID está configurado en 65534, lo que significa que no hay grupo; en sistemas Linux normales, esto está bien. En Android, este GID nunca podrá establecer conexiones de red. Es necesario cambiar el GID a 3003.
# usermod -g 3003 _apt
cambiará GID
root@localhost:~
# grep -E "_apt" /etc/passwd
_apt:x:103:3003::/nonexistent:/bin/false
Ahora APT funcionará en chroot de Android
PING NO FUNCIONA
Para mí, lo noté cuando hice chroot usando este ejemplo de comando
# chroot /linux /bin/bash -l
En Android, los grupos se usan, en cierta medida, para aplicaciones. Por lo tanto, bash de llamada raíz solo está en el grupo raíz; puede verificar esto mediante
# groups
root
grupos ejecutados sin nombre de usuario genera grupos de procesos actuales
Ahora prueba esto
# su - root
su comando es cambiar de usuario
# groups
root sdcard-rw aid_bt aid_bt-net aid_inet aid_net-raw aid_net_admin
Ahora el ping funcionará
ahora uso
# chroot /linux /bin/su - root
que inicia sesión como root desde Linux, no como root desde Android