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
補足
上記コードの補足です。
- udhcpcを実行すると/etc/uhcpc.d/ディレクトリ内の実行ファイルが実行される。
- このディレクトリにあるのは『50default』シェルスクリプトファイル
- /ect/udhcpc.d/50defaultは最低2回実行される。 linux-xlnx-6.1.5には、/sbin/resolvconfは無くて、/sbin/ipはあるので、と
- 1回目は引数に『deconfig』が入り、case文のdeconfig部分が実行され、設定されているipアドレスを0.0.0.0にする。(nfs部分は使ってないので無視)
- 2回目は引数に『bound』が入り、case文のbound部分が実行され、$ipと$maskに入っているアドレスがwlan0に設定される。
- routeとしてwifiルーターのipアドレスが設定される。
- 74行目で、$domainは無いのでR=””のままで、$dnsにはWifiルーターのipアドレスが入っているので、79行目でR=”nameserver <wifi ip address>”になる。
- その後、86行目で/etc/resolv.confに書き込まれてしまう。
- なので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
経緯
このページ以前に以下を実行しています。
- Vivado2023.1でUltra96V2用のxsa作成
- PetaLinux2023.1でxsaを使いUltra96V2用のLinuxビルド(PetaLinux指定のlinx-xlnx使用)
- PetaLinux2023.1でxsaを使いUltra96V2用をXilinxの外部ソースを使い、Ultra96V2のWifiのドライバを組み込んでLinuxビルドしWifiをdhcpで接続。
- dnfを使えるようにnameserverを指定する(このページ)
dnf組込
- petalinux-config -c rootfsのトップ画面から
- 『Filesystem Packages』〜
- 『base』
- 『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

コメント