Save 37% off PRO during our Black Friday Sale! »

自分自身を再インストール / osc18-nagoya-tokaidolug

自分自身を再インストール / osc18-nagoya-tokaidolug

放置しすぎてPortageすら更新できなくなったGentooを、そのGentoo環境で起動したまま再インストールする話。

2018-05-19 OSC2018 Nagoya
東海道らぐLinuxライトニングトーク大会

## スライドで紹介した参考サイト

https://wiki.gentoo.org/wiki/Upgrading_Gentoo#Updating_old_systems
https://wiki.gentoo.org/wiki/Replace_a_Linux_installation_with_Gentoo_in-place
http://www.walbrix.net/tech/update-old-gentoo.html

## クレジット

Illustrations on page 4 and 8 are produced by pacochi https://pawoo.net/@pacochi

7a45319e68efabaecb9ab6656dd44cae?s=128

unarist

May 19, 2018
Tweet

Transcript

  1. 自分自身を再インストール unarist 2018-05-19 OSC2018 Nagoya 東海道らぐLinuxライトニングトーク大会

  2. 議題 昔 #gentooinstallbattle したまま放置しているPC、 ありませんか? > Last emerge --sync was

    Thu Aug 28 08:05:01 2014
  3. 古い環境を新しくする 1. とりあえず emerge --sync する 2. まずは portage のアップデート

    3. emerge -1 portage 4. 新しいEAPIが使われているので先にportageを 更新しろと言われる
  4. None
  5. そんな御無体な • こういった変更は数ヶ月の猶予を持って行われ ている • `emerge --sync` した時にnewsとしてお知らせ も届く TL;DR

    数年も放置するのが悪い
  6. どうするの • 少し古いパッケージツリーを取得して段階的に 更新する • 最新のstage3環境にchrootして、元の環境に パッケージをインストールする https://wiki.gentoo.org/wiki/Upgrading_Gentoo# Updating_old_systems

  7. 後者をやってみた # emerge --root=/mnt/host -1 portage

  8. 後者をやってみた $ emerge python-exec: Invalid impl in /etc/python- exec/python-exec.conf: python3.3

    /usr/bin/python3.5: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by /usr/lib64/libpython3.5m.so.1.0)
  9. glibcも更新しないといけない • それはそう • glibcも更新すればよい • ただしglibcに依存する全パッケージを再インス トールすることになるので時間がかかる

  10. そうだ、再インストールしよう

  11. そうだ、再インストールしよう • インストール先は古い Mac mini • 外部メディアからGentoo環境を起動するのも面 倒 • 稼動中の環境を置き換えられないものか

  12. 稼動中の環境を置き換える Replace a Linux installation with Gentoo in-place - Gentoo

    Wiki https://wiki.gentoo.org/wiki/Replace_a_Linux_ins tallation_with_Gentoo_in-place
  13. 稼動中の環境を置き換える Wikiのやりかた(別ディストリを置換え) 1. 現存するファイルの更新日時を揃える 2. stage3をルートディレクトリに上書き 3. 起動に必要な最低限のセットアップを行ってか ら再起動 4.

    1で揃えた更新日時から変わっていないもの (=stage3で上書きされなかったもの)を削除
  14. でも… • 今回はGentoo同士なので、設定ファイルが多分 ぶつかる – 前の設定も残したい(上書きさせたくない) – 初回再起動時に余計な設定を読ませたくない →元環境は別ディレクトリに移動しておき、きれ いな場所にstage3を展開

  15. 今回の手法 1. stage3環境にchroot 2. ホスト環境のルート直下にある諸々を別ディレ クトリに移動 3. stage3をホスト環境に展開 4. 起動に必要な最低限のセットアップを行ってか

    ら再起動
  16. stage3環境から/を触る 1. /mnt/work に stage3 を展開 2. /mnt/work/{dev,sys,proc} を用意 3.

    mount /mnt/work/mnt/gentoo に / を bind mount (rslaveがいいかも) ここで /mnt/work に chroot すると、 /mnt/gentoo マウント後のセットアップ環境のよ うになっている
  17. そんな雑でいいの • いけた • カーネルも流用しようとしたら起動途中でこけ たが、新しいものをコンパイルしなおして got kotonaki (gentoo-sourcesのdistfilesを別環境で取得する など面倒はあった)

  18. まとめ > 要するに、Gentooは更新をサボっている と置いて行かれてハマるということです。 古くなってしまった Gentoo Linuxを更新す る方法 - 技術情報

    - Walbrix http://www.walbrix.net/tech/update-old- gentoo.html