labunix's blog

labunixのラボUnix

ワンライナーでjessieにchroot-stretchを導入する。

■ワンライナーでjessieにchroot-stretchを導入する。
 ホスト側のjessieは安定版。
 chroot側のstretchはテスト版。

$ lsb_release -d
Description:	Debian GNU/Linux 8.2 (jessie)

■chrootって結構何度もやっているので今回はワンライナーで。

 Squeeze上のsid chrootにjessieのchroot環境を構築、Squeezeへ移動
 http://d.hatena.ne.jp/labunix/20130507

 chroot環境のsidで、rinseを使ってCentOS5/6のchroot環境を構築
 http://d.hatena.ne.jp/labunix/20130313

 Wheezy上にchroot環境のWheezyを構築
 http://labunix.hateblo.jp/entry/20130819/1376924059

 CentOS6上にchrootのdebian wheezyを構築
 http://labunix.hateblo.jp/entry/20130820/1377007672

 squeeze上にwheezyのchroot環境を構築
 http://d.hatena.ne.jp/labunix/20130311

■公式サイトにもあるとおり、テスト版にはリスクがあります。

 更新によっては一部の機能が動作しなくなったり
 設定を改変しなければならなかったりすることがあることには注意してください。 

■ログを残す場合は事前に[script]する。

$ script $(date '+%Y%m%d_%H%M%S').log

■途中以下の変なドメインで停止していたのにハマったので
 ホストのsources.listを流用する修正を追加。

$ sudo cat /var/local/stretch/etc/apt/sources.list
deb http://debootstrap.invalid/ stretch main

...
stretch/sid

■バックアップと、空き容量が十分にあることを前提に、
 最初の4項目の変数を設定してコピペ。
 最終行に[$CHROOT_HOME/etc/debian_version]の中身である
 [stretch/sid]が表示されていれば完了。

$ CHROOT_USER=labunix; \
  CHROOT_VER=stretch; \
  CHROOT_HOME=/var/local/${CHROOT_VER}; \
  CHROOT_URL=http://ftp.jp.debian.org/debian; \
  # wget test \
  wget $CHROOT_URL -o /dev/null && \
  test -d $CHROOT_HOME || sudo mkdir -p $CHROOT_HOME; \
  # fstab backup \
  sudo cp /etc/fstab /etc/fstab.bak_$(date '+%Y%m%d_%H%M%S')_install; \
  sudo apt-get install -y debootstrap schroot && \
  # debian image download \
  sudo env LANG=C debootstrap $CHROOT_VER $CHROOT_HOME $CHROOT_URL && \
  grep "$CHROOT_HOME/proc" /etc/fstab > /dev/null 2>&1 || \
    sudo sed -i -e '$a\none\t'$CHROOT_HOME/proc'\tproc\tdefaults\t0\t0' /etc/fstab && \
  sudo mount -a && \
  # main \
  sed -e 's%debootstrap.invalid%'$CHROOT_URL'%g' \
    /etc/apt/sources.list | \
    sudo tee /var/local/stretch/etc/apt/sources.list >/dev/null
  echo -e "update\nupgrade\nautoremove\nautoclean" | \
    awk '{print "chroot '$CHROOT_HOME' apt-get -y "$1}' | sudo sh && \
  grep "$CHROOT_VER" /etc/schroot/schroot.conf >/dev/null 2>&1 || \
    echo -e "[$CHROOT_VER]\ndescription=Debian $CHROOT_VER\ndirectory=$CHROOT_HOME\nusers=$CHROOT_USER" | \
    sudo tee -a /etc/schroot/schroot.conf > /dev/null && \
  echo "chroot-$CHROOT_VER" | sudo tee $CHROOT_HOME/etc/debian_chroot > /dev/null && \
  sudo chroot $CHROOT_HOME cat /etc/debian_version; \
  unset CHROOT_USER CHROOT_VER CHROOT_HOME CHROOT_URL

■すべて正常に完了したので初回ログイン
 ここでユーザを作成するので、パスワードを設定します。

$ CHROOT_USER=labunix; \
  CHROOT_VER=stretch; \
  CHROOT_HOME=/var/local/${CHROOT_VER}; \
  sudo chroot $CHROOT_HOME apt-get purge -y isc-dhcp* nano; \
  sudo chroot $CHROOT_HOME apt-get install -y vim less chkconfig; \
  sudo chroot $CHROOT_HOME adduser $CHROOT_USER; \
  schroot -c $CHROOT_VER -p
  (chroot-stretch)XXXX:~$ exit2回目以降は通常通りschrootで。

$ schroot -c stretch -p

■失敗したり、アンインストールする場合のワンライナー。

$ CHROOT_VER=stretch; \
  CHROOT_HOME=/var/local/${CHROOT_VER}; \
  sudo umount $CHROOT_HOME/proc; \
  test -d $CHROOT_HOME && sudo rm -fr $CHROOT_HOME; \
  sudo cp /etc/fstab /etc/fstab.bak_$(date '+%Y%m%d_%H%M%S')_uninstall; \
  grep "$CHROOT_HOME/proc" /etc/fstab > /dev/null 2>&1 && \
    sudo sed -i -e 's%^none.*'$CHROOT_HOME'.*%%g' /etc/fstab && \
  unset CHROOT_VER CHROOT_HOME[/etc/fstab.bak_*install]のバックアップも要らなくなったら削除

$ sudo rm /etc/fstab.bak_*install