Merge branch 'master' of code.ungleich.ch:ungleich-public/ungleich-tools
This commit is contained in:
commit
e0ac893ae6
9 changed files with 618 additions and 1 deletions
16
ceph-upgrade-server-to-nautilus.sh
Executable file
16
ceph-upgrade-server-to-nautilus.sh
Executable file
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
rm -f /etc/apt/sources.list.d/ceph.list
|
||||||
|
|
||||||
|
cat > /etc/apt/sources.list <<EOF
|
||||||
|
|
||||||
|
deb http://pkgmaster.devuan.org/merged beowulf main contrib non-free
|
||||||
|
deb http://pkgmaster.devuan.org/merged beowulf-updates main contrib non-free
|
||||||
|
deb http://pkgmaster.devuan.org/merged beowulf-security main contrib non-free
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo deb http://ftp.debian.org/debian buster-backports main > /etc/apt/sources.list.d/backports.list
|
||||||
|
apt update
|
||||||
|
apt dist-upgrade -y
|
||||||
|
apt install -t buster-backports -y ceph
|
154
opennebula-images/arch-build-opennebula-image.sh
Executable file
154
opennebula-images/arch-build-opennebula-image.sh
Executable file
|
@ -0,0 +1,154 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# This script generates Debian images for OpenNebula.
|
||||||
|
#
|
||||||
|
# Test image locally (without network) with:
|
||||||
|
# qemu-system-x86_64 -enable-kvm -m 1G -drive file=$IMAGE,format=qcow2
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# XXX: Handle command-line arguments?
|
||||||
|
ARCH=amd64
|
||||||
|
IMAGE_PATH=arch-$(date --iso-8601).img.qcow2
|
||||||
|
IMAGE_SIZE=10G
|
||||||
|
NBD_DEVICE=/dev/nbd0
|
||||||
|
|
||||||
|
# TODO: find the package definition and built ourself, publish in some RPM repository.
|
||||||
|
ONE_CONTEXT_DEB_URL="https://github.com/OpenNebula/addon-context-linux/releases/download/v5.10.0/one-context_5.10.0-1.deb"
|
||||||
|
ONE_CONTEXT_DEB_PATH=/root/one-context.deb
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
# The order here is important.
|
||||||
|
umount /mnt/dev/pts 2>/dev/null || true
|
||||||
|
umount /mnt/dev/shm 2>/dev/null || true
|
||||||
|
umount /mnt/dev 2>/dev/null || true
|
||||||
|
umount /mnt/proc 2>/dev/null || true
|
||||||
|
umount /mnt/run 2>/dev/null || true
|
||||||
|
umount /mnt/sys 2>/dev/null || true
|
||||||
|
umount /mnt/boot 2>/dev/null || true
|
||||||
|
umount /mnt 2>/dev/null || true
|
||||||
|
qemu-nbd --disconnect "$NBD_DEVICE" || true
|
||||||
|
}
|
||||||
|
|
||||||
|
run_root() {
|
||||||
|
chroot /mnt /usr/bin/env \
|
||||||
|
PATH=/sbin:/usr/sbin:/bin:/usr/bin \
|
||||||
|
sh -c "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$(whoami)" != 'root' ]; then
|
||||||
|
echo "This script must be run as root." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $(lsb_release --short --id) != "Arch" ]; then
|
||||||
|
echo "WARNING: this script has been designed to run on an Ubuntu system." >&2
|
||||||
|
echo "WARNING: Not running Ubuntu. Giving you 5 seconds to abort." >&2
|
||||||
|
sleep 5
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create base QCOW2 image.
|
||||||
|
qemu-img create -f qcow2 "$IMAGE_PATH" "$IMAGE_SIZE"
|
||||||
|
modprobe nbd max_part=16
|
||||||
|
qemu-nbd --connect="$NBD_DEVICE" "$IMAGE_PATH"
|
||||||
|
|
||||||
|
# Wait for qemu-nbd to settle.
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
# Don't forget to cleanup, even if the script crash.
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
# Create partition table, format partitions.
|
||||||
|
sfdisk --no-reread "$NBD_DEVICE" <<EOF
|
||||||
|
1M,500M,L,*
|
||||||
|
,,L
|
||||||
|
EOF
|
||||||
|
|
||||||
|
mkfs.ext4 "${NBD_DEVICE}p1"
|
||||||
|
mkfs.ext4 "${NBD_DEVICE}p2"
|
||||||
|
|
||||||
|
# Mount partitions, install base OS.
|
||||||
|
|
||||||
|
mount "${NBD_DEVICE}p2" /mnt
|
||||||
|
mkdir /mnt/boot
|
||||||
|
mount "${NBD_DEVICE}p1" /mnt/boot
|
||||||
|
|
||||||
|
# Install base system.
|
||||||
|
pacstrap /mnt nbase base-devel openssh
|
||||||
|
|
||||||
|
mount --bind /dev /mnt/dev
|
||||||
|
mount --bind /dev/pts /mnt/dev/pts
|
||||||
|
mount --bind /dev/shm /mnt/dev/shm
|
||||||
|
mount --bind /proc /mnt/proc
|
||||||
|
mount --bind /run /mnt/run
|
||||||
|
mount --bind /sys /mnt/sys
|
||||||
|
|
||||||
|
# Guest networking is to be handled by the one-context package.
|
||||||
|
# See https://github.com/OpenNebula/addon-context-linux for details.
|
||||||
|
|
||||||
|
# Required to resolve package mirror in chroot.
|
||||||
|
cp /etc/resolv.conf /mnt/etc/resolv.conf
|
||||||
|
|
||||||
|
# Initialize /etc/hosts.
|
||||||
|
cat > /mnt/etc/hosts << EOF
|
||||||
|
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
|
||||||
|
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Configure package sources and update package index.
|
||||||
|
cat > /mnt/etc/pacman.d/mirrorlist << EOF
|
||||||
|
##
|
||||||
|
## Arch Linux repository mirrorlist
|
||||||
|
## Generated on 2020-05-12
|
||||||
|
##
|
||||||
|
|
||||||
|
## Switzerland
|
||||||
|
Server = http://pkg.adfinis-sygroup.ch/archlinux/$repo/os/$arch
|
||||||
|
Server = https://pkg.adfinis-sygroup.ch/archlinux/$repo/os/$arch
|
||||||
|
Server = http://mirror.init7.net/archlinux/$repo/os/$arch
|
||||||
|
Server = https://mirror.init7.net/archlinux/$repo/os/$arch
|
||||||
|
Server = http://mirror.puzzle.ch/archlinux/$repo/os/$arch
|
||||||
|
Server = https://mirror.puzzle.ch/archlinux/$repo/os/$arch
|
||||||
|
Server = https://mirror.ungleich.ch/mirror/packages/archlinux/$repo/os/$arch
|
||||||
|
EOF
|
||||||
|
run_root pacman --sync --refresh --upgrade
|
||||||
|
|
||||||
|
# Initalize base services.
|
||||||
|
run_root systemd-machine-id-setup
|
||||||
|
|
||||||
|
run_root ln -sf /usr/share/zoneinfo/UTC /etc/localtime
|
||||||
|
run_root systemctl enable systemd-timesyncd.service
|
||||||
|
|
||||||
|
# Install kernel and generate initramfs.
|
||||||
|
run_root pacman --sync linux mkinitcpio
|
||||||
|
run_rot mkinitcpio -P
|
||||||
|
|
||||||
|
# Install and configure bootloader.
|
||||||
|
run_root pacman --sync grub
|
||||||
|
run_root grub-install --target=i386-pc "${NBD_DEVICE}"
|
||||||
|
run_root grub-mkconfig -o /boot/grub/grub.cfg
|
||||||
|
|
||||||
|
# Install en configure SSH daemon.
|
||||||
|
run_root pacman --sync openssh-server
|
||||||
|
|
||||||
|
# Install haveged due to lack of entropy in ONE environment.
|
||||||
|
run_root pacman --sync haveged
|
||||||
|
run_root systemctl enable haveged.service
|
||||||
|
|
||||||
|
# Generate fstab file.
|
||||||
|
boot_uuid=$(blkid --match-tag UUID --output value "${NBD_DEVICE}p1")
|
||||||
|
root_uuid=$(blkid --match-tag UUID --output value "${NBD_DEVICE}p2")
|
||||||
|
cat >>/mnt/etc/fstab <<EOF
|
||||||
|
UUID=$boot_uuid /boot ext4 rw,relatime,data=ordered 0 2
|
||||||
|
UUID=$root_uuid / ext4 rw,relatime,data=ordered 0 1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Reset systemd's environment.
|
||||||
|
run_root rm -f /etc/machine-id
|
||||||
|
run_root touch /etc/machine-id
|
||||||
|
rm -f /var/lib/systemd/random-seed
|
||||||
|
|
||||||
|
# Make sure everything is written to disk before exiting.
|
||||||
|
sync
|
168
opennebula-images/debian-build-opennebula-image.sh
Executable file
168
opennebula-images/debian-build-opennebula-image.sh
Executable file
|
@ -0,0 +1,168 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# This script generates Debian images for OpenNebula.
|
||||||
|
#
|
||||||
|
# Test image locally (without network) with:
|
||||||
|
# qemu-system-x86_64 -enable-kvm -m 1G -drive file=$IMAGE,format=qcow2
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# XXX: Handle command-line arguments?
|
||||||
|
RELEASE=buster # 10.X
|
||||||
|
ARCH=amd64
|
||||||
|
IMAGE_PATH=debian-$RELEASE-$(date --iso-8601).img.qcow2
|
||||||
|
IMAGE_SIZE=10G
|
||||||
|
NBD_DEVICE=/dev/nbd0
|
||||||
|
|
||||||
|
# TODO: find the package definition and built ourself, publish in some RPM repository.
|
||||||
|
ONE_CONTEXT_DEB_URL="https://github.com/OpenNebula/addon-context-linux/releases/download/v5.10.0/one-context_5.10.0-1.deb"
|
||||||
|
ONE_CONTEXT_DEB_PATH=/root/one-context.deb
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
# The order here is important.
|
||||||
|
umount /mnt/dev/pts 2>/dev/null || true
|
||||||
|
umount /mnt/dev/shm 2>/dev/null || true
|
||||||
|
umount /mnt/dev 2>/dev/null || true
|
||||||
|
umount /mnt/proc 2>/dev/null || true
|
||||||
|
umount /mnt/run 2>/dev/null || true
|
||||||
|
umount /mnt/sys 2>/dev/null || true
|
||||||
|
umount /mnt/boot 2>/dev/null || true
|
||||||
|
umount /mnt 2>/dev/null || true
|
||||||
|
qemu-nbd --disconnect "$NBD_DEVICE" || true
|
||||||
|
}
|
||||||
|
|
||||||
|
run_root() {
|
||||||
|
chroot /mnt /usr/bin/env \
|
||||||
|
PATH=/sbin:/usr/sbin:/bin:/usr/bin \
|
||||||
|
sh -c "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$(whoami)" != 'root' ]; then
|
||||||
|
echo "This script must be run as root." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $(lsb_release --short --id) != "Debian" ]; then
|
||||||
|
echo "WARNING: this script has been designed to run on an Debian system." >&2
|
||||||
|
echo "WARNING: Not running Debian. Giving you 5 seconds to abort." >&2
|
||||||
|
sleep 5
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create base QCOW2 image.
|
||||||
|
qemu-img create -f qcow2 "$IMAGE_PATH" "$IMAGE_SIZE"
|
||||||
|
modprobe nbd max_part=16
|
||||||
|
qemu-nbd --connect="$NBD_DEVICE" "$IMAGE_PATH"
|
||||||
|
|
||||||
|
# Wait for qemu-nbd to settle.
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
# Don't forget to cleanup, even if the script crash.
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
# Create partition table, format partitions.
|
||||||
|
sfdisk --no-reread "$NBD_DEVICE" <<EOF
|
||||||
|
1M,500M,L,*
|
||||||
|
,,L
|
||||||
|
EOF
|
||||||
|
|
||||||
|
mkfs.ext4 "${NBD_DEVICE}p1"
|
||||||
|
mkfs.ext4 "${NBD_DEVICE}p2"
|
||||||
|
|
||||||
|
# Mount partitions, install base OS.
|
||||||
|
|
||||||
|
mount "${NBD_DEVICE}p2" /mnt
|
||||||
|
mkdir /mnt/boot
|
||||||
|
mount "${NBD_DEVICE}p1" /mnt/boot
|
||||||
|
|
||||||
|
debootstrap \
|
||||||
|
--arch=$ARCH $RELEASE \
|
||||||
|
/mnt http://ftp.ch.debian.org/debian
|
||||||
|
|
||||||
|
mount --bind /dev /mnt/dev
|
||||||
|
mount --bind /dev/pts /mnt/dev/pts
|
||||||
|
mount --bind /dev/shm /mnt/dev/shm
|
||||||
|
mount --bind /proc /mnt/proc
|
||||||
|
mount --bind /run /mnt/run
|
||||||
|
mount --bind /sys /mnt/sys
|
||||||
|
|
||||||
|
# Guest networking is to be handled by the one-context package.
|
||||||
|
# See https://github.com/OpenNebula/addon-context-linux for details.
|
||||||
|
|
||||||
|
# Required to resolve package mirror in chroot.
|
||||||
|
cp /etc/resolv.conf /mnt/etc/resolv.conf
|
||||||
|
|
||||||
|
# Initialize /etc/hosts.
|
||||||
|
cat > /mnt/etc/hosts << EOF
|
||||||
|
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
|
||||||
|
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Configure package sources and update package index.
|
||||||
|
cat >/mnt/etc/apt/sources.list <<EOF
|
||||||
|
# Stable
|
||||||
|
deb http://ftp.ch.debian.org/debian $RELEASE main contrib non-free
|
||||||
|
deb-src http://ftp.ch.debian.org/debian $RELEASE main contrib non-free
|
||||||
|
|
||||||
|
# Security updates
|
||||||
|
deb http://ftp.ch.debian.org/debian $RELEASE-updates main contrib non-free
|
||||||
|
deb-src http://ftp.ch.debian.org/debian $RELEASE-updates main contrib non-free
|
||||||
|
|
||||||
|
# Backports
|
||||||
|
#deb http://ftp.ch.debian.org/debian $RELEASE-backports main
|
||||||
|
#deb-src http://ftp.ch.debian.org/debian $RELEASE-backports main
|
||||||
|
EOF
|
||||||
|
run_root apt-get update
|
||||||
|
|
||||||
|
# Install (magic?) one-context DEB and hope things works as expected.
|
||||||
|
curl -L "$ONE_CONTEXT_DEB_URL" > "/mnt$ONE_CONTEXT_DEB_PATH"
|
||||||
|
run_root apt-get -y install "$ONE_CONTEXT_DEB_PATH"
|
||||||
|
run_root rm "$ONE_CONTEXT_DEB_PATH"
|
||||||
|
|
||||||
|
# Manually install legacy network scripts used by one-context.
|
||||||
|
run_root apt-get -y install ifupdown
|
||||||
|
|
||||||
|
# Initalize base services.
|
||||||
|
run_root systemd-machine-id-setup
|
||||||
|
|
||||||
|
run_root ln -sf /usr/share/zoneinfo/UTC /etc/localtime
|
||||||
|
run_root systemctl enable systemd-timesyncd.service
|
||||||
|
|
||||||
|
# Install kernel and bootloader. Do not autoconfigure grub.
|
||||||
|
run_root 'echo "grub-pc grub-pc/install_devices_empty boolean true" | debconf-set-selections'
|
||||||
|
run_root DEBIAN_FRONTEND=noninteractive apt-get -y install locales linux-image-amd64 grub-pc
|
||||||
|
|
||||||
|
# Configure grub.
|
||||||
|
run_root grub-install --target=i386-pc "${NBD_DEVICE}"
|
||||||
|
run_root grub-mkconfig -o /boot/grub/grub.cfg
|
||||||
|
|
||||||
|
# Install en configure SSH daemon.
|
||||||
|
run_root apt-get -y install openssh-server
|
||||||
|
|
||||||
|
# Install haveged due to lack of entropy in ONE environment.
|
||||||
|
run_root apt-get -y install haveged
|
||||||
|
run_root systemctl enable haveged.service
|
||||||
|
|
||||||
|
# Generate locales.
|
||||||
|
run_root sed -i 's/^# *\(en_GB.UTF-8\)/\1/' /etc/locale.gen
|
||||||
|
run_root locale-gen
|
||||||
|
|
||||||
|
# Generate fstab file.
|
||||||
|
boot_uuid=$(blkid --match-tag UUID --output value "${NBD_DEVICE}p1")
|
||||||
|
root_uuid=$(blkid --match-tag UUID --output value "${NBD_DEVICE}p2")
|
||||||
|
cat >>/mnt/etc/fstab <<EOF
|
||||||
|
UUID=$boot_uuid /boot ext4 rw,relatime,data=ordered 0 2
|
||||||
|
UUID=$root_uuid / ext4 rw,relatime,data=ordered 0 1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Reset systemd's environment.
|
||||||
|
run_root rm -f /etc/machine-id
|
||||||
|
run_root touch /etc/machine-id
|
||||||
|
rm -f /var/lib/systemd/random-seed
|
||||||
|
|
||||||
|
# Remove temporary files and reclaim freed disk space.
|
||||||
|
run_root apt-get clean
|
||||||
|
|
||||||
|
# Make sure everything is written to disk before exiting.
|
||||||
|
sync
|
|
@ -18,7 +18,7 @@ set -e
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
# XXX: Handle command-line arguments?
|
# XXX: Handle command-line arguments?
|
||||||
RELEASE=31
|
RELEASE=32
|
||||||
ARCH=x86_64
|
ARCH=x86_64
|
||||||
IMAGE_PATH=fedora-$RELEASE-$(date +%+F).img.qcow2
|
IMAGE_PATH=fedora-$RELEASE-$(date +%+F).img.qcow2
|
||||||
IMAGE_SIZE=10G
|
IMAGE_SIZE=10G
|
||||||
|
@ -132,6 +132,10 @@ run_root systemd-machine-id-setup
|
||||||
run_root ln -sf /usr/share/zoneinfo/UTC /etc/localtime
|
run_root ln -sf /usr/share/zoneinfo/UTC /etc/localtime
|
||||||
run_root systemctl enable systemd-timesyncd.service
|
run_root systemctl enable systemd-timesyncd.service
|
||||||
|
|
||||||
|
# Install haveged due to lack of entropy in ONE environment.
|
||||||
|
run_root dnf -y install haveged
|
||||||
|
run_root systemctl enable haveged.service
|
||||||
|
|
||||||
# Install kernel and bootloader.
|
# Install kernel and bootloader.
|
||||||
# Note: linux-firmware is not required our environment and takes almost 200M
|
# Note: linux-firmware is not required our environment and takes almost 200M
|
||||||
# uncompressed but is a direct dependency of kernel-core...
|
# uncompressed but is a direct dependency of kernel-core...
|
243
opennebula-images/freebsd-build-opennebula-image-generic.sh
Executable file
243
opennebula-images/freebsd-build-opennebula-image-generic.sh
Executable file
|
@ -0,0 +1,243 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright 2020 -- Evilham <contact@evilham.com>
|
||||||
|
# This is BSD licensed as it's based on BSD-licensed code
|
||||||
|
#
|
||||||
|
# We could have used e.g. something like:
|
||||||
|
# - https://git.sr.ht/~sircmpwn/builds.sr.ht/tree/master/images/freebsd/genimg
|
||||||
|
#
|
||||||
|
# But we actually do want to compile the kernel, so that the IPv6-only images
|
||||||
|
# are different and don't support INET.
|
||||||
|
|
||||||
|
# Explode if something goes wrong
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# What are we building?
|
||||||
|
# These are the only configuration options.
|
||||||
|
# They default to current environment.
|
||||||
|
# RELEASE: should be 'CURRENT' for current or 'X.Y' Defaults to 'CURRENT'.
|
||||||
|
# ARCH: probably amd64 for DCL
|
||||||
|
# VMFORMATS: defaults to qcow2, can also be raw. See man mkimg.
|
||||||
|
# OPENNEBULA_CONTEXT_VERSION: For DCL's OpenNebula that'd be 5.10.0 (default)
|
||||||
|
# OPENNEBULA_CONTEXT_REVISION: Defaults to 1.
|
||||||
|
RELEASE=${RELEASE:-CURRENT}
|
||||||
|
if [ "${RELEASE}" == "CURRENT" ]; then
|
||||||
|
SRCBRANCH="master"
|
||||||
|
else
|
||||||
|
SRCBRANCH="releng/${RELEASE}"
|
||||||
|
fi
|
||||||
|
ARCH=${ARCH:-amd64}
|
||||||
|
VMFORMATS=${VMFORMATS:-qcow2}
|
||||||
|
OPENNEBULA_CONTEXT_VERSION=${OPENNEBULA_CONTEXT_VERSION:-5.10.0}
|
||||||
|
OPENNEBULA_CONTEXT_REVISION=${OPENNEBULA_CONTEXT_REVISION:-1}
|
||||||
|
|
||||||
|
# Didn't see a need to make these configurable.
|
||||||
|
CHROOTDIR="/scratch"
|
||||||
|
SRCDIR="${CHROOTDIR}/usr/src"
|
||||||
|
OUR_DIR="$(realpath $(dirname "${0}"))"
|
||||||
|
OUR_SRCCONF="${SRCDIR}/release/src.conf"
|
||||||
|
OUR_RELEASE_CONF="${SRCDIR}/release/release.conf"
|
||||||
|
# Shorthand for the package file name.
|
||||||
|
OPENNEBULA_CONTEXT="one-context-${OPENNEBULA_CONTEXT_VERSION}_${OPENNEBULA_CONTEXT_REVISION}.txz"
|
||||||
|
|
||||||
|
setup_sources() {
|
||||||
|
# Let's use git, we might need to install it
|
||||||
|
if ! which git 2>&1 > /dev/null; then
|
||||||
|
pkg install -y git
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "$(dirname ${SRCDIR})" ]; then
|
||||||
|
mkdir -p "$(dirname ${SRCDIR})"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Checkout needed branch
|
||||||
|
if [ ! -d "${SRCDIR}" ]; then
|
||||||
|
git clone "https://github.com/freebsd/freebsd" \
|
||||||
|
--branch "${SRCBRANCH}" "${SRCDIR}"
|
||||||
|
else
|
||||||
|
GIT_CMD="git -C ${SRCDIR}"
|
||||||
|
${GIT_CMD} clean -df
|
||||||
|
${GIT_CMD} reset --hard
|
||||||
|
${GIT_CMD} fetch
|
||||||
|
${GIT_CMD} checkout "${SRCBRANCH}"
|
||||||
|
${GIT_CMD} pull
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add settings for IPv6-only kernel
|
||||||
|
cat > "${SRCDIR}/sys/${ARCH}/conf/GENERIC-IPV6ONLY" << EOF
|
||||||
|
include GENERIC
|
||||||
|
ident GENERIC-IPV6ONLY
|
||||||
|
makeoptions MKMODULESENV+="WITHOUT_INET_SUPPORT="
|
||||||
|
nooptions INET
|
||||||
|
nodevice gre
|
||||||
|
EOF
|
||||||
|
# Fix vmimage.subr to install custom package and fix other things
|
||||||
|
cat >> "${SRCDIR}/release/tools/vmimage.subr" << EOF
|
||||||
|
vm_extra_install_ports() {
|
||||||
|
# Make sure we install the opennbula context package
|
||||||
|
cp "/${OPENNEBULA_CONTEXT}" "\${DESTDIR}/tmp/${OPENNEBULA_CONTEXT}"
|
||||||
|
chroot \${DESTDIR} \${EMULATOR} env ASSUME_ALWAYS_YES=yes \\
|
||||||
|
/usr/sbin/pkg add '/tmp/${OPENNEBULA_CONTEXT}'
|
||||||
|
|
||||||
|
# Now make sure the system has better defaults
|
||||||
|
cat >> "\${DESTDIR}/etc/rc.conf" << eof
|
||||||
|
# Update to latest patch on first boot
|
||||||
|
firstboot_freebsd_update_enable="YES"
|
||||||
|
# Enable OpenNebula's service.
|
||||||
|
one_context_enable="YES"
|
||||||
|
# Enable SSH for customers
|
||||||
|
sshd_enable="YES"
|
||||||
|
# Clear tmp on boot
|
||||||
|
clear_tmp_enable="YES"
|
||||||
|
# Disable sendmail by default
|
||||||
|
sendmail_enable="NONE"
|
||||||
|
# Disable crash dumps
|
||||||
|
dumpdev="NO"
|
||||||
|
eof
|
||||||
|
# Enable root access with SSH key.
|
||||||
|
# It is user's responsibility to further secure their system.
|
||||||
|
sed -i '' -E \
|
||||||
|
's/(^#[ ]*|^)PermitRootLogin .*/PermitRootLogin without-password/' \
|
||||||
|
"\${DESTDIR}/etc/ssh/sshd_config"
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
# Skip building iso images
|
||||||
|
rm "${SRCDIR}/release/${ARCH}/mkisoimages.sh"
|
||||||
|
# This is a hack to not build the memstick
|
||||||
|
cat > "${SRCDIR}/release/${ARCH}/make-memstick.sh" <<EOF
|
||||||
|
# Create an empty file, else checksums fail
|
||||||
|
touch "\${2}" || true
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_our_env() {
|
||||||
|
# Required by META_MODE to build faster next time
|
||||||
|
# This saves a lot of time when e.g. compiling GENERIC and GENERIC-IPV6ONLY
|
||||||
|
if ! kldstat | grep -q filemon; then
|
||||||
|
kldload filemon
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
gen_releaseconf() {
|
||||||
|
cat << EOF
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Based off FreeBSD's release/release.conf.sample
|
||||||
|
#
|
||||||
|
|
||||||
|
# This redefines the prototype defined in release.sh.
|
||||||
|
# At this stage, the build chroot exists.
|
||||||
|
buildenv_setup() {
|
||||||
|
# Ensure META_MODE is on
|
||||||
|
echo "WITH_META_MODE=yes" > \${CHROOTDIR}/etc/src-env.conf
|
||||||
|
}
|
||||||
|
|
||||||
|
## Set the directory within which the release will be built.
|
||||||
|
CHROOTDIR="${CHROOTDIR}"
|
||||||
|
|
||||||
|
## Set to override the default target architecture and kernel
|
||||||
|
TARGET="${ARCH}"
|
||||||
|
TARGET_ARCH="${ARCH}"
|
||||||
|
KERNEL="${KERNEL_CONFIG}"
|
||||||
|
|
||||||
|
## Set to specify a custom make.conf and/or src.conf
|
||||||
|
SRC_CONF="${OUR_SRCCONF}"
|
||||||
|
|
||||||
|
# Since these are VMs, users should add other components if they want to.
|
||||||
|
NODOC=YES
|
||||||
|
NOPORTS=YES
|
||||||
|
NOSRC=YES
|
||||||
|
|
||||||
|
# We manage sources manually
|
||||||
|
SRC_UPDATE_SKIP=YES
|
||||||
|
|
||||||
|
## Set to pass additional flags to make(1) for the build chroot setup, such
|
||||||
|
## as TARGET/TARGET_ARCH.
|
||||||
|
# This was necessary for "cross-compiling"
|
||||||
|
CHROOT_MAKEENV="MK_LLVM_TARGET_X86=yes"
|
||||||
|
|
||||||
|
WITH_VMIMAGES=YES
|
||||||
|
|
||||||
|
# VM image size, see man 1 truncate
|
||||||
|
VMSIZE="10G"
|
||||||
|
|
||||||
|
# List of disk image formats, see man mkgimg.
|
||||||
|
VMFORMATS="${VMFORMATS}"
|
||||||
|
|
||||||
|
# These variables have to be exported because they are needed in subprocesses.
|
||||||
|
export NOSWAP=YES
|
||||||
|
# Custom ports
|
||||||
|
# - firstboot-freebsd-update helps us not have to create an image for each
|
||||||
|
# patch level. We still will have to do it for each minor version update.
|
||||||
|
# - bash is apparently needed for one-context
|
||||||
|
export VM_EXTRA_PACKAGES="firstboot-freebsd-update bash"
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
_do_run_release() {
|
||||||
|
. "${SRCDIR}/release/release.sh"
|
||||||
|
}
|
||||||
|
run_release() {
|
||||||
|
_do_run_release -c "${OUR_RELEASE_CONF}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
build_image() {
|
||||||
|
# Generate configuration
|
||||||
|
echo "${2}" > "${OUR_SRCCONF}"
|
||||||
|
KERNEL_CONFIG="${1}"
|
||||||
|
gen_releaseconf > "${OUR_RELEASE_CONF}"
|
||||||
|
# Be paranoid about files and stuff
|
||||||
|
sync
|
||||||
|
# Continue with the release script
|
||||||
|
run_release
|
||||||
|
# Be paranoid about files and stuff
|
||||||
|
sync
|
||||||
|
|
||||||
|
mv "${CHROOTDIR}/R/vmimages" "${OUR_DIR}/FreeBSD-${RELEASE}-${1}"
|
||||||
|
|
||||||
|
# Be paranoid about files and stuff
|
||||||
|
sync
|
||||||
|
}
|
||||||
|
|
||||||
|
our_main() {
|
||||||
|
case "$1" in
|
||||||
|
--dualstack)
|
||||||
|
BUILD_DUALSTACK=yes
|
||||||
|
;;
|
||||||
|
--ipv6only)
|
||||||
|
BUILD_IPV6ONLY=yes
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
cat << EOF
|
||||||
|
Run with --dualstack or --ipv6only depending on the image you want.
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
setup_sources
|
||||||
|
setup_our_env
|
||||||
|
# Fetch OpenNebula's context package
|
||||||
|
fetch "https://github.com/OpenNebula/addon-context-linux/releases/download/v${OPENNEBULA_CONTEXT_VERSION}/${OPENNEBULA_CONTEXT}" \
|
||||||
|
-o "${CHROOTDIR}/${OPENNEBULA_CONTEXT}"
|
||||||
|
# Do run
|
||||||
|
if [ -n "${BUILD_DUALSTACK}" ]; then
|
||||||
|
build_image "GENERIC"
|
||||||
|
fi
|
||||||
|
if [ -n "${BUILD_IPV6ONLY}" ]; then
|
||||||
|
build_image "GENERIC-IPV6ONLY" "$(cat << EOF
|
||||||
|
WITHOUT_INET=yes
|
||||||
|
WITHOUT_INET_SUPPORT=yes
|
||||||
|
EOF
|
||||||
|
)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
|
||||||
|
*************** DONE ***************
|
||||||
|
You will find the images under "${OUR_DIR}".
|
||||||
|
************************************
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
our_main "${@}"
|
32
opennebula-images/freebsd-build-opennebula-image.sh
Executable file
32
opennebula-images/freebsd-build-opennebula-image.sh
Executable file
|
@ -0,0 +1,32 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright 2020 -- Evilham <contact@evilham.com>
|
||||||
|
# This is BSD licensed as it's based on BSD-licensed code
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# This builds all needed FreeBSD images for ungleich's Data Center Light
|
||||||
|
# When there are new releases, they should be updated here and the script
|
||||||
|
# should run.
|
||||||
|
# 11.4 is scheduled end of June 2020
|
||||||
|
# 12.2 is scheduled end of October 2020
|
||||||
|
#
|
||||||
|
|
||||||
|
SUPPORTED_RELEASES="11.3 12.1"
|
||||||
|
|
||||||
|
# This should run in a DCL VM with an OK amount of cores (4/8 minimum),
|
||||||
|
# 4G RAM, and storage of roughly 20G + 5G * #resulting_images.
|
||||||
|
#
|
||||||
|
# This is because there is the base system, a 'pristine chroot', and during the
|
||||||
|
# build there can be 2 copies of the resulting system written to the system.
|
||||||
|
# Since there are 4 combinations of images:
|
||||||
|
# {STABLE,RELEASE} x {dualstack, IPv6ONLY}
|
||||||
|
#
|
||||||
|
# That means we'll need to assign about 40G storage to be on the safe side.
|
||||||
|
|
||||||
|
date=$(date -I)
|
||||||
|
for release in ${SUPPORTED_RELEASES}; do
|
||||||
|
for build in dualstack ipv6only; do
|
||||||
|
env RELEASE=${release} sh freebsd-build-opennebula-image-generic.sh --${build} \
|
||||||
|
| tee "freebsd-${release}-${build}-${date}.log"
|
||||||
|
done
|
||||||
|
done
|
0
ubuntu-build-opennebula-image.sh → opennebula-images/ubuntu-build-opennebula-image.sh
Normal file → Executable file
0
ubuntu-build-opennebula-image.sh → opennebula-images/ubuntu-build-opennebula-image.sh
Normal file → Executable file
Loading…
Reference in a new issue