Created
October 22, 2014 06:38
-
-
Save Millak/8c16c2fd6587bff8434b to your computer and use it in GitHub Desktop.
Debian RPi card creator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# build your own Raspberry Pi SD card | |
# | |
# by Klaus M Pfeiffer, http://blog.kmp.or.at/ , 2012-06-24 | |
# 2012-06-24 | |
# just checking for how partitions are called on the system (thanks to Ricky Birtles and Luke Wilkinson) | |
# using http.debian.net as debian mirror, see http://rgeissert.blogspot.co.at/2012/06/introducing-httpdebiannet-debians.html | |
# tested successfully in debian squeeze and wheezy VirtualBox | |
# added hint for lvm2 | |
# added debconf-set-selections for kezboard | |
# corrected bug in writing to etc/modules | |
# 2012-06-16 | |
# improoved handling of local debian mirror | |
# added hint for dosfstools (thanks to Mike) | |
# added vchiq & snd_bcm2835 to /etc/modules (thanks to Tony Jones) | |
# take the value fdisk suggests for the boot partition to start (thanks to Mike) | |
# 2012-06-02 | |
# improoved to directly generate an image file with the help of kpartx | |
# added deb_local_mirror for generating images with correct sources.list | |
# 2012-05-27 | |
# workaround for https://github.com/Hexxeh/rpi-update/issues/4 just touching /boot/start.elf before running rpi-update | |
# 2012-05-20 | |
# back to wheezy, http://bugs.debian.org/672851 solved, http://packages.qa.debian.org/i/ifupdown/news/20120519T163909Z.html | |
# 2012-05-19 | |
# stage3: remove eth* from /lib/udev/rules.d/75-persistent-net-generator.rules | |
# initial | |
# you need at least | |
# apt-get install binfmt-support qemu qemu-user-static debootstrap kpartx lvm2 dosfstools | |
deb_mirror="http://http.debian.net/debian" | |
#deb_local_mirror="http://debian.kmp.or.at:3142/debian" | |
bootsize="64M" | |
deb_release="wheezy" | |
device=$1 | |
buildenv="/root/rpi" | |
rootfs="${buildenv}/rootfs" | |
bootfs="${rootfs}/boot" | |
mydate=`date +%Y%m%d` | |
if [ "$deb_local_mirror" == "" ]; then | |
deb_local_mirror=$deb_mirror | |
fi | |
image="" | |
if [ $EUID -ne 0 ]; then | |
echo "this tool must be run as root" | |
exit 1 | |
fi | |
if ! [ -b $device ]; then | |
echo "$device is not a block device" | |
exit 1 | |
fi | |
if [ "$device" == "" ]; then | |
echo "no block device given, just creating an image" | |
mkdir -p $buildenv | |
image="${buildenv}/rpi_basic_${deb_release}_${mydate}.img" | |
dd if=/dev/zero of=$image bs=1MB count=1000 | |
device=`losetup -f --show $image` | |
echo "image $image created and mounted as $device" | |
else | |
dd if=/dev/zero of=$device bs=512 count=1 | |
fi | |
fdisk $device << EOF | |
n | |
p | |
1 | |
+$bootsize | |
t | |
c | |
n | |
p | |
2 | |
w | |
EOF | |
if [ "$image" != "" ]; then | |
losetup -d $device | |
device=`kpartx -va $image | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1` | |
device="/dev/mapper/${device}" | |
bootp=${device}p1 | |
rootp=${device}p2 | |
else | |
if ! [ -b ${device}1 ]; then | |
bootp=${device}p1 | |
rootp=${device}p2 | |
if ! [ -b ${bootp} ]; then | |
echo "uh, oh, something went wrong, can't find bootpartition neither as ${device}1 nor as ${device}p1, exiting." | |
exit 1 | |
fi | |
else | |
bootp=${device}1 | |
rootp=${device}2 | |
fi | |
fi | |
mkfs.vfat $bootp | |
mkfs.ext4 $rootp | |
mkdir -p $rootfs | |
mount $rootp $rootfs | |
cd $rootfs | |
debootstrap --foreign --arch armel $deb_release $rootfs $deb_local_mirror | |
cp /usr/bin/qemu-arm-static usr/bin/ | |
LANG=C chroot $rootfs /debootstrap/debootstrap --second-stage | |
mount $bootp $bootfs | |
echo "deb $deb_local_mirror $deb_release main contrib non-free | |
" > etc/apt/sources.list | |
echo "dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait" > boot/cmdline.txt | |
echo "proc /proc proc defaults 0 0 | |
/dev/mmcblk0p1 /boot vfat defaults 0 0 | |
" > etc/fstab | |
echo "raspberrypi" > etc/hostname | |
echo "auto lo | |
iface lo inet loopback | |
auto eth0 | |
iface eth0 inet dhcp | |
" > etc/network/interfaces | |
echo "vchiq | |
snd_bcm2835 | |
" >> etc/modules | |
echo "console-common console-data/keymap/policy select Select keymap from full list | |
console-common console-data/keymap/full select de-latin1-nodeadkeys | |
" > debconf.set | |
echo "#!/bin/bash | |
debconf-set-selections /debconf.set | |
rm -f /debconf.set | |
apt-get update | |
apt-get -y install git-core binutils ca-certificates | |
wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update | |
chmod +x /usr/bin/rpi-update | |
mkdir -p /lib/modules/3.1.9+ | |
touch /boot/start.elf | |
rpi-update | |
apt-get -y install locales console-common ntp openssh-server less vim | |
echo \"root:raspberry\" | chpasswd | |
sed -i -e 's/KERNEL\!=\"eth\*|/KERNEL\!=\"/' /lib/udev/rules.d/75-persistent-net-generator.rules | |
rm -f /etc/udev/rules.d/70-persistent-net.rules | |
rm -f third-stage | |
" > third-stage | |
chmod +x third-stage | |
LANG=C chroot $rootfs /third-stage | |
echo "deb $deb_mirror $deb_release main contrib non-free | |
" > etc/apt/sources.list | |
echo "#!/bin/bash | |
aptitude update | |
aptitude clean | |
apt-get clean | |
rm -f cleanup | |
" > cleanup | |
chmod +x cleanup | |
LANG=C chroot $rootfs /cleanup | |
cd | |
umount $bootp | |
umount $rootp | |
if [ "$image" != "" ]; then | |
kpartx -d $image | |
echo "created image $image" | |
fi | |
echo "done." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment