196 lines
4.7 KiB
Bash
196 lines
4.7 KiB
Bash
#!/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."
|
|
|