Shield에서 개발하기 위해 Nvidia의 Ubuntu 16.04 이미지를 chroot하려고 합니다. SD 카드에 넣고 /mnt/chroots에 설치했습니다. apt-get 업데이트가 작동하지 않고 ping이 실패합니다. 어떤 도움이라도 대단히 감사하겠습니다.
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
또한 그룹에 루트를 추가했습니다.
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
/etc/init.d/networking을 통해 시작
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.
답변1
여기에 두 가지 다른 질문이 있습니다
- apt는 DNS를 확인하지 않습니다
- 핑이 작동하지 않아요
-
APT는 DNS를 확인하지 않습니다.
문제는 APT가 _apt를 권한이 없는 사용자로 사용한다는 것입니다. 편집증적인 네트워킹을 사용하는 Android에서는 3003aid_inet 또는 3004aid_inet_raw 그룹의 사용자만 네트워크 소켓을 열 수 있습니다. apt가 설치되면 user_apt가 생성됩니다.
# add unprivileged user for the apt methods
adduser --force-badname --system --home /nonexistent \
--no-create-home --quiet _apt || true
사용자는 /etc/passwd에서 다음과 같이 보입니다.
root@localhost:~
# grep -E "_apt" /etc/passwd
_apt:x:103:65534::/nonexistent:/bin/false
비밀번호 형식은
사용자 이름: 암호화된 비밀번호: 사용자 ID 번호(UID): 사용자 그룹 ID 번호(GID): 사용자 전체 이름(GECOS): 사용자 홈 디렉터리: 로그인 쉘
_apt 사용자를 보면 GID가 65534로 설정되어 있는데, 이는 그룹이 없음을 의미하며 일반 Linux 시스템에서는 괜찮습니다. Android에서는 이 GID가 네트워크 연결을 설정하지 않습니다. GID를 3003으로 변경해야 합니다.
# usermod -g 3003 _apt
GID를 변경합니다
root@localhost:~
# grep -E "_apt" /etc/passwd
_apt:x:103:3003::/nonexistent:/bin/false
이제 APT가 Android chroot에서 실행됩니다.
핑이 작동하지 않음
저는 이 명령 예제를 사용하여 chroot를 할 때
# chroot /linux /bin/bash -l
Android에서는 그룹이 애플리케이션에서 어느 정도 사용됩니다. 따라서 루트는 루트 그룹에서만 bash를 호출하므로 다음을 통해 확인할 수 있습니다.
# groups
root
사용자 이름 없이 실행되는 그룹은 현재 프로세스 그룹을 출력합니다.
이제 이것을 시도해 보세요
# su - root
su 명령은 사용자를 전환합니다
# groups
root sdcard-rw aid_bt aid_bt-net aid_inet aid_net-raw aid_net_admin
이제 핑이 잘 나오네요
나는 지금 사용한다
# chroot /linux /bin/su - root
Android에서 루트 대신 Linux에서 루트로 로그인