arm-sdk

os build toolkit for various embedded devices
git clone https://git.parazyd.org/arm-sdk
Log | Files | Refs | Submodules | README | LICENSE

commit 7d91fab5a0831d9aeaacca6595b7462fd50568d2
parent 51480070306ba4658f8d95ac15fba8d6eaf228fb
Author: parazyd <parazyd@dyne.org>
Date:   Sat, 16 Apr 2016 03:40:11 +0200

making way for other distros

Diffstat:
MREADME.md | 9++++++---
Darm/common | 427-------------------------------------------------------------------------------
Marm/init-arm | 13+++++++------
Aarm/profiles/common-devuan | 450+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Marm/scripts/bananapi.sh | 2--
Marm/scripts/chromebook-acer.sh | 2--
Marm/scripts/cubieboard2.sh | 2--
Marm/scripts/raspberry-pi-2.sh | 2--
Mconfig | 20+++-----------------
9 files changed, 466 insertions(+), 461 deletions(-)

diff --git a/README.md b/README.md @@ -41,13 +41,16 @@ then step inside the sdk, "source" it: ; source sdk ``` -Now is the time you choose the device you want to build the image for. Currently -you can choose one of the following: +Now is the time you choose the device and OS you want to build the image for. Currently +you can choose these distros: +* `devuan` +and one of the following devices: * `raspi2` * `bananapi` * `cubieboard2` +* `chromeacer` ``` -; init-arm raspi2 +; init devuan raspi2 ``` Once initialized, you will get further instructions. diff --git a/arm/common b/arm/common @@ -1,427 +0,0 @@ -#!/usr/bin/env zsh -# -# Copyright (C) 2016 Dyne.org Foundation -# -# ARM SDK is designed, written and maintained by parazyd <parazyd@dyne.org> -# -# This source code is free software; you can redistribute it and/or -# modify it under the terms of the GNU Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This source code is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Please refer -# to the GNU Public License for more details. -# -# You should have received a copy of the GNU Public License along with -# this source code; if not, write to: Free Software Foundation, Inc., -# 675 Mass Ave, Cambridge, MA 02139, USA. -# -# Common functions for builds - -writebase="$strapdir" -command -v dcfldd >/dev/null && DD=`command -v dcfldd` -DD=${DD:-/bin/dd} - -write-hostname() { - fn write-hostname - - print $os | sudo tee ${writebase}/etc/hostname - notice "Wrote $writebase/etc/hostname" -} - -write-fstab() { - fn write-fstab - - notice "Writing fstab" - cat <<EOF | sudo tee ${workdir}/root/etc/fstab -# <file system> <mount point> <type> <options> <dump> <pass> -proc /proc proc nodev,noexec,nosuid 0 0 -/dev/mmcblk0p2 / ext4 errors=remount-ro 0 1 -/dev/mmcblk0p1 /boot vfat noauto 0 0 -EOF -} - -write-hosts-file() { - fn write-hosts-file - - cat <<EOF | sudo tee ${writebase}/etc/hosts -127.0.0.1 ${os} localhost -::1 localhost ip6-localhost ip6-loopback -fe00::0 ip6-localnet -fe00::0 ip6-mcastprefix -fe02::1 ip6-allnodes -fe02::1 ip6-allrouters -EOF - notice "Wrote $writebase/etc/hosts" -} - -write-network-ifaces() { - fn write-hosts-file - - cat <<EOF | sudo tee ${writebase}/etc/network/interfaces -auto lo -iface lo inet loopback - -auto eth0 -iface eth0 inet dhcp -EOF - notice "Wrote $writebase/etc/network/interfaces" -} - -write-resolvconf() { - fn write-resolvconf - - cat <<EOF | sudo tee ${writebase}/etc/resolv.conf -# foebud and ccc dns -nameserver 85.214.20.141 -nameserver 213.73.91.35 -EOF - notice "Wrote $writebase/etc/resolv.conf" -} - -write-debconf() { - fn write-debconf - - cat <<EOF | sudo tee ${writebase}/debconf.set -console-common console-data/keymap/policy select Select keymap from full list -console-common console-data/keymap/full select en-latin1-nodeadkeys -EOF - [[ $? = 0 ]] || error "Failed writing $writebase/debconf.set" -} - -write-cleanup() { - fn write-cleanup - - cat <<EOF | sudo tee ${writebase}/cleanup -#!/bin/bash -rm -rf /root/.bash_history -apt-get update -apt-get clean -rm -f /0 -rm -f /hs_err* -rm -f cleanup -rm -f /usr/bin/qemu* -EOF - sudo chmod +x $writebase/cleanup - notice "Wrote $writebase/cleanup" -} - -write-sources-list() { - fn write-sources-list - - cat <<EOF | sudo tee ${writebase}/$1etc/apt/sources.list -deb ${mirror} ${release} ${section} -deb-src ${mirror} ${release} ${section} -EOF - notice "Wrote $writebase/etc/apt/sources.list" -} - -write-third-stage() { - fn write-third-stage - - cat <<EOF | sudo tee ${writebase}/third-stage -#!/bin/bash -dpkg-divert --add --local --divert /usr/sbin/invoke-rc.d.chroot --rename /usr/sbin/invoke-rc.d -cp /bin/true /usr/sbin/invoke-rc.d -echo -e "#!/bin/sh\nexit 101" > /usr/sbin/policy-rc.d -chmod +x /usr/sbin/policy-rc.d - -apt-get update -apt-get --yes --force-yes install locales-all - -debconf-set-selections /debconf.set -rm -f /debconf.set -apt-get update -apt-get -y install ${core_packages} - -echo "root:toor" | chpasswd -sed -i -e 's/KERNEL\!=\"eth\*|/KERNEL\!=\"/' /lib/udev/rules.d/75-persistent-net-generator.rules -rm -fv /etc/udev/rules.d/70-persistent-net.rules -export DEBIAN_FRONTEND=noninteractive - -apt-get --yes --force-yes install ${base_packages} -apt-get --yes --force-yes install ${system_packages} -apt-get --yes --force-yes install ${extra_packages} - -apt-get --yes --force-yes dist-upgrade -apt-get --yes --force-yes autoremove - -echo "Allowing SSH root login" -sed -i -e 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config -update-rc.d ssh enable - -rm -fv /usr/sbin/policy-rc.d -rm -fv /usr/sbin/invoke-rc.d -dpkg-divert --remove --rename /usr/sbin/invoke-rc.d - -rm -fv /third-stage -EOF - sudo chmod +x $writebase/third-stage - notice "Wrote $writebase/third-stage" -} - -${device_name}-bootstrap() { - fn ${device_name}-bootstrap - - notice "Bootstrapping $os base" - mkdir -p ${workdir} - cd ${workdir} - - sudo debootstrap --foreign --arch ${arch} ${release} ${strapdir} ${mirror} - [[ $? = 0 ]] || { - error "debootstrap failed" - return 1 - } - - # qemu-wrapper - [[ $enable_qemu_wrapper = 1 ]] && { - sudo cp $R/arm/qemu-wrapper ${strapdir}/usr/bin/ && notice "Copied qemu-wrapper" - print ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/qemu-wrapper:' \ - | sudo tee /proc/sys/fs/binfmt_misc/register - } - - sudo cp -rfv ${qemu_bin} ${strapdir}/usr/bin/ && notice "Success bootstrapping base" - [[ $? = 0 ]] || return 1 - notice "Next step is "${device_name}-secondstage -} - -${device_name}-secondstage() { - fn ${device_name}-secondstage - - notice "Bootstrapping $os second-stage" - LANG=C sudo -E chroot ${strapdir} /debootstrap/debootstrap --second-stage - [[ $? = 0 ]] || { - error "debootstrap second-stage failed" - return 1 - } - - write-sources-list - write-hostname - write-hosts-file - write-network-ifaces - write-resolvconf - write-debconf - write-third-stage - - notice "Finished second-stage" - notice "Next step is: ${device_name}-thirdstage" -} - -${device_name}-thirdstage() { - fn ${device_name}-thirdstage - - notice "Bootstrapping $os third-stage" - - export LC_ALL=C - export DEBIAN_FRONTEND=noninteractive - - sudo -E mount -t proc proc ${strapdir}/proc && notice "Mounted proc..." - sudo -E mount -o bind /dev/ ${strapdir}/dev/ && notice "Mounted dev..." - sudo -E mount -o bind /dev/pts ${strapdir}/dev/pts && notice "Mounted dev/pts..." - - notice "Chrooting..." - LANG=C sudo -E chroot $strapdir /third-stage - [[ $? = 0 ]] || { - error "Failed at third-stage" - return 1 - } - - write-cleanup - notice "Executing cleanup..." - LANG=C sudo -E chroot ${strapdir} /cleanup - [[ $? = 0 ]] || { - error "Failed at cleanup" - return 1 - } - - copy-zram - - sudo umount ${strapdir}/dev/pts && notice "Unmounted dev/pts" - sleep 5 - sudo umount ${strapdir}/dev && notice "Unmounted dev" - sleep 2 - sudo umount ${strapdir}/proc && notice "Unmounted proc" - sleep 2 - notice "Finalized third-stage" - notice "Next step is: ${device_name}-prepimg" -} - -${device_name}-prepimg() { - fn ${device_name}-prepimg - - notice "Creating image file..." - $DD if=/dev/zero \ - of=${image_name}.img \ - bs=1M count=$size - - notice "Partitioning..." - if [[ $gpt == 1 ]]; then - parted ${image_name}.img --script -- mklabel gpt - cgpt create -z ${image_name}.img - cgpt create ${image_name}.img - cgpt add -i 1 -t kernel -b 8192 -s 32768 -l kernel -S 1 -T 5 -P 10 ${image_name}.img - cgpt add -i 2 -t data -b 40960 -s `expr $(cgpt show ${image_name}.img \ - | awk '/Sec GPT table/ {print \$1}') - 40960` -l Root ${image_name}.img - - loopdevice=`sudo losetup -f --show ${workdir}/${image_name}.img` - mappdevice=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1` - notice "Loopdevice: $loopdevice" - notice "Mapper device: $mappdevice" - - warn "Do not think of purple hippos" && sleep 5 - - mappdevice="/dev/mapper/${mappdevice}" - bootpart=${mappdevice}p1 - rootpart=${mappdevice}p2 - - notice "Formatting partitions..." - mkfs.ext4 -L rootfs $rootpart - - mkdir -p ${workdir}/root - sudo mount $rootpart ${workdir}/root && notice "Mounted root part" - - else - parted ${image_name}.img --script -- mklabel msdos - parted ${image_name}.img --script -- mkpart primary ${parted_boot} - parted ${image_name}.img --script -- mkpart primary ${parted_root} - - loopdevice=`sudo losetup -f --show ${workdir}/${image_name}.img` - mappdevice=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1` - notice "Loopdevice: $loopdevice" - notice "Mapper device: $mappdevice" - - warn "Do not think of purple hippos" && sleep 5 - - mappdevice="/dev/mapper/${mappdevice}" - bootpart=${mappdevice}p1 - rootpart=${mappdevice}p2 - - notice "Formatting partitions..." - sudo mkfs.vfat $bootpart - sudo mkfs.ext4 $rootpart - - mkdir -p ${workdir}/bootp ${workdir}/root - sudo mount $bootpart ${workdir}/bootp && notice "Mounted boot part" - sudo mount $rootpart ${workdir}/root && notice "Mounted root part" - - fi - - print ${inittab} | sudo tee -a ${strapdir}/etc/inittab - for i in $custmodules; do print $i | sudo tee -a ${strapdir}/etc/modules ; done - notice "Finalized preparing image" - notice "Next step is ${device_name}-build-kernel" -} - -${device_name}-pack-image() { - fn ${device_name}-pack-image - - notice "Rechecking filesystem" - sudo e2fsck -f ${mappdevice}p2 - sudo resize2fs ${mappdevice}p2 - - sudo kpartx -dv $loopdevice - [[ $? = 0 ]] || error "kpartx failed to remove $loopdevice" - sudo losetup -d $loopdevice - [[ $? = 0 ]] || error "losetup failed to remove $loopdevice" - - notice "Compressing image to xz" - xz -zv ${image_name}.img - - notice "Generating sha256 for ${image_name}.img.xz" - sha256sum ${image_name}.img.xz > ${image_name}.img.xz.sha - - [[ -d $R/arm/finished ]] || mkdir -p $R/arm/finished - mv -v ${image_name}.img.xz $R/arm/finished/ - mv -v ${image_name}.img.xz.sha $R/arm/finished/ - - cd $R - sudo rm -r ${strapdir} - sudo rm -r ${workdir} - - notice "Finished building ${image_name}" -} - -get-kernel-firmware() { - [[ -d $R/tmp/firmware ]] || git clone \ - https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git $R/tmp/firmware - rm -rf $R/tmp/firmware/.git -} - -clean-kernel-leftovers() { - notice "Cleaning up from kernel build..." - sudo rm -r ${strapdir}/usr/src/kernel - sudo rm ${strapdir}/usr/src/${device_name}.config - #sudo rm ${strapdir}/usr/src/kernel-at-commit - - sudo chown root ${strapdir}/lib - sudo chown -R root ${strapdir}/lib/modules - sudo chown -R root ${strapdir}/lib/firmware - - cd ${workdir} -} - -copy-kernel-config() { - cd ${strapdir}/usr/src/kernel - - cp -v ${workdir}/../kernel-configs/${device_name}.config .config - sudo cp -v ${workdir}/../kernel-configs/${device_name}.config ../${device_name}.config - - export ARCH=arm - export CROSS_COMPILE=${compiler} -} - -make-kernel-modules() { - [[ -d ${strapdir}/lib/modules ]] || sudo mkdir -p ${strapdir}/lib/modules - [[ -d ${strapdir}/lib/firmware ]] || sudo mkdir -p ${strapdir}/lib/firmware - sudo chown -R $USER ${strapdir}/lib/modules - sudo chown -R $USER ${strapdir}/lib/firmware - make modules_install INSTALL_MOD_PATH=${strapdir} - [[ $? = 0 ]] || { - error "Failed installing kernel modules" - return 1 - } -} - -copy-zram() { - notice "Installing zram init" - sudo cp ${workdir}/../extra/zram ${strapdir}/etc/init.d/zram - sudo chmod +x ${strapdir}/etc/init.d/zram -} - -${device_name}-finalize() { - fn ${device_name}-finalize - - clean-kernel-leftovers - - notice "Making you wait for nothing..." - sudo rsync -HPavz -q ${strapdir}/* ${workdir}/root - - writebase="${workdir}/root" - write-sources-list - write-fstab - - cd ${workdir} - - sudo umount ${bootpart} && notice "Unmounted boot part" - sudo umount ${rootpart} && notice "Unmounted root part" - - notice "Finalized build..." - notice "Pack and finish with: ${device_name}-pack-image" -} - -${device_name}-build-all() { - for i in bootstrap secondstage thirdstage prepimg build-kernel finalize pack-image; do - ${device_name}-${i} - [[ $? = 0 ]] || { - error "Failed on ${device_name}-${i}" - return 1 - } - done -} - -[[ -f ${qemu_bin} ]] || warn "No ${qemu_bin}" -notice "Loaded build script for ${device_name}" -notice "Run '${device_name}-bootstrap' to build step by step" -notice "Run '${device_name}-build-all' to build image automatically" diff --git a/arm/init-arm b/arm/init-arm @@ -19,12 +19,13 @@ # 675 Mass Ave, Cambridge, MA 02139, USA. # -init-arm() { - fn init-arm $* - armdev="$1" - req=(armdev) +init() { + fn init $* + distro="$1" + armdev="$2" + req=(distro armdev) ckreq || { - error "No ARM device specified" + error "No distro or device specified" return 1 } @@ -38,6 +39,6 @@ init-arm() { arm_build_device=${arm_map[$armdev]} - common="$R/arm/common" + common="$R/arm/profiles/common-${distro}" source ${arm_build_device} } diff --git a/arm/profiles/common-devuan b/arm/profiles/common-devuan @@ -0,0 +1,450 @@ +#!/usr/bin/env zsh +# +# Copyright (C) 2016 Dyne.org Foundation +# +# ARM SDK is designed, written and maintained by parazyd <parazyd@dyne.org> +# +# This source code is free software; you can redistribute it and/or +# modify it under the terms of the GNU Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This source code is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Please refer +# to the GNU Public License for more details. +# +# You should have received a copy of the GNU Public License along with +# this source code; if not, write to: Free Software Foundation, Inc., +# 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Common functions for builds + +# -- settings -- +os=devuan +release=jessie +section=main +version=alpha4 +mirror=http://packages.devuan.org/merged + +core_packages=(debian-keyring devuan-keyring) +core_packages+=(git-core binutils ca-certificates initramfs-tools u-boot-tools) +core_packages+=(locales console-common less nano git curl) + +base_packages=(bzip2 dialog apt-utils fakeroot e2fsprogs parted) + +system_packages=(sysvinit ssh) + +writebase="$strapdir" +command -v dcfldd >/dev/null && DD=`command -v dcfldd` +DD=${DD:-/bin/dd} +# -- end settings -- + +write-hostname() { + fn write-hostname + + print $os | sudo tee ${writebase}/etc/hostname + notice "Wrote $writebase/etc/hostname" +} + +write-fstab() { + fn write-fstab + + notice "Writing fstab" + cat <<EOF | sudo tee ${workdir}/root/etc/fstab +# <file system> <mount point> <type> <options> <dump> <pass> +proc /proc proc nodev,noexec,nosuid 0 0 +/dev/mmcblk0p2 / ext4 errors=remount-ro 0 1 +/dev/mmcblk0p1 /boot vfat noauto 0 0 +EOF +} + +write-hosts-file() { + fn write-hosts-file + + cat <<EOF | sudo tee ${writebase}/etc/hosts +127.0.0.1 ${os} localhost +::1 localhost ip6-localhost ip6-loopback +fe00::0 ip6-localnet +fe00::0 ip6-mcastprefix +fe02::1 ip6-allnodes +fe02::1 ip6-allrouters +EOF + notice "Wrote $writebase/etc/hosts" +} + +write-network-ifaces() { + fn write-hosts-file + + cat <<EOF | sudo tee ${writebase}/etc/network/interfaces +auto lo +iface lo inet loopback + +auto eth0 +iface eth0 inet dhcp +EOF + notice "Wrote $writebase/etc/network/interfaces" +} + +write-resolvconf() { + fn write-resolvconf + + cat <<EOF | sudo tee ${writebase}/etc/resolv.conf +# foebud and ccc dns +nameserver 85.214.20.141 +nameserver 213.73.91.35 +EOF + notice "Wrote $writebase/etc/resolv.conf" +} + +write-debconf() { + fn write-debconf + + cat <<EOF | sudo tee ${writebase}/debconf.set +console-common console-data/keymap/policy select Select keymap from full list +console-common console-data/keymap/full select en-latin1-nodeadkeys +EOF + [[ $? = 0 ]] || error "Failed writing $writebase/debconf.set" +} + +write-cleanup() { + fn write-cleanup + + cat <<EOF | sudo tee ${writebase}/cleanup +#!/bin/bash +rm -rf /root/.bash_history +apt-get update +apt-get clean +rm -f /0 +rm -f /hs_err* +rm -f cleanup +rm -f /usr/bin/qemu* +EOF + sudo chmod +x $writebase/cleanup + notice "Wrote $writebase/cleanup" +} + +write-sources-list() { + fn write-sources-list + + cat <<EOF | sudo tee ${writebase}/$1etc/apt/sources.list +deb ${mirror} ${release} ${section} +deb-src ${mirror} ${release} ${section} +EOF + notice "Wrote $writebase/etc/apt/sources.list" +} + +write-third-stage() { + fn write-third-stage + + cat <<EOF | sudo tee ${writebase}/third-stage +#!/bin/bash +dpkg-divert --add --local --divert /usr/sbin/invoke-rc.d.chroot --rename /usr/sbin/invoke-rc.d +cp /bin/true /usr/sbin/invoke-rc.d +echo -e "#!/bin/sh\nexit 101" > /usr/sbin/policy-rc.d +chmod +x /usr/sbin/policy-rc.d + +apt-get update +apt-get --yes --force-yes install locales-all + +debconf-set-selections /debconf.set +rm -f /debconf.set +apt-get update +apt-get -y install ${core_packages} + +echo "root:toor" | chpasswd +sed -i -e 's/KERNEL\!=\"eth\*|/KERNEL\!=\"/' /lib/udev/rules.d/75-persistent-net-generator.rules +rm -fv /etc/udev/rules.d/70-persistent-net.rules +export DEBIAN_FRONTEND=noninteractive + +apt-get --yes --force-yes install ${base_packages} +apt-get --yes --force-yes install ${system_packages} +apt-get --yes --force-yes install ${extra_packages} + +apt-get --yes --force-yes dist-upgrade +apt-get --yes --force-yes autoremove + +echo "Allowing SSH root login" +sed -i -e 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config +update-rc.d ssh enable + +rm -fv /usr/sbin/policy-rc.d +rm -fv /usr/sbin/invoke-rc.d +dpkg-divert --remove --rename /usr/sbin/invoke-rc.d + +rm -fv /third-stage +EOF + sudo chmod +x $writebase/third-stage + notice "Wrote $writebase/third-stage" +} + +${device_name}-bootstrap() { + fn ${device_name}-bootstrap + + notice "Bootstrapping $os base" + mkdir -p ${workdir} + cd ${workdir} + + sudo debootstrap --foreign --arch ${arch} ${release} ${strapdir} ${mirror} + [[ $? = 0 ]] || { + error "debootstrap failed" + return 1 + } + + # qemu-wrapper + [[ $enable_qemu_wrapper = 1 ]] && { + sudo cp $R/arm/qemu-wrapper ${strapdir}/usr/bin/ && notice "Copied qemu-wrapper" + print ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/qemu-wrapper:' \ + | sudo tee /proc/sys/fs/binfmt_misc/register + } + + sudo cp -rfv ${qemu_bin} ${strapdir}/usr/bin/ && notice "Success bootstrapping base" + [[ $? = 0 ]] || return 1 + notice "Next step is "${device_name}-secondstage +} + +${device_name}-secondstage() { + fn ${device_name}-secondstage + + notice "Bootstrapping $os second-stage" + LANG=C sudo -E chroot ${strapdir} /debootstrap/debootstrap --second-stage + [[ $? = 0 ]] || { + error "debootstrap second-stage failed" + return 1 + } + + write-sources-list + write-hostname + write-hosts-file + write-network-ifaces + write-resolvconf + write-debconf + write-third-stage + + notice "Finished second-stage" + notice "Next step is: ${device_name}-thirdstage" +} + +${device_name}-thirdstage() { + fn ${device_name}-thirdstage + + notice "Bootstrapping $os third-stage" + + export LC_ALL=C + export DEBIAN_FRONTEND=noninteractive + + sudo -E mount -t proc proc ${strapdir}/proc && notice "Mounted proc..." + sudo -E mount -o bind /dev/ ${strapdir}/dev/ && notice "Mounted dev..." + sudo -E mount -o bind /dev/pts ${strapdir}/dev/pts && notice "Mounted dev/pts..." + + notice "Chrooting..." + LANG=C sudo -E chroot $strapdir /third-stage + [[ $? = 0 ]] || { + error "Failed at third-stage" + return 1 + } + + write-cleanup + notice "Executing cleanup..." + LANG=C sudo -E chroot ${strapdir} /cleanup + [[ $? = 0 ]] || { + error "Failed at cleanup" + return 1 + } + + copy-zram + + sudo umount ${strapdir}/dev/pts && notice "Unmounted dev/pts" + sleep 5 + sudo umount ${strapdir}/dev && notice "Unmounted dev" + sleep 2 + sudo umount ${strapdir}/proc && notice "Unmounted proc" + sleep 2 + notice "Finalized third-stage" + notice "Next step is: ${device_name}-prepimg" +} + +${device_name}-prepimg() { + fn ${device_name}-prepimg + + notice "Creating image file..." + $DD if=/dev/zero \ + of=${image_name}.img \ + bs=1M count=$size + + notice "Partitioning..." + if [[ $gpt == 1 ]]; then + parted ${image_name}.img --script -- mklabel gpt + cgpt create -z ${image_name}.img + cgpt create ${image_name}.img + cgpt add -i 1 -t kernel -b 8192 -s 32768 -l kernel -S 1 -T 5 -P 10 ${image_name}.img + cgpt add -i 2 -t data -b 40960 -s `expr $(cgpt show ${image_name}.img \ + | awk '/Sec GPT table/ {print \$1}') - 40960` -l Root ${image_name}.img + + loopdevice=`sudo losetup -f --show ${workdir}/${image_name}.img` + mappdevice=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1` + notice "Loopdevice: $loopdevice" + notice "Mapper device: $mappdevice" + + warn "Do not think of purple hippos" && sleep 5 + + mappdevice="/dev/mapper/${mappdevice}" + bootpart=${mappdevice}p1 + rootpart=${mappdevice}p2 + + notice "Formatting partitions..." + mkfs.ext4 -L rootfs $rootpart + + mkdir -p ${workdir}/root + sudo mount $rootpart ${workdir}/root && notice "Mounted root part" + + else + parted ${image_name}.img --script -- mklabel msdos + parted ${image_name}.img --script -- mkpart primary ${parted_boot} + parted ${image_name}.img --script -- mkpart primary ${parted_root} + + loopdevice=`sudo losetup -f --show ${workdir}/${image_name}.img` + mappdevice=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1` + notice "Loopdevice: $loopdevice" + notice "Mapper device: $mappdevice" + + warn "Do not think of purple hippos" && sleep 5 + + mappdevice="/dev/mapper/${mappdevice}" + bootpart=${mappdevice}p1 + rootpart=${mappdevice}p2 + + notice "Formatting partitions..." + sudo mkfs.vfat $bootpart + sudo mkfs.ext4 $rootpart + + mkdir -p ${workdir}/bootp ${workdir}/root + sudo mount $bootpart ${workdir}/bootp && notice "Mounted boot part" + sudo mount $rootpart ${workdir}/root && notice "Mounted root part" + + fi + + print ${inittab} | sudo tee -a ${strapdir}/etc/inittab + for i in $custmodules; do print $i | sudo tee -a ${strapdir}/etc/modules ; done + notice "Finalized preparing image" + notice "Next step is ${device_name}-build-kernel" +} + +${device_name}-pack-image() { + fn ${device_name}-pack-image + + notice "Rechecking filesystem" + sudo e2fsck -f ${mappdevice}p2 + sudo resize2fs ${mappdevice}p2 + + sudo kpartx -dv $loopdevice + [[ $? = 0 ]] || error "kpartx failed to remove $loopdevice" + sudo losetup -d $loopdevice + [[ $? = 0 ]] || error "losetup failed to remove $loopdevice" + + notice "Compressing image to xz" + xz -zv ${image_name}.img + + notice "Generating sha256 for ${image_name}.img.xz" + sha256sum ${image_name}.img.xz > ${image_name}.img.xz.sha + + [[ -d $R/arm/finished ]] || mkdir -p $R/arm/finished + mv -v ${image_name}.img.xz $R/arm/finished/ + mv -v ${image_name}.img.xz.sha $R/arm/finished/ + + cd $R + sudo rm -r ${strapdir} + sudo rm -r ${workdir} + + notice "Finished building ${image_name}" +} + +get-kernel-firmware() { + fn get-kernel-firmware + + [[ -d $R/tmp/firmware ]] || git clone \ + https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git $R/tmp/firmware + rm -rf $R/tmp/firmware/.git +} + +clean-kernel-leftovers() { + fn clean-kernel-leftovers + + notice "Cleaning up from kernel build..." + sudo rm -r ${strapdir}/usr/src/kernel + sudo rm ${strapdir}/usr/src/${device_name}.config + #sudo rm ${strapdir}/usr/src/kernel-at-commit + + sudo chown root ${strapdir}/lib + sudo chown -R root ${strapdir}/lib/modules + sudo chown -R root ${strapdir}/lib/firmware + + cd ${workdir} +} + +copy-kernel-config() { + fn copy-kernel-config + + cd ${strapdir}/usr/src/kernel + cp -v ${workdir}/../kernel-configs/${device_name}.config .config + sudo cp -v ${workdir}/../kernel-configs/${device_name}.config ../${device_name}.config + + export ARCH=arm + export CROSS_COMPILE=${compiler} +} + +make-kernel-modules() { + fn make-kernel-modules + [[ -d ${strapdir}/lib/modules ]] || sudo mkdir -p ${strapdir}/lib/modules + [[ -d ${strapdir}/lib/firmware ]] || sudo mkdir -p ${strapdir}/lib/firmware + sudo chown -R $USER ${strapdir}/lib/modules + sudo chown -R $USER ${strapdir}/lib/firmware + make modules_install INSTALL_MOD_PATH=${strapdir} + [[ $? = 0 ]] || { + error "Failed installing kernel modules" + return 1 + } +} + +copy-zram() { + fn copy-zram + notice "Installing zram init" + sudo cp ${workdir}/../extra/zram ${strapdir}/etc/init.d/zram + sudo chmod +x ${strapdir}/etc/init.d/zram +} + +${device_name}-finalize() { + fn ${device_name}-finalize + + clean-kernel-leftovers + + notice "Making you wait for nothing..." + sudo rsync -HPavz -q ${strapdir}/* ${workdir}/root + + writebase="${workdir}/root" + write-sources-list + write-fstab + + cd ${workdir} + + sudo umount ${bootpart} && notice "Unmounted boot part" + sudo umount ${rootpart} && notice "Unmounted root part" + + notice "Finalized build..." + notice "Pack and finish with: ${device_name}-pack-image" +} + +${device_name}-build-all() { + for i in bootstrap secondstage thirdstage prepimg build-kernel finalize pack-image; do + ${device_name}-${i} + [[ $? = 0 ]] || { + error "Failed on ${device_name}-${i}" + return 1 + } + done +} + +[[ -f ${qemu_bin} ]] || warn "No ${qemu_bin}" +notice "Loaded build script for ${device_name}" +notice "Run '${device_name}-bootstrap' to build step by step" +notice "Run '${device_name}-build-all' to build image automatically" diff --git a/arm/scripts/bananapi.sh b/arm/scripts/bananapi.sh @@ -29,8 +29,6 @@ extra_packages=() # Ones below should not need changing workdir="$R/arm/${device_name}-build" strapdir="${workdir}/${os}-${arch}" -qemu_bin="/usr/bin/qemu-arm-static" # Devuan -#qemu_bin="/usr/bin/qemu-arm" # Gentoo parted_boot=(fat32 2048s 264191s) parted_root=(ext4 264192s 100%) inittab="T1:12345:respawn:/sbin/agetty -L ttyS0 115200 vt100" diff --git a/arm/scripts/chromebook-acer.sh b/arm/scripts/chromebook-acer.sh @@ -31,8 +31,6 @@ extra_packages+=(laptop-mode-tools usbutils sudo vim) # Ones below should not need changing workdir="$R/arm/${device_name}-build" strapdir="${workdir}/${os}-${arch}" -qemu_bin="/usr/bin/qemu-arm-static" # Devuan -#qemu_bin="/usr/bin/qemu-arm" # Gentoo gpt=1 #parted_boot=(fat32 2048s 264191s) #parted_root=(ext4 264192s 100%) diff --git a/arm/scripts/cubieboard2.sh b/arm/scripts/cubieboard2.sh @@ -29,8 +29,6 @@ extra_packages=() # Ones below should not need changing workdir="$R/arm/${device_name}-build" strapdir="${workdir}/${os}-${arch}" -qemu_bin="/usr/bin/qemu-arm-static" # Devuan -#qemu_bin="/usr/bin/qemu-arm" # Gentoo parted_boot=(fat32 2048s 264191s) parted_root=(ext4 264192s 100%) inittab="T1:12345:respawn:/sbin/agetty -L ttyS0 115200 vt100" diff --git a/arm/scripts/raspberry-pi-2.sh b/arm/scripts/raspberry-pi-2.sh @@ -29,8 +29,6 @@ extra_packages=(wpasupplicant ntpdate) # Ones below should not need changing workdir="$R/arm/${armdev}-build" strapdir="${workdir}/${os}-${arch}" -qemu_bin="/usr/bin/qemu-arm-static" # Devuan, install qemu-user-static -#qemu_bin="/usr/bin/qemu-arm" # Gentoo, compile with USE=static-user #enable_qemu_wrapper=1 # Uncomment this to enable qemu-wrapper (consult the readme) parted_boot=(fat32 0 64) parted_root=(ext4 64 -1) diff --git a/config b/config @@ -2,16 +2,7 @@ # ARM SDK configuration # safe to leave untouched - -# syntax: variable=value -# (no spaces before and after the equal sign) - -os=devuan -release=jessie -section=main -version=alpha4 -mirror=http://packages.devuan.org/merged - +# # add here the info of the toolchain you are using # custom toolchain compiler="arm-linux-gnueabihf-" @@ -20,10 +11,5 @@ export PATH="$PATH:/sbin:$R/toolchains/gcc-arm-linux-gnueabihf-4.7/bin" #compiler="arm-none-eabi-" #export PATH="$PATH:/sbin" -core_packages=(debian-keyring devuan-keyring) -core_packages+=(git-core binutils ca-certificates initramfs-tools u-boot-tools) -core_packages+=(locales console-common less nano git curl) - -base_packages=(bzip2 dialog apt-utils fakeroot e2fsprogs parted) - -system_packages=(sysvinit ssh) +qemu_bin="/usr/bin/qemu-arm-static" # Devuan +#qemu_bin="/usr/bin/qemu-arm" # Gentoo