組込み Linux Ultra96V2 Wifi DHCPでdnfを動かす host not resolved解決

Wifiを動かすのは『組込み Linux Ultra96V2 PetaLinux2023.1 やっとWifi動いた!』で紹介しています。 クラウド接続やAIをするのに、何らかのパッケージ管理ツールを入れたく色々さがしていると、xlnx-linux-6.1.5にはDebian系のaptは無いのですが、CentOS系のyumの後継であるdnf(dandifiedの略だそうです:私はダンディー化と呼んでます)がありました。 wifi DHCP接続でdnfを使うのに苦労したので備忘録を掲載しておきます。

問題

dnfでnodejsをダウンロードして、依存関係もdnfで自動的に解決してもらってインストールしようとしたのですが、wpa_supplicantでwifi接続してudhcpcでip取得すると、uhdcpcによってwifiルーターのipアドレスを/etc/resolv.confにnameserverのIPアドレスとして上書きされてしまい、結果dnfがファイルをダウンロードするサイトのホスト名をIPに変換できず、host not resolvedエラーでnodejsをダウンロードできませんでした。 結論は、/ect/udhcpc.d/50defaultを書き換えて、無理やりnameserverを8.8.8.8だけにしました。 nmcliは使えず、PEERDNSも設定できず、/sbin/resolvconfが無いので/etc/resolvconf.confも反映されず、仕方なくシェルスクリプトを一から勉強して何とか/ect/udhcpc.d/50defaultを読み解いて変更しました。 (レベルアップできたのでまあ良かったです。 『Linux シェルスクリプト 初心者用 まとめ』)

dnfでnodejsをダウンロードして、依存関係もdnfで自動的に解決してもらってインストールしようとしたのですが、wpa_supplicantでwifi接続してudhcpcでip取得すると、uhdcpcによってwifiルーターのipアドレスを/etc/resolv.confにnameserverのIPアドレスとして上書きされてしまい、結果dnfがファイルをダウンロードするサイトのホスト名をIPに変換できず、host not resolvedエラーでnodejsをダウンロードできませんでした。 結論は、/ect/udhcpc.d/50defaultを書き換えて、無理やりnameserverを8.8.8.8だけにしました。 nmcliは使えず、PEERDNSも設定できず、/sbin/resolvconfが無いので/etc/resolvconf.confも反映されず、仕方なくシェルスクリプトを一から勉強して何とか/ect/udhcpc.d/50defaultを読み解いて変更しました。 (レベルアップできたのでまあ良かったです。 『Linux シェルスクリプト 初心者用 まとめ』)

変更点

下の76行目にdns=8.8.8.8と記入して、rebootして接続すると、nodejsやpython3-pipをインストールできるようになりました。

 72         # Update resolver configuration file
 73         R=""
 74         [ -n "$domain" ] && R="domain $domain"
 75         echo $dns
 76         dns=8.8.8.8
 77         for i in $dns; do
 78             echo "$0: Adding DNS $i"
 79             R="${R}nameserver $i"
 80         done
 81 
 82         if [ -x /sbin/resolvconf ]; then
 83 
 84             echo -n "$R" | /sbin/resolvconf -a "${interface}.udhcpc"
 85         else
 86             echo -n "$R" > "$RESOLV_CONF"
 87         fi
 88         ;;
 89 esac
 90 
 91 exit 0

補足

上記コードの補足です。

  1. udhcpcを実行すると/etc/uhcpc.d/ディレクトリ内の実行ファイルが実行される。
  2. このディレクトリにあるのは『50default』シェルスクリプトファイル
  3. /ect/udhcpc.d/50defaultは最低2回実行される。 linux-xlnx-6.1.5には、/sbin/resolvconfは無くて、/sbin/ipはあるので、と
  4. 1回目は引数に『deconfig』が入り、case文のdeconfig部分が実行され、設定されているipアドレスを0.0.0.0にする。(nfs部分は使ってないので無視)
  5. 2回目は引数に『bound』が入り、case文のbound部分が実行され、$ipと$maskに入っているアドレスがwlan0に設定される。
  6. routeとしてwifiルーターのipアドレスが設定される。
  7. 74行目で、$domainは無いのでR=””のままで、$dnsにはWifiルーターのipアドレスが入っているので、79行目でR=”nameserver <wifi ip address>”になる。
  8. その後、86行目で/etc/resolv.confに書き込まれてしまう。
  9. なのでR=”nameserver 8.8.8.8″となるよう、dnsに8.8.8.8を入れる。

以下は、udhcpcを実行した時のメッセージです。 50defaultファイルの先頭に呼び出し元を知るために、ps $PPID | tail -n 1を追記しています。 なので4行目に引数のdeconfigが表示され、9行目に引数のboundが表示されています。 1,5,6,7行目は、多分/sbin/udhcpc が表示していると思います。

$ sudo udhcpc wlan0                                                                                 
udhcpc: started, v1.35.0
    PID TTY      STAT   TIME COMMAND
   2430 ttyPS0   S+     0:00 run-parts -a deconfig /etc/udhcpc.d
udhcpc: broadcasting discover
udhcpc: broadcasting select for 192.168.11.10, server 192.168.11.1
udhcpc: lease of 192.168.11.10 obtained from 192.168.11.1, lease time 172800
    PID TTY      STAT   TIME COMMAND
   2439 ttyPS0   S+     0:00 run-parts -a bound /etc/udhcpc.d
192.168.11.1
/etc/udhcpc.d/50default: Adding DNS 192.168.11.1

経緯

このページ以前に以下を実行しています。

  1. Vivado2023.1でUltra96V2用のxsa作成
  2. PetaLinux2023.1でxsaを使いUltra96V2用のLinuxビルド(PetaLinux指定のlinx-xlnx使用)
  3. PetaLinux2023.1でxsaを使いUltra96V2用をXilinxの外部ソースを使い、Ultra96V2のWifiのドライバを組み込んでLinuxビルドしWifiをdhcpで接続。
  4. dnfを使えるようにnameserverを指定する(このページ)

dnf組込

  1. petalinux-config -c rootfsのトップ画面から
  2. Filesystem Packages』〜
  3. base
  4. dnf[=y]にしてビルドする。

nodejs installed

$ sudo dnf install nodejs

OE Remote Repo: sswreleases rel-v2023 generic rpm zynqmp_generic_xczu3eg                1.4 kB/s | 577  B     00:00    
Errors during downloading metadata for repository 'oe-remote-repo-sswreleases-rel-v2023-generic-rpm-zynqmp_generic_xczu:
  - Status code: 404 for http://petalinux.xilinx.com/sswreleases/rel-v2023/generic/rpm/zynqmp_generic_xczu3eg/repodata/)
Error: Failed to download metadata for repo 'oe-remote-repo-sswreleases-rel-v2023-generic-rpm-zynqmp_generic_xczu3eg': d
Ignoring repositories: oe-remote-repo-sswreleases-rel-v2023-generic-rpm-zynqmp_generic_xczu3eg
Last metadata expiration check: 0:01:18 ago on Mon Jun 19 02:44:07 2023.
Dependencies resolved.
========================================================================================================================
 Package    Architecture        Version      Repository                                                            Size
========================================================================================================================
Installing:
 nodejs     cortexa72_cortexa53 16.14.2-r0.0 oe-remote-repo-sswreleases-rel-v2023-generic-rpm-cortexa72_cortexa53 7.4 M
Installing dependencies:
 brotli     cortexa72_cortexa53 1.0.9-r0.0   oe-remote-repo-sswreleases-rel-v2023-generic-rpm-cortexa72_cortexa53 308 k
 libcares2  cortexa72_cortexa53 1.18.1-r0.0  oe-remote-repo-sswreleases-rel-v2023-generic-rpm-cortexa72_cortexa53  48 k
 libicudata71
            cortexa72_cortexa53 71.1-r0.0    oe-remote-repo-sswreleases-rel-v2023-generic-rpm-cortexa72_cortexa53 8.2 M
 libicui18n71
            cortexa72_cortexa53 71.1-r0.0    oe-remote-repo-sswreleases-rel-v2023-generic-rpm-cortexa72_cortexa53 1.0 M
 libicuuc71 cortexa72_cortexa53 71.1-r0.0    oe-remote-repo-sswreleases-rel-v2023-generic-rpm-cortexa72_cortexa53 720 k
 nodejs-npm cortexa72_cortexa53 16.14.2-r0.0 oe-remote-repo-sswreleases-rel-v2023-generic-rpm-cortexa72_cortexa53 1.8 M
 python3-ctypes
            cortexa72_cortexa53 3.10.6-r0.0  oe-remote-repo-sswreleases-rel-v2023-generic-rpm-cortexa72_cortexa53  98 k
 python3-mmap
            cortexa72_cortexa53 3.10.6-r0.0  oe-remote-repo-sswreleases-rel-v2023-generic-rpm-cortexa72_cortexa53  16 k
 python3-multiprocessing
            cortexa72_cortexa53 3.10.6-r0.0  oe-remote-repo-sswreleases-rel-v2023-generic-rpm-cortexa72_cortexa53 149 k

Transaction Summary
========================================================================================================================
Install  10 Packages

Total download size: 20 M
Installed size: 72 M
Is this ok [y/N]: y
Downloading Packages:
(1/10): libcares2-1.18.1-r0.0.cortexa72_cortexa53.rpm                                    13 kB/s |  48 kB     00:03    
(2/10): brotli-1.0.9-r0.0.cortexa72_cortexa53.rpm                                        24 kB/s | 308 kB     00:12    
(3/10): libicuuc71-71.1-r0.0.cortexa72_cortexa53.rpm                                    223 kB/s | 720 kB     00:03    
(4/10): libicui18n71-71.1-r0.0.cortexa72_cortexa53.rpm                                   56 kB/s | 1.0 MB     00:19    
(5/10): nodejs-npm-16.14.2-r0.0.cortexa72_cortexa53.rpm                                 121 kB/s | 1.8 MB     00:15    
(6/10): python3-ctypes-3.10.6-r0.0.cortexa72_cortexa53.rpm                               20 kB/s |  98 kB     00:04    
(7/10): python3-mmap-3.10.6-r0.0.cortexa72_cortexa53.rpm                                 22 kB/s |  16 kB     00:00    
(8/10): python3-multiprocessing-3.10.6-r0.0.cortexa72_cortexa53.rpm                      48 kB/s | 149 kB     00:03    
(9/10): nodejs-16.14.2-r0.0.cortexa72_cortexa53.rpm                                     177 kB/s | 7.4 MB     00:42    
(10/10): libicudata71-71.1-r0.0.cortexa72_cortexa53.rpm                                 142 kB/s | 8.2 MB     00:59    
------------------------------------------------------------------------------------------------------------------------
Total                                                                                   342 kB/s |  20 MB     00:59     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                1/1 
  Installing       : libicudata71-71.1-r0.0.cortexa72_cortexa53                                                    1/10 
  Running scriptlet: libicudata71-71.1-r0.0.cortexa72_cortexa53                                                    1/10 
%post(libicudata71-71.1-r0.0.cortexa72_cortexa53): scriptlet start
%post(libicudata71-71.1-r0.0.cortexa72_cortexa53): execv(/bin/sh) pid 818
+ set -e
+ '[' x = x ']'
+ '[' -x /sbin/ldconfig ']'
+ /sbin/ldconfig
%post(libicudata71-71.1-r0.0.cortexa72_cortexa53): waitpid(818) rc 818 status 0

  Installing       : libicuuc71-71.1-r0.0.cortexa72_cortexa53                       ps $PPID | tail -n 1                                2/10 
  Running scriptlet: libicuuc71-71.1-r0.0.cortexa72_cortexa53                                                      2/10 
%post(libicuuc71-71.1-r0.0.cortexa72_cortexa53): scriptlet start
%post(libicuuc71-71.1-r0.0.cortexa72_cortexa53): execv(/bin/sh) pid 820
+ set -e
+ '[' x = x ']'
+ '[' -x /sbin/ldconfig ']'
+ /sbin/ldconfig
%post(libicuuc71-71.1-r0.0.cortexa72_cortexa53): waitpid(820) rc 820 status 0

  Installing       : libicui18n71-71.1-r0.0.cortexa72_cortexa53                                                    3/10 
  Running scriptlet: libicui18n71-71.1-r0.0.cortexa72_cortexa53                                                    3/10 
%post(libicui18n71-71.1-r0.0.cortexa72_cortexa53): scriptlet start
%post(libicui18n71-71.1-r0.0.cortexa72_cortexa53): execv(/bin/sh) pid 822
+ set -e
+ '[' x = x ']'
+ '[' -x /sbin/ldconfig ']'
+ /sbin/ldconfig
%post(libicui18n71-71.1-r0.0.cortexa72_cortexa53): waitpid(822) rc 822 status 0

  Installing       : python3-mmap-3.10.6-r0.0.cortexa72_cortexa53                                                  4/10 
  Installing       : python3-ctypes-3.10.6-r0.0.cortexa72_cortexa53                                                5/10 
  Installing       : python3-multiprocessing-3.10.6-r0.0.cortexa72_cortexa53                                       6/10 
  Installing       : nodejs-npm-16.14.2-r0.0.cortexa72_cortexa53                                                   7/10 
  Installing       : libcares2-1.18.1-r0.0.cortexa72_cortexa53                                                     8/10 
  Running scriptlet: libcares2-1.18.1-r0.0.cortexa72_cortexa53                                                     8/10 
%post(libcares2-1.18.1-r0.0.cortexa72_cortexa53): scriptlet start
%post(libcares2-1.18.1-r0.0.cortexa72_cortexa53): execv(/bin/sh) pid 824
+ set -e
+ '[' x = x ']'
+ '[' -x /sbin/ldconfig ']'
+ /sbin/ldconfig
%post(libcares2-1.18.1-r0.0.cortexa72_cortexa53): waitpid(824) rc 824 status 0

  Installing       : brotli-1.0.9-r0.0.cortexa72_cortexa53                                                         9/10 
  Running scriptlet: brotli-1.0.9-r0.0.cortexa72_cortexa53                                                         9/10 
%post(brotli-1.0.9-r0.0.cortexa72_cortexa53): scriptlet start
%post(brotli-1.0.9-r0.0.cortexa72_cortexa53): execv(/bin/sh) pid 826
+ set -e
+ '[' x = x ']'
+ '[' -x /sbin/ldconfig ']'
+ /sbin/ldconfig
%post(brotli-1.0.9-r0.0.cortexa72_cortexa53): waitpid(826) rc 826 status 0

  Installing       : nodejs-16.14.2-r0.0.cortexa72_cortexa53                                                      10/10 
  Verifying        : brotli-1.0.9-r0.0.cortexa72_cortexa53                                                         1/10 
  Verifying        : libcares2-1.18.1-r0.0.cortexa72_cortexa53                                                     2/10 
  Verifying        : libicudata71-71.1-r0.0.cortexa72_cortexa53                                                    3/10 
  Verifying        : libicui18n71-71.1-r0.0.cortexa72_cortexa53                                                    4/10 
  Verifying        : libicuuc71-71.1-r0.0.cortexa72_cortexa53                                                      5/10 
  Verifying        : nodejs-16.14.2-r0.0.cortexa72_cortexa53                                                       6/10 
  Verifying        : nodejs-npm-16.14.2-r0.0.cortexa72_cortexa53                                                   7/10 
  Verifying        : python3-ctypes-3.10.6-r0.0.cortexa72_cortexa53                                                8/10 
  Verifying        : python3-mmap-3.10.6-r0.0.cortexa72_cortexa53                                                  9/10 
  Verifying        : python3-multiprocessing-3.10.6-r0.0.cortexa72_cortexa53                                      10/10 

Installed:
  brotli-1.0.9-r0.0.cortexa72_cortexa53                 libcares2-1.18.1-r0.0.cortexa72_cortexa53                       
  libicudata71-71.1-r0.0.cortexa72_cortexa53            libicui18n71-71.1-r0.0.cortexa72_cortexa53                      
  libicuuc71-71.1-r0.0.cortexa72_cortexa53              nodejs-16.14.2-r0.0.cortexa72_cortexa53                         
  nodejs-npm-16.14.2-r0.0.cortexa72_cortexa53           python3-ctypes-3.10.6-r0.0.cortexa72_cortexa53                  
  python3-mmap-3.10.6-r0.0.cortexa72_cortexa53          python3-multiprocessing-3.10.6-r0.0.cortexa72_cortexa53         

Complete!

呼び元はわからず

/ect/udhcpc.d/50defaultの先頭に下のコードを書き込んでみたら、どこかからrun-partsで実行されていました。 残念ながら実行元ファイルはわかりませんでしたが、多分/sbin/udhcpcでバイナリ形式なのでどの様に変数を渡しているかわかりませんでした。 なので、$ipや$routeや$domainなどの変数がどこでどの様に取得され、どこから来るのかわかっていません。 もしかしたら呼び元で環境変数として生成して、50defaultでの処理が完了したら、それらの環境変数を削除しているのかもしれません。

ps $PPID | tail -n 1 
    PID TTY      STAT   TIME COMMAND
   1126 ttyPS0   S+     0:00 run-parts -a deconfig /etc/udhcpc.d

Failed to download metadata

このエラーがでたら良く確認する事です。 私の場合Repoにアクセスできないと出てきたので、そのサイトを確認すると、以下のファイルの一番下に記述されている『zynqmp_generic_xczu3eg』のリンクだけ存在しなかったので、コメントアウトしたらエラーがでなくなりました。 以下ファイルには他のRepoのリストもあるので、これ1個エラーになっても問題はないけどメッセージが鬱陶しいので、これでスッキリ。 但し、Linuxをビルドして入れ直すと再度で表示されてしまいます。

/etc/yum.repos.d/oe-remote-repo-sswreleases-rel-v2023-generic-rpm.repo

OE Remote Repo: sswreleases rel-v2023 generic rpm zynqmp_generic_xczu3eg                1.0 kB/s | 577  B     00:00    
Errors during downloading metadata for repository 'oe-remote-repo-sswreleases-rel-v2023-generic-rpm-zynqmp_generic_xczu:
  - Status code: 404 for http://petalinux.xilinx.com/sswreleases/rel-v2023/generic/rpm/zynqmp_generic_xczu3eg/repodata/)
Error: Failed to download metadata for repo tree /usr/lib/systemd/system/sysinit.target.wants'oe-remote-repo-sswreleases-rel-v2023-generic-rpm-zynqmp_generic_xczu3eg': d
Ignoring repositories: oe-remote-repo-sswreleases-rel-v2023-generic-rpm-zynqmp_generic_xczu3eg
Last metadata expiration check: 0:10:54 ago on Mon Jun 19 02:44:07 2023.

インストール可不可

可能

  • nodejs
  • pstree
  • tree
  • python3-pip
  • bluez* (154MB)

出来なかった

  • python3-env
  • iw
  • iwconfig

コメント