Manjaro LinuxのXが起動しなくなった
xwindow
- TOP
- Old Archives
- Manjaro LinuxのXが起動しなくなった
12-20のシステムアップグレードリリースでManjaroを再起動した際、Xが起動しなくなった。
[ 32.722] (II) fglrx(0): Desc: AMD FireGL DRM kernel module [ 32.722] (II) fglrx(0): Kernel Module version matches driver. [ 32.722] (II) fglrx(0): Kernel Module Build Time Information: [ 32.722] (II) fglrx(0): Build-Kernel UTS_RELEASE: 3.18.0-0-MANJARO [ 32.722] (II) fglrx(0): Build-Kernel MODVERSIONS: no [ 32.722] (II) fglrx(0): Build-Kernel __SMP__: no [ 32.722] (II) fglrx(0): Build-Kernel PAGE_SIZE: 0x1000 [ 32.722] (II) fglrx(0): [uki] register handle = 0x00016000 [ 32.722] (II) fglrx(0): DRI initialization successfull [ 32.722] (II) fglrx(0): FBADPhys: 0xf400000000 FBMappedSize: 0x010e0000 (==) Log file: "/var/log/Xorg.0.log", Time: Sat Dec 20 23:57:18 2014 (==) Using config file: "/etc/X11/xorg.conf" (==) Using config directory: "/etc/X11/xorg.conf.d" (==) Using system config directory "/usr/share/X11/xorg.conf.d" (WW) fglrx: No matching Device section for instance (BusID PCI:0@0:1:1) found /usr/bin/Xorg.bin: symbol lookup error: /usr/lib/xorg/modules/drivers/fglrx_drv.so: undefined symbol: GlxInitVisuals2D
検索すると事例はかなり多く見つかるが、そのほとんどはaticonfig --initialしろというものだ。
だが、これでうまくはいかなかった。nomodeset
しろという声もあったが、それはすでにしてあるし、確認もした。
そのほかにはflgrxを無効にする方法について記述されたものがある程度で、それ以外はインストールしろか、もしくは解決しないままか、だ。
かなり深く調べた。エラーでは0:1:1となっているが、本当にBusIDの不一致を疑って調べると0:1:0だったので、それが原因かと思って調べたりもした。だが、結局解決にはつながらなかった。
バックアップしたイメージでロールバック、ということも考えたのだが、まずは総再ビルド&インストール。もし、パッケージが壊れたためならこれで解決する。もともと壊れていたのなら、ロールバックしてアップグレードしても同じことになる。
やり方は次のようなもの。
for i in $(pacman -Q | cut -f 1 -d " ") do yaourt -S --noconfirm "$i" done
sudo時間は長くしておくほうが良い。
だが、うちの場合、頻繁に、長時間に渡ってネットワークダウンが生じる。上流で起きていること(おそらく、回線、集合回線部分のせいだろう)なので私には手出しできない。フルビルドで回っている間ネットワークがダウンすると失敗する。これはなかなか恐ろしい。
幸いにもネットワークダウンには遭遇せず2回完走したのだが、改善しなかった。そこでロールバックを試みたのだが、dumpしたイメージをrestore(8)しようとしたが、0 inode fileと言われ、14GBもあるファイルにもかかわらずできなかった。
システム再インストールしかなくなってしまったが、せめてもということで、pacman -Q
の結果を外部に保存しておく。
再インストールだが、Manjaro 0.8.11 Xfce JPのイメージのインストーラではkeymap選択画面でフリーズしてしまい、進まない。0.8.10 XFce JPイメージでインストールする。
2014-11-05のarticleにある手順でセットアップ。
- pacman-keyの再構築、無効なキーの削除
- aticonfig
- vigrで
users
のGIDを500
に
そしてパッケージを復帰させる。いくつか試したが、sudoのtimeoutを無効にした上で
for i in $(ruby -e 'list1 = `pacman -Q | cut -f 1 -d " "`.split("\n")' -e 'list2 = `cut -f 1 -d " " paclist`.split("\n")' -e 'list2.each {|i| next if list1.include?(i); puts i}' ) do yes Y | yaourt -S "$i" done
--noconfirm
ではconfrict時に中止を選択されてしまう。基本的にはこれで通るが、MATE関連でgstreamerかpulseaudioか選べと言われてY
を返しても通らないため、チェックしてこの時に一旦INTしてmate関連を手動インストールの上、やり直す。ちなみに、依存関係で入るパッケージもこの方法だと再インストールするため、mozc-utなどはfcitx-mozc-utで入るのだから途中で中断してやり直したほうが早い。
これを避ける方法としては
while p=$(ruby -e 'list1 = `pacman -Q | cut -f 1 -d " "`.split("\n")' -e 'list2 = `cut -f 1 -d " " paclist`.split("\n")' -e 'list2.each {|i| next if list1.include?(i); puts i}' | head -n 1) [[ -n "$p" ]] do yes Y | yaourt -S "$i" done
で、その他の選択肢を要求する場合を除いていけると思う。だだし、そもそもビルドできないパッケージがあると、それはインストールできないため詰んで(ループして)しまう。監視なしにするにはexpectを使うしかない。なお、xpdf関連は無理だった。
この後は次のようにしてセットアップを進める
- バックアップしたhomeのイメージをrsync。この時、rsync -av /mnt/1/ --exclude share/ /home/としてマウントされるユーザーデータは回避する。
- このままではユーザーデータがマウントできないので、sudo -u aki mkdir ~aki/share ~aki/.share.encfsとする。
/etc/fstab
を編集。tmpfsと~/.share.encfs
(btrfsサブボリューム)のマウントを設定。 encfsをマウントするためのスクリプトを~/root/bin
に書く。- これでほぼ通常通り。リブートしてakiでログインし、Catalyst Control Centerを起動、設定すればOKだ。復旧に6日もかかってしまった。
- 今回のようなことがか内容にと、今回はインストール時にLVMを使用する設定とした。ちなみに、ディスクのパスフレーズの強度を大幅に高めた。
- だが、標準でLVにVG全域を使用してしまうため、「管理やバックアップを容易にするため」と言いながら、実際は全く柔軟性がない。仕方ないので、SystemRescueCDで起動し、luksOpenしてvgscanし、ルートボリュームをe2fsck+resizefs+e2fsckで縮小した後、
lvreduce --size 80G ManjaroVG/ManjaroRoot
でOK。アップデート前にスナップショットを取るようにすればロールバックは容易になる。Manjaroでは運用中にこのような事態に陥ることが既に3回めなので必要だろう。また、rsyncでバックアップしておくことも必要かもしれない。