はじめに
はじめまして。今さっきQiitaのアカウントを作りました。
この記事は、ITRC Advent Calendar 2019 の3日目の記事になります。
今回は、少し前にArchLinuxでyayを使ってアップデートをした時にやらかした話について書いていきます。
しょうもないオチだったので結論から言いますと、wget壊れてるんだからcurlに戻せばいいじゃんっていう話でした。
今回参考にした記事はこちら
https://wiki.archlinux.jp/index.php/Pacman_%E3%83%92%E3%83%B3%E3%83%88#wget
事の始まり
いつも通りアップデートをしたところ、ネットにしっかりつながっていない状態でアップデートをしてしまった。
起こったこと
アップデート事態は特に何も起こることなく終了したので再起動をしたところ、エラーがでてログインできなくなった。
/usr/lib/Xorg: error while loading shared libraries: libnettle.so.7: cannot open shared objectfile: No such file or directory
共有ライブラリが無いって言ってる?
原因を考える
ネットに完全に繋がらないうちにアップデートをしたということが大本の原因ではあるけれど、それによって何が起きたかを考えたところ、最初の接続が応答なしで進んでしまったため、部分的にアップデートをしてしまったと考えました。
調べてみても、同じようなことをやってしまった人がいるっぽい。
対処法を考える
- アップデートされなかった部分をアップデートする
- LD_LIBRARY_PATHに追加か、シンボリックリンクの作成(?)
- ArchISOでchrootしてpacman -Syuする
この3つを試してみました。
実践
- アップデートされなかった部分をアップデートする
- これに関しては、そもそもyayやpacmanが実行できないため、できなかった
- LD_LIBRARY_PATHに追加か、シンボリックリンクの作成(?)
- 無理やり作成したけど駄目だった
なので、必然的に3番目の方法でやることに。。。
ArchISOでchrootしてpacman -Syuする
ArchISOが入ったUSBを使ってBOOTする。
# mount /dev/sda3 /mnt
# mount /dev/sda1 /mnt/boot
# cd /mnt
#arch-chroot /mnt bin/bash ←bashシェルを起動
まずArchISOが入ったUSBをBOOTして、起動します。
/mntに/をマウント、/mnt/bootに/bootをマウントします。
その後/mntに移動してから、arch-chrootをします。
これを踏まえてpacman -Syu
を実行してみると
/usr/bin/wget: error while loading shared libraries: libnettle.so.7: cannot open shared object file: No such file or directory
エラーがでて実行できない
wgetに必要なものがないとか言ってる
ちなみに
駄目だったのでpacstrapを試してみましたが、上記と同じエラーがでて駄目だった。
pactrapとは?
archリポジトリのCoreのbaseグループとbase-develをインストールすることができる。
ここで。。。
ここまでやったときに、pacman.confのある記事を見つけました。
wget
pacman に初めから入っている機能よりもパワフルなプロキシ設定が必要な場合、wget はとても使い勝手がよいです etc...
XferCommand = /usr/bin/wget -c -q --show-progress --passive-ftp -O %o %u
なので、pacman.confのwgetをコメントして、curlをコメントアウトする
pacman.conf
XferCommand = /usr/bin/curl -C - -f %u > %o
# XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
すると、無事にアップデートできました!
結論
wgetが使えないなら、pacman.confの設定をcurlに変えてからpacman -Syuをすればいいだけだったというオチ...
そもそもデフォルトの設定だとwgetじゃなくてcurl使うようになってるっていうのを知らなかった。
まとめ
ただでさえ色々トラブルが起こるようなものなんだから、ちゃんを気をつけましょうっていう話でした。