labunix's blog

labunixのラボUnix

jessieのUSB起動メディアを作成する。

■jessieのUSB起動メディアを作成する。
 以下と同じだけど、今回はDVDをISOのままコピーするのではなく、
 ディレクトリにコピーして「sources.list」にその場所を指定する方法。

 Debian Jessieローカルインストール用の16GBのUSB起動メディアを作成する。
 http://labunix.hateblo.jp/entry/20150823/1440281052

■毎回ISOをループバックマウントしなくて良いし、
 fstabに書くのも最小で済むので楽になる。

 とはいえ、今回はLennyからSqueese、Wheezy、Jessieとアップデートしてた
 マシンの「/」ディレクトリが絶望的に空き容量不足となっていたので
 再インストールが目的。

 データはssh越しのrsyncでデータを戻すだけなので、
 以下とほとんど変わらないrsyncを含むスクリプトで戻すだけ。

 rsyncによる仮想マシンの自動バックアップスクリプト(bash版)
 http://d.hatena.ne.jp/labunix/20111129

 後にすぐにプロキシ経由の外部接続をすることになるのですが、
 隔離環境で作業をする機会が増えているので、メモとして。

■いつものとおり、16GBのUSBメモリであることを確認して。

$ sudo fdisk -l /dev/sdb | grep ^Disk
Disk /dev/sdb: 15.1 GiB, 16219373568 bytes, 31678464 sectors
Disklabel type: dos
Disk identifier: 0x1876769c

$ echo $((16219373568/1024/1024/1024))"GB"
15GB

■USBメモリ内のデータを消して問題無ければ、マウント解除して
 最小インストーラを書き込み。
 ブートフラグの確認はfdiskの「*」で。

$ mount | grep sdb | wc -l
0
$ sudo dd if=debian-8.1.0-amd64-netinst.iso of=/dev/sdb bs=512

$  sudo fdisk -l /dev/sdb | grep ^/dev
/dev/sdb1  *        0 505855  505856  247M  0 Empty
/dev/sdb2        3980   4811     832  416K ef EFI (FAT-12/16/32)

■sdb3を作成

$ sudo fdisk /dev/sdb

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/sdb: 15.1 GiB, 16219373568 bytes, 31678464 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x1876769c

Device     Boot Start    End Sectors  Size Id Type
/dev/sdb1  *        0 505855  505856  247M  0 Empty
/dev/sdb2        3980   4811     832  416K ef EFI (FAT-12/16/32)


Command (m for help): n
Partition type
   p   primary (2 primary, 0 extended, 2 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (3,4, default 3): 
First sector (505856-31678463, default 505856): 
Last sector, +sectors or +size{K,M,G,T,P} (505856-31678463, default 31678463): 

Created a new partition 3 of type 'Linux' and of size 14.9 GiB.

Command (m for help): p
Disk /dev/sdb: 15.1 GiB, 16219373568 bytes, 31678464 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x1876769c

Device     Boot  Start      End  Sectors  Size Id Type
/dev/sdb1  *         0   505855   505856  247M  0 Empty
/dev/sdb2         3980     4811      832  416K ef EFI (FAT-12/16/32)
/dev/sdb3       505856 31678463 31172608 14.9G 83 Linux


Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

$ sudo sync; sudo sync; sudo sync

■USBを抜き差しすると、オートマウントで2つのパーティションを認識します。

$ mount | grep sdb | wc -l
2
$ mount | awk '/sdb/{print $1}'
/dev/sdb3
/dev/sdb1

■3つのISOをループバックマウント

$ sudo mkdir -p /media/cdrom{1,2,3}; \
    for n in 1 2 3;do sudo mount -o loop debian-8.1.0-amd64-DVD-${n}.iso /media/cdrom${n};done
mount: /dev/loop0 is write-protected, mounting read-only
mount: /dev/loop1 is write-protected, mounting read-only
mount: /dev/loop2 is write-protected, mounting read-only

$ mount | awk '/cdrom/{print $3}'
/media/cdrom1
/media/cdrom2
/media/cdrom3

■上記をそのままsdb3のマウント先にコピー

$ mount | awk '/sdb/{print $1,$3}'
/dev/sdb3 /media/labunix/Debian
/dev/sdb1 /media/usb0

$ sudo cp /media/cdrom{1,2,3} /media/labunix/Debian\ 8.1.0\ amd64\ 1/cdrom/
$ du -hs /media/labunix/Debian\ 8.1.0\ amd64\ 1/cdrom*
3.8G	/media/labunix/Debian 8.1.0 amd64 1/cdrom1
4.4G	/media/labunix/Debian 8.1.0 amd64 1/cdrom2
4.4G	/media/labunix/Debian 8.1.0 amd64 1/cdrom3

■終わったらループバックマウントを解除

$ sudo umount /media/cdrom{1,2,3}
$ mount | grep cdrom | wc -l
0

■「main contrib」があるので、「none-free」やセキュリティアップデート
 でなければ隔離環境でそのまま使えます。
 「non-free」が無いとNICが認識しないなど、
 必要ならばdebパッケージをUSBメモリに用意しておいて
 「dpkg -i」でインストールするなど、隔離でも他にも多くの選択肢があります。

$ ls /media/labunix/Debian\ 8.1.0\ amd64\ 1/cdrom{1,2,3}/dists/jessie
/media/labunix/Debian 8.1.0 amd64 1/cdrom1/dists/jessie:
Release  contrib  main

/media/labunix/Debian 8.1.0 amd64 1/cdrom2/dists/jessie:
Release  contrib  main

/media/labunix/Debian 8.1.0 amd64 1/cdrom3/dists/jessie:
Release  contrib  main

■隔離環境では「標準インストール」のみ選択可能。
 USBメモリを接続、「fstab」にUSBのマウント設定を書いて、マウント。

$ dmesg | grep sdb
[   20.030335] sd 8:0:0:0: [sdb] 31678464 512-byte logical blocks: (16.2 GB/15.1 GiB)
[   20.031202] sd 8:0:0:0: [sdb] Write Protect is off
[   20.031207] sd 8:0:0:0: [sdb] Mode Sense: 43 00 00 00
[   20.032730] sd 8:0:0:0: [sdb] No Caching mode page found
[   20.032773] sd 8:0:0:0: [sdb] Assuming drive cache: write through
[   20.037216]  sdb: sdb1 sdb2 sdb3
[   20.040457] sd 8:0:0:0: [sdb] Attached SCSI removable disk
[  111.346284] EXT4-fs (sdb3): mounted filesystem with ordered data mode. Opts: (null)
# grep usb3 /etc/fstab 
/dev/sdb3	/media/usb3				ext4	defaults	00
# mkdir /media/usb3
# mount -a

■隔離環境での「apt-get」。
 「gpg」が無視されているので、いつもよりも余計に「y」を入力する必要がある。

$ grep ^deb /etc/apt/sources.list
deb file:///media/usb3/cdrom1 jessie main contrib
deb file:///media/usb3/cdrom2 jessie main contrib
deb file:///media/usb3/cdrom3 jessie main contrib

$ su
# apt-get update
無視 file: jessie InRelease
無視 file: jessie InRelease
無視 file: jessie InRelease
無視 file: jessie Release.gpg
無視 file: jessie Release.gpg
無視 file: jessie Release.gpg
取得:1 file: jessie Release [18.6 kB]
取得:2 file: jessie Release [16.3 kB]
取得:3 file: jessie Release [13.8 kB]
パッケージリストを読み込んでいます... 完了
# apt-get purge -y nano
# apt-get install openssh-server vim chkconfig sudo
続行しますか? [Y/n] Y
警告: 以下のパッケージは認証されていません!
検証なしにこれらのパッケージをインストールしますか? [y/N] y

# usermod -a -G sudo labunix

■気が済んだら(?)、スタティックルートを切るなり上位のVPNを開けるなりして、
 プロキシ設定で外部からパッケージを取得できるようにする。
 16GBメモリでは厳しいけど、もっと容量の大きいUSBメモリであれば、
 セキュリティパッチも多少適用してから外部に接続出来る。

$ sudo sed -e 's/[0-9]/X/g' /etc/apt/apt.conf
Acquire::http::Proxy "http://XXX.XX.XX.XXX:XXXX/";

$ sudo grep ^deb /etc/apt/sources.list
deb file:///media/usb3/cdrom1 jessie main contrib
deb file:///media/usb3/cdrom2 jessie main contrib
deb file:///media/usb3/cdrom3 jessie main contrib
deb http://ftp.jp.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ jessie main
deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main
deb http://ftp.jp.debian.org/debian/ jessie-updates main
deb-src http://ftp.jp.debian.org/debian/ jessie-updates main

$ echo -e 'update -y \nupgrade -y \nautoclean -y \nclean all' | awk '{print "apt-get "$0}' | sudo sh

■wgetやcurlなどの他のパッケージ用にプロキシを設定

$ sudo sed -e 's/[0-9]/X/g' /etc/profile.d/proxy.sh 
#!/bin/bash

export http_proxy=http://XXX.XX.XX.XXX:XXXX/
export ftp_proxy=http://XXX.XX.XX.XXX:XXXX/
export HTTP_PROXY=http://XXX.XX.XX.XXX:XXXX/
export FTP_PROXY=http://XXX.XX.XX.XXX:XXXX/
export no_proxy=""

■MATEのインストール
 以下にもあるけど、面倒なので
 今回はssh経由で「tasksel」(CUIインストーラのパッケージ選択画面)を実行
 「MATE」を選択して待つだけ。

 Installing MATE on Raspbian/Debian 8.0 (jessie)
 https://mike632t.wordpress.com/2015/05/19/installing-mate-jessie/

$ sudo tasksel