diff --git a/.drone.yml b/.drone.yml index df4a9de..fdf4b6f 100644 --- a/.drone.yml +++ b/.drone.yml @@ -6,6 +6,9 @@ name: default steps: - name: build image: ubuntu + volumes: + - name: ramdisk + path: /build settings: mtu: 1300 environment: @@ -13,25 +16,54 @@ steps: FORCE_UNSAFE_CONFIGURE: 1 commands: - apt-get update - - apt-get install -yq wget build-essential file cpio rsync bc unzip - - wget https://github.com/buildroot/buildroot/archive/2020.02.10.tar.gz + - apt-get install -yq wget build-essential file cpio rsync bc unzip python3 + - cd /build + - wget https://github.com/buildroot/buildroot/archive/2022.02.tar.gz - tar xf *.gz - rm -fv *.gz - cd buildroot-*/ - - cat board/pc/linux.config /drone/src/linux-defconfig > linux-defconfig - cp /drone/src/config-seed .config - make olddefconfig - - nice ionice make -j `nproc` - - cp output/images/bzImage /drone/src/provisioning-image-amd64 -- name: deliver + - nice ionice make -j `nproc` -s + - ls -lash output/images + - cp output/images/bzImage /drone/src/butterknife-amd64.bin + - cp output/images/rootfs.iso9660 /drone/src/butterknife-amd64.iso +- name: deliver-pxe image: drillster/drone-email settings: from: jenkins@k-space.ee - subject: OpenWrt image - body: OpenWrt image + subject: Butterknife provisioning image (PXE) + body: This is kernel with bundled initramfs suitable for PXE booting host: mail.k-space.ee port: 465 username: jenkins password: from_secret: email_password - attachments: provisioning-image-amd64 + attachments: butterknife-amd64.bin +- name: deliver-iso + image: drillster/drone-email + settings: + from: jenkins@k-space.ee + subject: Butterknife provisioning image (ISO) + body: This is ISO file suitable for writing to USB keys directly with dd + host: mail.k-space.ee + port: 465 + username: jenkins + password: + from_secret: email_password + attachments: butterknife-amd64.iso +volumes: +- name: ramdisk + temp: + medium: memory +- name: test + image: ubuntu + commands: + - apt-get update + - apt-get install -yq qemu-system-x86 + - qemu-system-x86_64 \ + -kernel /drone/src/provisioning-image-amd64 \ + -serial stdio \ + -nographic \ + -monitor none \ + -append "console=ttyS0 bk_action=poweroff" diff --git a/config-seed b/config-seed index 0ed92a9..d691224 100644 --- a/config-seed +++ b/config-seed @@ -1,39 +1,44 @@ # Buildroot configuration seed -BR2_x86_64=y BR2_INIT_NONE=y -BR2_TOOLCHAIN_BUILDROOT_WCHAR=y -BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="/drone/src/linux-defconfig" +BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_XZ=y BR2_LINUX_KERNEL=y -BR2_TARGET_SYSLINUX=y -BR2_TARGET_SYSLINUX_EFI=y -BR2_TARGET_ROOTFS_INITRAMFS=y -BR2_TARGET_ROOTFS_ISO9660=y -BR2_TARGET_ROOTFS_ISO9660_HYBRID=y -BR2_TARGET_GENERIC_ISSUE="Welcome to Butterknife provisioning tool" -BR2_PACKAGE_DIALOG=y -BR2_PACKAGE_JQ=y -BR2_PACKAGE_BIND=y BR2_PACKAGE_BIND_TOOLS=y -BR2_PACKAGE_NTP=y -BR2_PACKAGE_NTP_NTPDATE=y -BR2_PACKAGE_UDPCAST=y -BR2_PACKAGE_UDPCAST_SENDER=y -BR2_PACKAGE_UDPCAST_RECEIVER=y -BR2_PACKAGE_CA_CERTIFICATES=y -BR2_PACKAGE_OPENSSL=y -BR2_PACKAGE_LIBCURL=y -BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_BIND=y BR2_PACKAGE_BTRFS_PROGS=y -BR2_PACKAGE_NTFS_3G=y -BR2_PACKAGE_NTFS_3G_NTFSPROGS=y -BR2_PACKAGE_PCIUTILS=y -BR2_PACKAGE_GPTFDISK=y -BR2_PACKAGE_GPTFDISK_SGDISK=y -BR2_PACKAGE_MS_SYS=y -BR2_PACKAGE_UTIL_LINUX_LIBFDISK=y -BR2_PACKAGE_UTIL_LINUX_BINARIES=y -BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_CA_CERTIFICATES=y +BR2_PACKAGE_DIALOG=y BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y -BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y -BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="linux-defconfig" +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_GPTFDISK_SGDISK=y +BR2_PACKAGE_GPTFDISK=y +BR2_PACKAGE_JQ=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_EXTRA_PROTOCOLS_FEATURES=n +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_NTFS_3G_NTFSPROGS=y +BR2_PACKAGE_NTFS_3G=y +BR2_PACKAGE_NTP_NTPDATE=y +BR2_PACKAGE_NTP_NTPD=n +BR2_PACKAGE_NTP=y +BR2_PACKAGE_OPENSSL=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_UDPCAST_RECEIVER=y +BR2_PACKAGE_UDPCAST_SENDER=y +BR2_PACKAGE_UDPCAST=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_LIBFDISK=y BR2_ROOTFS_OVERLAY="/drone/src/overlay/" +BR2_TARGET_GENERIC_ISSUE="Welcome to Butterknife provisioning tool" +BR2_TARGET_ROOTFS_INITRAMFS=y +BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="/drone/src/isolinux.cfg" +BR2_TARGET_ROOTFS_ISO9660_HYBRID=y +BR2_TARGET_ROOTFS_ISO9660=y +BR2_TARGET_SYSLINUX_EFI=y +BR2_TARGET_SYSLINUX_ISOLINUX=y +BR2_TARGET_SYSLINUX=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +BR2_x86_64=y diff --git a/isolinux.cfg b/isolinux.cfg new file mode 100644 index 0000000..5e2811e --- /dev/null +++ b/isolinux.cfg @@ -0,0 +1,7 @@ +default butterknife +prompt 0 + +label butterknife + menu Butterknife provisioning + kernel __KERNEL_PATH__ + append bk_image=harbor.k-space.ee/k-space/ubuntu-desktop bk_timeserver=ntp.ubuntu.com quiet diff --git a/linux-defconfig b/linux-defconfig index 026a022..9324802 100644 --- a/linux-defconfig +++ b/linux-defconfig @@ -1,45 +1,82 @@ # Linux kernel configuration seed -CONFIG_EFI_STUB=y -CONFIG_VIRT_DRIVERS=y -CONFIG_HYPERV=y -CONFIG_PCI=y -CONFIG_BTRFS_FS=y -CONFIG_VFAT_FS=y -CONFIG_NLS_CODEPAGE_437=y -CONFIG_NLS_ISO8859_1=y -CONFIG_HYPERV_NET=y -CONFIG_VMXNET3=y -CONFIG_VMWARE_PVSCSI=y +CONFIG_ALX=y +CONFIG_ATL1C=y +CONFIG_ATL1E=y +CONFIG_ATL1=y +CONFIG_ATL2=y CONFIG_BLK_DEV_NVME=y -CONFIG_SATA_AHCI=y +CONFIG_BLK_DEV_SD=y +CONFIG_BTRFS_FS_POSIX_ACL=y +CONFIG_BTRFS_FS=y +CONFIG_CHELSIO_T1_1G=y +CONFIG_CHELSIO_T1=y +CONFIG_CHELSIO_T3=y +CONFIG_CHELSIO_T4VF=y +CONFIG_CHELSIO_T4=y +CONFIG_FB=y +CONFIG_FB_EFI=y +CONFIG_FORCEDETH=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FUSE_FS=y +CONFIG_HW_RANDOM_VIRTIO=y +CONFIG_HYPERVISOR_GUEST=y +CONFIG_HYPERV_NET=y +CONFIG_HYPERV=y +CONFIG_IGB=y +CONFIG_IKCONFIG_PROC=y +CONFIG_IKCONFIG=y +CONFIG_INET=y +CONFIG_INPUT_EVDEV=y +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_IPTABLES=y +CONFIG_MLX4_EN=y +CONFIG_MLX5_CORE_EN=y +CONFIG_MLX5_CORE=y +CONFIG_MODULES=n +CONFIG_MVMDIO=y +CONFIG_NE2K_PCI=y +CONFIG_NETDEVICES=y +CONFIG_NETFILTER=n CONFIG_NET_VENDOR_CAVIUM=n CONFIG_NET_VENDOR_XILINX=n -CONFIG_IGB=y -CONFIG_ATL2=y -CONFIG_ATL1=y -CONFIG_ATL1E=y -CONFIG_ATL1C=y -CONFIG_ALX=y -CONFIG_CHELSIO_T1=y -CONFIG_CHELSIO_T1_1G=y -CONFIG_CHELSIO_T3=y -CONFIG_CHELSIO_T4=y -CONFIG_CHELSIO_T4VF=y -CONFIG_CHELSIO_MVMDIO=y -CONFIG_CHELSIO_SKGE=y -CONFIG_CHELSIO_SKY2=y -CONFIG_CHELSIO_MLX4_EN=y -CONFIG_CHELSIO_MLX5_CORE=y -CONFIG_CHELSIO_MLX5_CORE_EN=y -CONFIG_E100=y -CONFIG_E1000=y -CONFIG_E1000E=y -CONFIG_FORCEDETH=y -CONFIG_8139TOO=y -CONFIG_R8169=y +CONFIG_NET=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +CONFIG_PACKET=y +CONFIG_PARAVIRT=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_PCCARD=n +CONFIG_RFKILL=n +CONFIG_SATA_AHCI=y +CONFIG_SCSI_VIRTIO=y +CONFIG_SECURITY_SELINUX=n +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250=y +CONFIG_SIS190=y +CONFIG_SIS900=y +CONFIG_SKGE=y +CONFIG_SOUND=n +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB=y +CONFIG_VFAT_FS=y CONFIG_VIA_RHINE=y CONFIG_VIA_VELOCITY=y -CONFIG_SIS900=y -CONFIG_SIS190=y -CONFIG_PARTITION_ADVANCED=y +CONFIG_VIRT_DRIVERS=y +CONFIG_VIRTIO_BALLOON=y CONFIG_VIRTIO_BLK_SCSI=y +CONFIG_VIRTIO_BLK=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_VIRTIO_INPUT=y +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y +CONFIG_VIRTIO_MMIO=y +CONFIG_VIRTIO_NET=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTUALIZATION=n +CONFIG_VMWARE_PVSCSI=y +CONFIG_VMXNET3=y +CONFIG_WIRELESS=n +CONFIG_WLAN=n +CONFIG_DRM_QXL=y diff --git a/overlay/sbin/butterknife-advanced-options b/overlay/sbin/butterknife-advanced-options index ff0d60d..47a3d4d 100755 --- a/overlay/sbin/butterknife-advanced-options +++ b/overlay/sbin/butterknife-advanced-options @@ -6,7 +6,6 @@ action=$(dialog --menu "Advanced options, consider your warranty VOID!" 0 0 0 \ shell "Drop to shell" \ instance "Instance maintenance and recovery" \ subvol "Delete instances/templates" \ - restore "Restore Windows master boot record" \ 2>&1 >$(tty)) clear @@ -72,19 +71,5 @@ case $action in umount $mountpoint rmdir $mountpoint ;; - restore) - disk=$(butterknife-select-disk 2>&1 >$(tty)) - - # Select MBR type - action=$(dialog --menu "What kind of master boot record would you like to restore? You might have to mark partition bootable using fdisk." 0 0 0 \ - mbr7 "Windows 7/8/10" \ - mbrvista "Windows Vista" \ - mbr "Windows 2000/XP/2003" \ - 2>&1 >$(tty)) - - cmd="ms-sys --$action /dev/$disk" - $cmd | dialog --programbox "$cmd" 10 76 - - ;; esac diff --git a/overlay/sbin/butterknife-provision b/overlay/sbin/butterknife-provision index bd5bab6..496671b 100755 --- a/overlay/sbin/butterknife-provision +++ b/overlay/sbin/butterknife-provision @@ -3,6 +3,19 @@ # TODO: Make sure fdisk from busybox is NOT used, it's counting sectors incorrectly (?!) # TODO: Check connectivity with API server +####################################### +### Check for presence of utilities ### +####################################### +for util in btrfs jq fdisk find ntfsresize udp-sender udp-receiver ntpdate curl mktemp sgdisk test true sort uniq dig; do + if [ -z "$(which $util)" ]; then + echo "Butterknife was unable to locate $util," \ + "are you sure the provisioning image was compiled properly?" + exit 253 + else + echo "Found $util..." + fi +done + BUTTERKNIFE_POOL_MOUNTPOINT=/var/lib/butterknife/pool TARGET_MOUNTPOINT=/mnt/target diff --git a/overlay/sbin/init b/overlay/sbin/init index 8a3bb12..c2e8432 100755 --- a/overlay/sbin/init +++ b/overlay/sbin/init @@ -42,6 +42,11 @@ if [ $bk_action == "provision" ]; then poweroff -f fi +if [ $bk_action == "poweroff" ]; then + poweroff -f +fi + + while [ 1 ]; do action=$(dialog --no-cancel --menu "What do you want to do" 0 0 0 \ provision "Provision this machine" \