Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion os_pkrvars/alpine/alpine-3.21-x86_64.pkrvars.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,16 @@ iso_checksum = "file:https://dl-cdn.alpinelinux.org/alpine/v3.21/rele
parallels_guest_os_type = "otherlinux"
vbox_guest_os_type = "ArchLinux_64"
vmware_guest_os_type = "otherlinux-64"
boot_command = ["<wait><up>e<wait><down><down><end> inst.ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/fedora/ks.cfg inst.repo=https://download.fedoraproject.org/pub/fedora/linux/releases/41/Server/x86_64/os/ <F10><wait>"]
ssh_username = "root"
boot_command = ["<wait20>root<enter>",
"ifconfig eth0 up && udhcpc -i eth0<enter><wait5>",
"wget http://{{ .HTTPIP }}:{{ .HTTPPort }}/alpine/answers<enter><wait>",
"setup-alpine -f answers<enter><wait5>",
"vagrant<enter><wait1>",
"vagrant<enter><wait1>",
"y<enter><wait10>",
"mount /dev/sda3 /mnt<enter>",
"echo 'PermitRootLogin yes' >> /mnt/etc/ssh/sshd_config<enter>",
"umount /mnt<enter>",
"reboot<enter>"
]
57 changes: 57 additions & 0 deletions packer_templates/http/alpine/answers
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Example answer file for setup-alpine script
# If you don't want to use a certain option, then comment it out

# Use US layout with US variant
KEYMAPOPTS="us us"

# Set hostname to 'alpine'
HOSTNAMEOPTS=alpine

# Set device manager to mdev
DEVDOPTS=mdev

# Contents of /etc/network/interfaces
INTERFACESOPTS="auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
hostname alpine
"

# Search domain of example.com, Google public nameserver
DNSOPTS="-d example.com 8.8.8.8"

# Set timezone to UTC
TIMEZONEOPTS=UTC

# set http/ftp proxy
#PROXYOPTS="http://webproxy:8080"
PROXYOPTS=none

# Add first mirror (CDN)
APKREPOSOPTS="-1"

# Create admin user
#USEROPTS=none
USEROPTS="-a -u -g audio,input,video,netdev vagrant"
#USERSSHKEY="ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key"
#USERSSHKEY="https://raw.githubusercontent.com/hashicorp/vagrant/main/keys/vagrant.pub"

# Install Openssh
SSHDOPTS=openssh

# Use openntpd
# NTPOPTS="openntpd"
NTPOPTS=busybox

# Use /dev/sda as a sys disk
DISKOPTS="-m sys /dev/sda"

# Setup storage with label APKOVL for config storage
#LBUOPTS="LABEL=APKOVL"
LBUOPTS=none

#APKCACHEOPTS="/media/LABEL=APKOVL/cache"
#APKCACHEOPTS=none
APKREPOSOPTS=-1
33 changes: 17 additions & 16 deletions packer_templates/pkr-builder.pkr.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -122,19 +122,10 @@ locals {
"${path.root}/scripts/fedora/cleanup_dnf.sh",
"${path.root}/scripts/_common/minimize.sh"
] : var.os_name == "alpine" ? [
"${path.root}/scripts/alpine/networking_alpine.sh",
"${path.root}/scripts/alpine/update_apk.sh",
"${path.root}/scripts/_common/motd.sh",
"${path.root}/scripts/_common/sshd.sh",
"${path.root}/scripts/alpine/install-supporting-packages_alpine.sh",
"${path.root}/scripts/alpine/build-tools_alpine.sh",
"${path.root}/scripts/_common/virtualbox.sh",
"${path.root}/scripts/_common/vmware.sh",
"${path.root}/scripts/_common/parallels.sh",
"${path.root}/scripts/_common/vagrant.sh",
"${path.root}/scripts/alpine/real-tmp_alpine.sh",
"${path.root}/scripts/alpine/cleanup_apk.sh",
"${path.root}/scripts/_common/minimize.sh"
"${path.root}/scripts/alpine/x-apk-update.sh",
"${path.root}/scripts/alpine/x-only-virtualbox.sh",
"${path.root}/scripts/alpine/x-provision.sh",
"${path.root}/scripts/alpine/x-vmdiskclean.sh"
] : [
"${path.root}/scripts/rhel/update_dnf.sh",
"${path.root}/scripts/_common/motd.sh",
Expand Down Expand Up @@ -176,9 +167,19 @@ build {
"no_proxy=${var.no_proxy}"
]
)
execute_command = var.os_name == "freebsd" ? "echo 'vagrant' | {{.Vars}} su -m root -c 'sh -eux {{.Path}}'" : (
var.os_name == "solaris" ? "echo 'vagrant'|sudo -S bash {{.Path}}" : "echo 'vagrant' | {{ .Vars }} sudo -S -E sh -eux '{{ .Path }}'"
)
execute_command = var.ssh_username == "root" ? (
var.os_name == "freebsd" ? "{{.Vars}} sh -eux {{.Path}}" : (
var.os_name == "solaris" ? "bash {{.Path}}" : (
var.os_name == "alpine" ? "{{.Vars}} sh -c {{.Path}}" : "{{ .Vars }} sh -eux '{{ .Path }}'"
)
)
) : (
var.os_name == "freebsd" ? "echo 'vagrant' | {{.Vars}} su -m root -c 'sh -eux {{.Path}}'" : (
var.os_name == "solaris" ? "echo 'vagrant'|sudo -S bash {{.Path}}" : (
var.os_name == "alpine" ? "echo 'vagrant'| {{.Vars}} su -m root -c 'sh -c {{.Path}}'" :"echo 'vagrant' | {{ .Vars }} sudo -S -E sh -eux '{{ .Path }}'"
)
)
)
expect_disconnect = true
scripts = local.scripts
except = var.is_windows ? local.source_names : null
Expand Down
14 changes: 12 additions & 2 deletions packer_templates/pkr-sources.pkr.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,18 @@ locals {
output_directory = var.output_directory == null ? "${path.root}/../builds/build_files/packer-${var.os_name}-${var.os_version}-${var.os_arch}" : var.output_directory
shutdown_command = var.shutdown_command == null ? (
var.is_windows ? "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"" : (
var.os_name == "macos" ? "echo 'vagrant' | sudo -S shutdown -h now" : (
var.os_name == "freebsd" ? "echo 'vagrant' | su -m root -c 'shutdown -p now'" : "echo 'vagrant' | sudo -S /sbin/halt -h -p"
var.ssh_username == "root" ? (
var.os_name == "macos" ? "shutdown -h now" : (
var.os_name == "freebsd" ? "shutdown -p now" : (
var.os_name == "alpine" ? "poweroff" : "/sbin/halt -h -p"
)
)
) : (
var.os_name == "macos" ? "echo 'vagrant' | sudo -S shutdown -h now" : (
var.os_name == "freebsd" ? "echo 'vagrant' | su -m root -c 'shutdown -p now'" : (
var.os_name == "alpine" ? "echo 'vagrant' | su -m root -c 'poweroff'" : "echo 'vagrant' | sudo -S /sbin/halt -h -p"
)
)
)
)
) : var.shutdown_command
Expand Down
4 changes: 4 additions & 0 deletions packer_templates/scripts/alpine/x-apk-update.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/sh -x
sed -r 's;#(.*[0-9]/community);\1;g' -i /etc/apk/repositories
sed -r 's;(.*/edge/main);#\1;g' -i /etc/apk/repositories
apk update
5 changes: 5 additions & 0 deletions packer_templates/scripts/alpine/x-only-virtualbox.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/sh -x
apk add virtualbox-guest-additions
rc-update add virtualbox-guest-additions
rc-update add local
addgroup vagrant vboxsf
19 changes: 19 additions & 0 deletions packer_templates/scripts/alpine/x-only-vmware.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/sh -x
arch=`cat /etc/apk/arch`
if [ "$arch" == "aarch64" ] || [ "$arch" == "x86_64" ]; then
apk add open-vm-tools-hgfs open-vm-tools-vix
rc-update add open-vm-tools
echo fuse > /etc/modules-load.d/open-vm-tools.conf
else
echo "$arch: open-vm-tools is not support 32bit"
fi

if [ "$arch" == "aarch64" ]; then
if grep -q VMware /sys/devices/virtual/dmi/id/sys_vendor 2>/dev/null; then
# remake /boot/initramfs-virt without mptspi (fusion scsi host)
if grep -qx linux-virt /etc/apk/world; then
sed -e 's/ata_piix mptspi sr-mod/ata_piix sr-mod/' -i /usr/share/mkinitfs/initramfs-init
/sbin/mkinitfs
fi
fi
fi
73 changes: 73 additions & 0 deletions packer_templates/scripts/alpine/x-provision.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#!/bin/sh -xe

# keymap
setup-keymap jp jp
setup-keymap us us

# apk login boot
echo "Welcome to Alpine Linux!" > /etc/motd
if test -e /boot/extlinux.conf; then
sed -i -e 's/TIMEOUT [0-9]\+/TIMEOUT 1/' /boot/extlinux.conf
sed -i -e 's/PROMPT 0/PROMPT 1/' /boot/extlinux.conf
fi

# for Arch Linux ssh client
echo 'KbdInteractiveAuthentication no' >> /etc/ssh/sshd_config

# inittab
sed -r "s;^(ttyS0:.*);#\1;g" -i /etc/inittab

# mdev.conf
sed -i "s/ttyUSB/ttyACM[0-9]\troot:dialout 0660 @ln -sf \$MDEV modem\nttyUSB/;" /etc/mdev.conf

# profile
echo "umask 002" > /etc/profile.d/umask
echo -e "#!/bin/sh\nsudo poweroff\n" > /sbin/shutdown
chmod 755 /sbin/shutdown

# ssh
cd /home/vagrant
chmod 2755 .
mkdir -m 700 .ssh
wget https://raw.githubusercontent.com/hashicorp/vagrant/main/keys/vagrant.pub
mv vagrant.pub .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
chown vagrant:vagrant .ssh .ssh/*

# bash
apk add bash

# sudo
apk add sudo
echo "vagrant ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/vagrant
chmod 400 /etc/sudoers.d/vagrant

# doas
apk add doas
echo 'permit nopass :wheel' > /etc/doas.d/wheel.conf
chmod 400 /etc/doas.d/wheel.conf
addgroup vagrant wheel

# random
apk add haveged
rc-update add haveged
##apk add rng-tools
##rc-update add rngd
##cat /proc/sys/kernel/random/entropy_avail

# mount
cd /home/vagrant
mkdir -m 777 /vagrant
chown vagrant:vagrant /vagrant
VUID=`id -u vagrant`
VGID=`id -g vagrant`
cat<<EOF>.profile
#!/bin/sh
if grep -q -E "vboxsf.*uid=0,gid=0" /proc/mounts ; then
sudo umount /vagrant
sudo mount.vboxsf -o uid=$VUID,gid=$VGID,rw vagrant /vagrant
fi
EOF
chmod 755 .profile
chown vagrant:vagrant .profile

11 changes: 11 additions & 0 deletions packer_templates/scripts/alpine/x-vmdiskclean.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/sh -x
# vmdiskclean
rm -f /var/cache/apk/*
rm -f /var/log/* /var/log/*/*
rm -f /home/*/.ash_history
rm -f /root/.ash_history
rm -f /etc/resolv.conf
dd if=/dev/zero of=/boot/zero bs=8M || echo "dd exit code $? is suppressed"
rm -f /boot/zero
dd if=/dev/zero of=/zero bs=8M || echo "dd exit code $? is suppressed"
rm -f /zero