mirror of
https://github.com/vyos/vyos-build.git
synced 2025-10-01 20:28:40 +02:00
159 lines
4.5 KiB
Bash
Executable File
159 lines
4.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (C) 2016 VyOS maintainers and contributors
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 or later as published by the Free Software Foundation.
|
|
#
|
|
# This program 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. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
# File: build-clearfog-image
|
|
# Purpose:
|
|
# Build VyOS image for for Solidrun clearfog.
|
|
|
|
lb bootstrap
|
|
lb chroot
|
|
lb installer
|
|
lb binary_chroot
|
|
lb chroot_devpts install
|
|
lb chroot_proc install
|
|
lb chroot_selinuxfs install
|
|
lb chroot_sysfs install
|
|
lb chroot_hosts install
|
|
lb chroot_resolv install
|
|
lb chroot_hostname install
|
|
lb chroot_sysv-rc install
|
|
lb chroot_upstart install
|
|
lb chroot_apt install-binary
|
|
lb chroot_archives chroot install
|
|
lb binary_rootfs
|
|
lb binary_manifest
|
|
lb binary_package-lists
|
|
lb binary_linux-image
|
|
lb binary_memtest
|
|
lb binary_grub
|
|
lb binary_grub2
|
|
lb binary_syslinux
|
|
lb binary_disk
|
|
lb binary_loadlin
|
|
lb binary_win32-loader
|
|
lb binary_includes
|
|
lb binary_hooks
|
|
lb binary_checksums
|
|
|
|
# get vyos build version
|
|
version=$(cat version)
|
|
dateymd=$(date +%Y%m%d)
|
|
|
|
# create sd-card image and partition it
|
|
qemu-img create -f raw sr-a38x-cf-vyos-"$dateymd"-testing.img 1.8G
|
|
parted --script sr-a38x-cf-vyos-"$dateymd"-testing.img mklabel msdos
|
|
parted --script sr-a38x-cf-vyos-"$dateymd"-testing.img mkpart primary fat16 8192s 60
|
|
parted --script sr-a38x-cf-vyos-"$dateymd"-testing.img mkpart primary ext2 60 1900
|
|
parted --script sr-a38x-cf-vyos-"$dateymd"-testing.img set 1 boot on
|
|
|
|
# mount image and create filesystems
|
|
losetup /dev/loop0 sr-a38x-cf-vyos-"$dateymd"-testing.img
|
|
partprobe /dev/loop0
|
|
mkfs.vfat -n EFI -F 16 -I /dev/loop0p1
|
|
mkfs.ext2 -L persistence /dev/loop0p2
|
|
|
|
# mount image partitions
|
|
mkdir -p /boot/efi
|
|
mount /dev/loop0p1 /boot/efi
|
|
mkdir -p /mnt
|
|
mount /dev/loop0p2 /mnt
|
|
|
|
# setup files on image
|
|
mkdir -p /mnt/boot/grub
|
|
mkdir -p /mnt/boot/"$version"/rw
|
|
echo "/ union" > /mnt/persistence.conf
|
|
cp binary/live/filesystem.squashfs /mnt/boot/"$version"/"$version.squashfs"
|
|
cp binary/live/initrd.img-* /mnt/boot/"$version"/initrd.img
|
|
cp binary/live/vmlinuz-* /mnt/boot/"$version"/vmlinuz
|
|
cp ../tools/armada-388-clearfog.dtb /boot/efi/armada-388-clearfog.dtb
|
|
|
|
# create boot script
|
|
cat > /boot/efi/boot.script << EOF
|
|
# load DTB
|
|
echo "Loading armada-388-clearfog.dtb"
|
|
load mmc 0:1 \$fdt_addr_r armada-388-clearfog.dtb
|
|
fdt addr \$fdt_addr_r 20000
|
|
|
|
# load efi
|
|
echo "Loading EFI image ..."
|
|
load mmc 0:1 \$loadaddr EFI/debian/grubarm.efi
|
|
|
|
# Sleep a while so the MMC driver can settle down
|
|
echo "Sleeping 5 seconds ..."
|
|
sleep 5
|
|
|
|
# boot
|
|
echo "Booting ..."
|
|
bootefi \$loadaddr
|
|
EOF
|
|
|
|
# compile boot script for u-boot
|
|
mkimage -A arm -O linux -T script -C none -a 0 -e 0 -d /boot/efi/boot.script /boot/efi/boot.scr
|
|
|
|
# create grub config file to include
|
|
cat > load.cfg << EOF
|
|
set root=(hd0,msdos2)
|
|
set prefix=(hd0,msdos2)/boot/grub
|
|
devicetree (hd0,msdos1)/armada-388-clearfog.dtb
|
|
insmod normal
|
|
normal
|
|
EOF
|
|
|
|
# create grub menu
|
|
cat > /mnt/boot/grub/grub.cfg << EOF
|
|
set default=0
|
|
set timeout=5
|
|
|
|
echo -n Press ESC to enter the Grub menu...
|
|
if sleep --verbose --interruptible 5 ; then
|
|
terminal_input console serial
|
|
fi
|
|
|
|
|
|
menuentry "VyOS $version (Serial console)" {
|
|
linux /boot/"$version"/vmlinuz boot=live quiet vyatta-union=/boot/"$version" console=ttyS0,115200n8
|
|
initrd /boot/"$version"/initrd.img
|
|
}
|
|
|
|
menuentry "Lost password change $version (Serial console)" {
|
|
linux /boot/"$version"/vmlinuz boot=live quiet vyatta-union=/boot/"$version" console=ttyS0,115200n8 init=/opt/vyatta/sbin/standalone_root_pw_reset
|
|
initrd /boot/"$version"/initrd.img
|
|
}
|
|
EOF
|
|
|
|
# install efi grub to image
|
|
grub-install --efi-directory /boot/efi --boot-directory /mnt/boot -d /usr/lib/grub/arm-efi /dev/loop0
|
|
|
|
# create grub efi executable
|
|
grub-mkimage -O arm-efi -p /boot/grub -d /usr/lib/grub/arm-efi -c load.cfg \
|
|
ext2 iso9660 linux echo configfile \
|
|
search_label search_fs_file search \
|
|
search_fs_uuid ls normal gzio \
|
|
png fat gettext font minicmd \
|
|
gfxterm gfxmenu video video_fb \
|
|
part_msdos part_gpt > /boot/efi/EFI/debian/grubarm.efi
|
|
|
|
# unmount image partitions
|
|
umount /mnt
|
|
umount /boot/efi
|
|
|
|
# write u-boot to image
|
|
dd if=../tools/u-boot-spl.kwb of=/dev/loop0 bs=512 seek=1
|
|
|
|
# unmount image
|
|
sudo losetup -D
|
|
|
|
# compress image
|
|
xz -v sr-a38x-cf-vyos-"$dateymd"-testing.img
|