Edited at

Raspbianをdebootstrapから作る

More than 1 year has passed since last update.

スモールイメージのRaspbianが欲しく、debootstrapで構築してみました。

Minibianというディストリもあったんですが、ディスクサイズ変更やパッケージ導入が上手くできなかったので、

debootstrapで行うことにしています。

多分、Ubuntu、debianで構築できると思います(私は、Docker上のubuntuで行っております)。


参考


インストール


  • Docker for Windows上でUbuntuコンテナを作成して構築

  • 最終的なSDカードイメージはCentOS上で作業


前提パッケージの導入

sudo apt-get install -y qemu-user-static binfmt-support debootstrap git



インストール(jessie)

sudo mkdir /raspi-root

cd /raspi-root
sudo debootstrap --include=ca-certificates,apt,wget --foreign --arch=armhf jessie . http://archive.raspbian.org/raspbian
sudo cp $(which qemu-arm-static) ./usr/bin/
sudo chroot . debootstrap/debootstrap --second-stage --verbose


chroot準備

sudo mount -t sysfs sysfs sys/ 

sudo mount -t proc proc proc/
sudo mount -o bind /dev dev/
sudo mount -o bind /dev/pts dev/pts


ホスト名、hosts設定

sudo echo raspberry >./etc/hostname

sudo echo 127.0.0.1\traspberry >>./etc/host


ファイル編集


/raspi-root/etc/apt/sources.list

deb http://ftp.jaist.ac.jp/raspbian jessie main firmware non-free

deb http://mirrordirector.raspbian.org/raspbian jessie main firmware non-free
deb http://archive.raspberrypi.org/debian jessie main


/raspi-root/etc/fstab

auto lo

iface lo inet loopback

auto eth0
iface eth0 inet dhcp



/raspi-root/etc/fstab

proc           /proc    proc  defaults         0 0

/dev/mmcblk0p1 /boot vfat defaults,noatime 0 0
/dev/mmcblk0p2 / ext4 defaults,noatime 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0


パッケージインストール


リポジトリ認証の鍵情報追加

sudo chroot . wget http://archive.raspbian.org/raspbian.public.key -O - | chroot . apt-key add -

sudo chroot . wget http://archive.raspberrypi.org/debian/raspberrypi.gpg.key -O - | chroot . apt-key add -


最低限のパッケージ導入

sudo chroot . apt-get update

sudo chroot . apt-get -y upgrade
sudo chroot . apt-get install -y \
sudo \
openssh-server \
usbmount \
patch \
less \
console-common \
console-data \
console-setup \
tzdata \
most \
locales \
keyboard-configuration \
raspi-config rpi-update


piユーザの作成

sudo chroot . useradd -m -s /bin/bash pi

sudo chroot . usermod -a -G sudo,staff,kmem,plugdev,audio pi
sudo chroot . passwd pi


bootパーティションファイル作成


firmware導入

git clone https://github.com/raspberrypi/firmware.git ~/firmware



bootディレクトリ作成

sudo mkdir /raspi-boot

sudo mount --bind /raspi-boot /raspi-root/boot
sudo cp -R ~/firmware/boot/* /raspi-root/boot/
sudo mkdir /raspi-root/lib/modules/
sudo cp -R ~/firmware/modules/* /raspi-root/lib/modules/


ディスクイメージ作成


最終工程

sudo chroot . apt-get clean

sudo chroot . apt-get autoclean
sudo chroot . apt-get autoremove -y
sudo chroot . raspi-update
sudo umount ./dev/pts
sudo umount ./dev
sudo umount ./proc
sudo umount ./sys
sudo umount ./boot


SDイメージ作成

dd if=/dev/zero bs=1M count=3839 > ~/root.img

sudo losetup -f ~/root.img
sudo losetup -a
sudo parted -s /dev/loop0 mklabel msdos
sudo parted -s /dev/loop0 unit cyl mkpart primary fat16 -- 0 16
sudo parted -s /dev/loop0 set 1 boot on
sudo parted -s /dev/loop0 unit cyl mkpart primary ext2 -- 16 -2
sudo losetup -d /dev/loop0
sudo losetup -f -P ~/root.img
sudo mkfs.vfat -n System /dev/loop0p1
sudo mkfs.ext4 -L Storage /dev/loop0p4
sudo mount /dev/loop0p1 -o rw /mnt
sudo cp -R /raspi-boot/* /mnt/
sudo umount /mnt
sudo mount /dev/loop0p2 -o rw /mnt
sudo cp -R /raspi-root/* /mnt/
sudo umount /mnt
sudo losetup -d /dev/loop0

~/root.imgをddまたは、Win32DiskImagerでmicro sdカードに書き込めば完了です。