parent
04ae0e02a7
commit
82c90dad16
|
|
@ -0,0 +1,20 @@
|
||||||
|
FROM debian:latest
|
||||||
|
RUN apt-get update
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
RUN apt-get -y install debootstrap \
|
||||||
|
debian-archive-keyring \
|
||||||
|
git \
|
||||||
|
crossbuild-essential-arm64 \
|
||||||
|
crossbuild-essential-armhf \
|
||||||
|
qemu-user-static \
|
||||||
|
device-tree-compiler \
|
||||||
|
bison \
|
||||||
|
flex \
|
||||||
|
python-dev \
|
||||||
|
swig \
|
||||||
|
parted \
|
||||||
|
e2fsprogs \
|
||||||
|
pwgen
|
||||||
|
ENV PATH="/debimg:${PATH}"
|
||||||
|
COPY . /debimg
|
||||||
|
WORKDIR /debimg
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Build SD card image
|
||||||
|
|
||||||
|
IMAGE="${1}" # For example "boot-bananapi.bin"
|
||||||
|
DEFCONFIG="${2}" # For example "Bananapi_defconfig"
|
||||||
|
TUPLE="${3}" # For example "arm-linux-gnueabihf"
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Create fresh empty directory
|
||||||
|
TMP=$(mktemp -d tmp.XXXXXX)
|
||||||
|
cd "${TMP}"
|
||||||
|
|
||||||
|
build-image tmp.img
|
||||||
|
build-u_boot u-boot "${DEFCONFIG}" "${TUPLE}"
|
||||||
|
|
||||||
|
# Copy U-Boot to 8192 bytes from start
|
||||||
|
dd if=u-boot/u-boot-sunxi-with-spl.bin of=tmp.img bs=1K seek=8
|
||||||
|
|
||||||
|
truncate -s 32M tmp.img
|
||||||
|
gzip tmp.img
|
||||||
|
cp tmp.img.gz "${IMAGE}.bin.gz"
|
||||||
|
|
@ -0,0 +1,83 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Build Debian root filesystem
|
||||||
|
|
||||||
|
IMAGE2="$1"
|
||||||
|
ARCH="$2"
|
||||||
|
DIST="$3"
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
case "${ARCH}" in
|
||||||
|
armhf)
|
||||||
|
KERNEL=linux-image-armmp
|
||||||
|
;;
|
||||||
|
arm64)
|
||||||
|
KERNEL=linux-image-arm64
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Can't decide kernel package for \"${ARCH}\""
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Create fresh empty directory
|
||||||
|
TMP=$(mktemp -d tmp.XXXXXX)
|
||||||
|
cd "${TMP}"
|
||||||
|
|
||||||
|
# Build a Debian root filesystem (first stage)
|
||||||
|
debootstrap \
|
||||||
|
--arch="${ARCH}" \
|
||||||
|
--verbose \
|
||||||
|
--variant=minbase \
|
||||||
|
--foreign \
|
||||||
|
--include=\
|
||||||
|
netbase,\
|
||||||
|
ifupdown,\
|
||||||
|
net-tools,\
|
||||||
|
isc-dhcp-client,\
|
||||||
|
${KERNEL},\
|
||||||
|
systemd-sysv,\
|
||||||
|
u-boot-tools,\
|
||||||
|
openssh-server \
|
||||||
|
"${DIST}" \
|
||||||
|
debian \
|
||||||
|
"http://ftp.se.debian.org/debian/"
|
||||||
|
|
||||||
|
# Randomly generated root password
|
||||||
|
PASSWORD=$(pwgen -B -A 8 1)
|
||||||
|
|
||||||
|
cp -rv --preserve=mode ../pre-2nd-stage-files/* debian
|
||||||
|
|
||||||
|
# Copy ARM emulation stuff
|
||||||
|
cp /usr/bin/qemu-*-static debian/usr/bin
|
||||||
|
|
||||||
|
# Build a Debian root filesystem (second stage)
|
||||||
|
chroot debian sh -e <<- EOF
|
||||||
|
/debootstrap/debootstrap --second-stage
|
||||||
|
/usr/bin/apt-get clean
|
||||||
|
/bin/rm -rf /var/lib/apt/lists/*
|
||||||
|
/bin/rm -f /var/log/*.log
|
||||||
|
/bin/echo root:${PASSWORD} | /usr/sbin/chpasswd
|
||||||
|
/bin/sed -i "s/#*\s*PermitRootLogin .*/PermitRootLogin yes/" /etc/ssh/sshd_config
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Remove ARM emulation stuff again
|
||||||
|
rm debian/usr/bin/qemu-*-static
|
||||||
|
|
||||||
|
cp -rv --preserve=mode ../post-2nd-stage-files/* debian
|
||||||
|
|
||||||
|
# Write apt sources config
|
||||||
|
cat <<- EOF > debian/etc/apt/sources.list
|
||||||
|
deb http://deb.debian.org/debian ${DIST} main
|
||||||
|
deb-src http://deb.debian.org/debian ${DIST} main
|
||||||
|
deb http://security.debian.org/debian-security ${DIST}/updates main
|
||||||
|
deb-src http://security.debian.org/debian-security ${DIST}/updates main
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Make a ext4 filesystem of this and put it into the image
|
||||||
|
rm -f ext4.img
|
||||||
|
fallocate -l 900MiB ext4.img
|
||||||
|
mkfs.ext4 -d debian ext4.img
|
||||||
|
gzip ext4.img
|
||||||
|
|
||||||
|
cp ext4.img.gz "${IMAGE2}-${PASSWORD}.bin.gz"
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Build empty image
|
||||||
|
|
||||||
|
IMAGE="${1}"
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
rm -f "${IMAGE}"
|
||||||
|
fallocate -l 1GB "${IMAGE}" # 1,000,000,000 bytes
|
||||||
|
|
||||||
|
parted -s "${IMAGE}" mklabel msdos
|
||||||
|
parted -s "${IMAGE}" mkpart primary fat32 -- 1MiB 32MiB # 31 MiB (32,505,856 bytes)
|
||||||
|
parted -s "${IMAGE}" mkpart primary ext2 -- 32MiB -1
|
||||||
|
parted -s "${IMAGE}" set 2 boot on
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Download and build latest version of U-Boot
|
||||||
|
|
||||||
|
UBOOTDIR="${1}"
|
||||||
|
DEFCONFIG="${2}"
|
||||||
|
TUPLE="${3}"
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# U-Boot version to build
|
||||||
|
VERSION=$(git ls-remote --tags --refs "git://git.denx.de/u-boot.git" "v????.??" | \
|
||||||
|
cut -f 2 | \
|
||||||
|
grep -o "v....\..." | \
|
||||||
|
tail -n 1)
|
||||||
|
|
||||||
|
# Download U-Boot
|
||||||
|
git clone -b "$VERSION" --depth 1 "git://git.denx.de/u-boot.git" "${UBOOTDIR}"
|
||||||
|
|
||||||
|
# Step into U-Boot directory
|
||||||
|
cd "${UBOOTDIR}"
|
||||||
|
|
||||||
|
# Setup ARCH
|
||||||
|
case "${TUPLE}" in
|
||||||
|
arm-*)
|
||||||
|
export ARCH="arm"
|
||||||
|
;;
|
||||||
|
aarch64-*)
|
||||||
|
export ARCH="aarch64"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Can't decide \$ARCH for tuple \"${TUPLE}\""
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# CROSS_COMPILE must point to a valid compiler path prefix
|
||||||
|
export CROSS_COMPILE=$(dirname $(which "${TUPLE}-gcc"))/"${TUPLE}-"
|
||||||
|
|
||||||
|
# Build U-Boot
|
||||||
|
make "${DEFCONFIG}" && make
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
# <file system> <mount point> <type> <options> <dump> <pass>
|
||||||
|
tmpfs /tmp tmpfs nodev,nosuid 0 0
|
||||||
|
tmpfs /var/tmp tmpfs nodev,nosuid 0 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
debian
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
auto eth0
|
||||||
|
iface eth0 inet dhcp
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
auto lo
|
||||||
|
iface lo inet loopback
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
HOW TO CHANGE ROOT PASSWORD
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
1. It is strongly recommended that you change the root password:
|
||||||
|
|
||||||
|
# passwd root
|
||||||
|
|
||||||
|
HOW TO RESIZE ROOT FILESYSTEM PARTITION
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
1. Maximize size of rootfs partition in:
|
||||||
|
|
||||||
|
# parted -s /dev/mmcblk0 resizepart -- 2 -1
|
||||||
|
|
||||||
|
2. Reload partition table:
|
||||||
|
|
||||||
|
# partprobe
|
||||||
|
|
||||||
|
3. Expand ext4 filesystem:
|
||||||
|
|
||||||
|
# resize2fs /dev/mmcblk0p2
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Generate initrd.uimg and update U-Boot boot.scr
|
||||||
|
|
||||||
|
# Kernel ABI string
|
||||||
|
ABI="${1}"
|
||||||
|
|
||||||
|
# Create U-Boot ramdisk image
|
||||||
|
mkimage -A arm -T ramdisk -C none -d "/boot/initrd.img-${ABI}" "/boot/initrd.uimg-${ABI}"
|
||||||
|
|
||||||
|
# Create U-Boot boot script
|
||||||
|
cat << EOF > /boot/boot.cmd
|
||||||
|
mmc dev 0
|
||||||
|
ext4load mmc 0:2 \${kernel_addr_r} /boot/vmlinuz-${ABI}
|
||||||
|
ext4load mmc 0:2 \${ramdisk_addr_r} /boot/initrd.uimg-${ABI}
|
||||||
|
ext4load mmc 0:2 \${fdt_addr_r} /usr/lib/linux-image-${ABI}/\${fdtfile}
|
||||||
|
setenv bootargs "root=/dev/mmcblk0p2 rw rootwait earlyprintk"
|
||||||
|
bootz \${kernel_addr_r} \${ramdisk_addr_r} \${fdt_addr_r}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Create U-Boot boot script
|
||||||
|
mkimage -A arm -T script -C none -d /boot/boot.cmd /boot/boot.scr
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Generate initrd.uimg and update U-Boot boot.scr
|
||||||
|
|
||||||
|
# Kernel ABI string
|
||||||
|
ABI="${1}"
|
||||||
|
|
||||||
|
# Delete U-Boot ramdisk image
|
||||||
|
rm -f "/boot/initrd.uimg-${ABI}"
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Rebuild everything
|
||||||
|
|
||||||
|
DOCKEROPTS1="--rm -v /tmp/artifacts:/artifacts"
|
||||||
|
DOCKEROPTS2="--privileged $DOCKEROPTS1"
|
||||||
|
|
||||||
|
mkdir -p /tmp/artifacts || exit
|
||||||
|
|
||||||
|
# Build Docker image
|
||||||
|
docker build -t debimg .
|
||||||
|
|
||||||
|
# Build bootloaders
|
||||||
|
docker run $DOCKEROPTS1 debimg build-boot-allwinner "/artifacts/boot-bananapi" "Bananapi_defconfig" "arm-linux-gnueabihf"
|
||||||
|
|
||||||
|
# Build root filesystems
|
||||||
|
docker run $DOCKEROPTS2 debimg build-debian "/artifacts/debian-buster-armhf" "armhf" "buster"
|
||||||
Loading…
Reference in New Issue