Raspberry Pi 自分の用途に合わせたディスクイメージを作成する Debian 最小構成
5月 14, 2013 — 11:23

RaspbianはRaspberry Piに適した素晴らしいLinuxですがGUIが不要な用途だったりすると
不要なパッケージがあまりにも多く含まれていると感じたり
ほかのデスクトップ環境のディスクイメージを作りたいと考える人もいるかと思います
そこで、自分の用途に合わせたディスクイメージの作り方をメモしておきます

必要な物
・Raspberry Pi
・Raspbianの入ったSDカード
・空のSDカード
・カードリーダライタ

Raspbianの入ったSDカードで起動し
空のSDカードにディスクイメージとなる環境を作ります

SDのパーティション削除とジオメトリの設定
$ sudo fdisk /dev/sda

Command (m for help): p

Disk /dev/sda: 1990 MB, 1990197248 bytes
241 heads, 63 sectors/track, 256 cylinders, total 3887104 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
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63     3886847     1943392+   b  W95 FAT32

Command (m for help): d
Selected partition 1

Command (m for help): x

Expert command (m for help): h
Number of heads (1-256, default 241): 255

Expert command (m for help): s
Number of sectors (1-63, default 63): 63

Expert command (m for help): c
Number of cylinders (1-1048576, default 256): 各自計算したシリンダ数

Expert command (m for help): r

Command (m for help): p

Disk /dev/sda: 1990 MB, 1990197248 bytes
255 heads, 63 sectors/track, 241 cylinders, total 3887104 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
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

シリンダ数の計算
SDカードの容量 / 255 / 63 / 512 = シリンダ数
例) 1990197248 / 255 / 63 / 512 = 241
割り切れない数値は切り捨てます

Windowsパーティション’/boot’の作成 (64MB)
$ sudo fdisk /dev/sda

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-3887103, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-3887103, default 3887103): +64M

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): c
Changed system type of partition 1 to c (W95 FAT32 (LBA))

Command (m for help): a
Partition number (1-4): 1

Command (m for help): p

Disk /dev/sda: 1990 MB, 1990197248 bytes
62 heads, 62 sectors/track, 1011 cylinders, total 3887104 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
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      133119       65536    c  W95 FAT32 (LBA)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

Linuxパーティション”/”の作成 (残りの容量全部)
$ sudo fdisk /dev/sda

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p):
Using default response p
Partition number (1-4, default 2):
Using default value 2
First sector (133120-3887103, default 133120):
Using default value 133120
Last sector, +sectors or +size{K,M,G} (133120-3887103, default 3887103):
Using default value 3887103

Command (m for help): p

Disk /dev/sda: 1990 MB, 1990197248 bytes
40 heads, 6 sectors/track, 16196 cylinders, total 3887104 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
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      133119       65536    c  W95 FAT32 (LBA)
/dev/sda2          133120     3887103     1876992   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

必要なパッケージのインストール
$ sudo apt-get install dosfstools debootstrap git-core ca-certificates

フォーマット
$ sudo mkfs -t vfat -v -c -F 32 /dev/sda1
$ sudo mke2fs -t ext4 /dev/sda2 -m 1

SDカードに作成したパーティション/を/mntにマウントしてdebootstrapを使いDebianをインストール
$ sudo mount -o defaults,noatime /dev/sda2 /mnt/
$ sudo debootstrap –exclude=ed,nano –foreign –arch armel wheezy /mnt http://ftp.jp.debian.org/debian

必要なファイルをコピー
$ sudo cp /etc/inittab /mnt/etc/inittab
$ sudo cp /etc/hosts /mnt/etc/hosts
$ sudo cp /etc/fstab /mnt/etc/fstab
$ sudo cp /etc/network/interfaces /mnt/etc/network/interfaces

rootユーザで/mntをchrootし疑似的にLinuxを触る
chrootするとsudoコマンドは使えないためrootユーザになっておく必要があります
作業中は一応、ヒストリーに履歴が残ってしまうようなので残らないようにしておきます
debootstrapを実行させるとマウントしていた/procがアンマウントされるようなので再度マウントします
$ sudo su –
# export HISTSIZE=0 HISTFILESIZE=0
# chroot /mnt
# mount -n /proc
# export PATH=/bin:/sbin:/usr/bin:/usr/sbin
# /debootstrap/debootstrap –second-stage –no-resolve-deps
# mount -n /proc

リポジトリの追加
これは標準のDevianのリポジトリを追加していますが面倒ならRaspbian側のファイルをコピーしても問題ありません
# vi /etc/apt/sources.list

# See sources.list(5) for more information, especialy
# Remember that you can only use http, ftp or file URIs
# CDROMs are managed through the apt-cdrom tool.
deb http://http.us.debian.org/debian stable main contrib non-free
deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
deb http://security.debian.org stable/updates main contrib non-free

# Uncomment if you want the apt-get source function to work
#deb-src http://http.us.debian.org/debian stable main contrib non-free
#deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free

アップデートとアップグレードの実行とその他、各自必要なパッケージのインストール
ここで好きなパッケージをインストールしておくことで用途に合わせたディスクイメージを作成することができます
# apt-get update
# apt-get upgrade
# apt-get install console-common console-setup console-data console-tools \
keyboard-configuration locales ntpdate ntp lua5.1 vim ssh sudo syslog-ng usbutils

ユーザの作成とsudoグループへの追加
この時にpasswdコマンドを使用しrootユーザのパスワードを設定することもできます
# adduser pi
# gpasswd -a pi sudo

chrootでの作業とrootでの作業の終了
# exit
# exit

起動時にeth0を有効化させる設定
$ sudo vi /mnt/etc/network/interfaces

auto lo eth0

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

/bootとモジュールのコピー
$ sudo mount /dev/sda1 /mnt/boot
$ sudo cp -rp /boot/* /mnt/boot
$ sudo cp -rp /lib/modules/* /mnt/lib/modules

カーネルとモジュールのアップデート
$ sudo wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update
$ sudo chmod +x /usr/bin/rpi-update
$ sudo ROOT_PATH=/mnt BOOT_PATH=/mnt/boot rpi-update

SDカードをアンマウント
$ sudo umount -l /mnt

シャットダウン
$ sudo shutdown -h now

SDカードを引き抜き、SDカードのイメージを作成すればオリジナルディスクイメージの完成です。
イメージ作成はWin32 Disk Imagerなどを使用すると簡単かもしれません

最後に作成したSDカードをRaspberry Piに接続し電源を入れ、正常に起動するするかを確認してみてください。

参考URL
覚書的な何か » Blog Archive » Raspberry PiでまっさらなDebianのインストール
Debian Linux for Raspberry Pi – GreenLeaf
Raspberry piにDebian squeezeをインストールする – もぐてっく
fdiskでフォーマットする – Android on Beagle

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

(Spamcheck Enabled)

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)