Android Chrootネットワークの問題

Android Chrootネットワークの問題

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

ここに2つの異なる質問があります

  • aptはDNSをチェックしません
  • pingは機能しません。

-


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で実行されます。

pingが機能しない


私はこのコマンドの例を使って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

今Pingはよく出てきます。

今使っています

# chroot /linux /bin/su - root

Androidでrootの代わりにLinuxでrootとしてログインする

おすすめ記事