builds successfully. however, still working through some bugs with iPXE.

This commit is contained in:
2016-12-13 23:43:53 -05:00
parent 3c46d85683
commit b4a5e40b8f
25 changed files with 228 additions and 388 deletions

View File

@@ -58,8 +58,9 @@ ver =
dev = r00t^2
; Your email address.
; This is only used for the commit message if you enable
; sync:git.
; This is only used for commit messages (sync:git),
; or GPG-signing the releases (see the associated build
; section items).
email = bts@square-r00t.net
; What this distribution/project is used for.
@@ -196,6 +197,13 @@ gpgkey = 7F2D434B9741E8AC
; 1.) The default is probably fine.
gpgkeyserver = pgp.mit.edu
; Should we sign our release files? (See the GPG section)
; 0.) Only accepts (case-insensitive):
; yes|no
; true|false
; 1|0
gpg = yes
; Where should we save the bootstrap tarballs?
; 0.) No whitespace
; 1.) Will be created if it doesn't exist
@@ -263,7 +271,7 @@ multiarch = yes
; true|false
; 1|0
; If it is undefined, it is assumed to be no.
ipxe = yes
ipxe =
; This option should only be enabled if you are on a fairly
; powerful, multicore system with plenty of RAM. It will
@@ -278,6 +286,30 @@ ipxe = yes
i_am_a_racecar = yes
#---------------------------------------------------------#
# This section controls settings for signing our release
# files. This is only used if build:gpg is
# yes/true/etc.
#---------------------------------------------------------#
[gpg]
; What is a valid key ID that we should use to
; *sign* our release files?
; 0.) You will be prompted for a passphrase if your
; key has one/you don't have an open gpg-agent
; session.
; 1.) If you leave this blank we will use the key
; we generate automatically earlier in the build
; process.
; 2.) We will generate one if this is blank and you
; have selected sign as yes.
mygpgkey =
; What directory should we use for the above GPG key?
; Make sure it contains your private key.
mygpghome =
#---------------------------------------------------------#
# This section controls what we should do with the
# resulting build and how to handle uploads, if we
@@ -466,11 +498,11 @@ ssl_key = ${ssldir}/main.key
[rsync]
; This is the rsync destination host.
host = bdisk.square-r00t.net
host =
; This is the remote user we should use when performing the
; rsync push.
user = root
user =
; This is the remote destination path we should use for
; pushing via rsync.
@@ -479,4 +511,12 @@ user = root
; 2.) The path MUST be writable by rsync:user
; RECOMMENDED: you'll probably want to set http:(user|group)
; to what it'll need to be on the destination.
path = /srv/http/${bdisk:uxname}_ipxe
path =
; Should we rsync over the ISO files too, or just the boot
; files?
; 0.) Only accepts (case-insensitive):
; yes|no
; true|false
; 1|0
iso = yes

View File

@@ -1,7 +1,6 @@
# Server list generated by rankmirrors on 2016-07-09
Server = http://mirror.us.leaseweb.net/archlinux/$repo/os/$arch
Server = http://mirrors.advancedhosters.com/archlinux/$repo/os/$arch
Server = http://ftp.osuosl.org/pub/archlinux/$repo/os/$arch
Server = http://mirrors.rutgers.edu/archlinux/$repo/os/$arch
Server = http://mirror.jmu.edu/pub/archlinux/$repo/os/$arch
Server = http://arch.mirrors.ionfish.org/$repo/os/$arch
Server = http://mirror.metrocast.net/archlinux/$repo/os/$arch
Server = http://mirror.vtti.vt.edu/archlinux/$repo/os/$arch
Server = http://arch.mirrors.pair.com/$repo/os/$arch
Server = http://mirrors.advancedhosters.com/archlinux/$repo/os/$arch

View File

@@ -15,7 +15,7 @@ BINARIES="/usr/bin/memdiskfind"
# FILES
# This setting is similar to BINARIES above, however, files are added
# as-is and are not parsed in any way. This is useful for config files.
FILES=""
FILES="/usr/bin/pkill"
# HOOKS
# This is the most important setting in this file. The HOOKS control the
@@ -50,7 +50,9 @@ FILES=""
# usr, fsck and shutdown hooks.
#HOOKS="base udev autodetect modconf block filesystems keyboard fsck"
#HOOKS="base udev memdisk archiso_shutdown archiso modconf net ssh archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_kms block pcmcia filesystems keyboard livecd"
HOOKS="base udev memdisk archiso_shutdown archiso-custom modconf net ssh archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_http_custom archiso_pxe_nfs archiso_kms block pcmcia filesystems keyboard livecd"
#HOOKS="base udev memdisk archiso_shutdown archiso-custom modconf net ssh archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_http_custom archiso_pxe_nfs archiso_kms block pcmcia filesystems keyboard livecd"
HOOKS="base udev memdisk archiso_shutdown archiso modconf net ssh archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_kms block pcmcia filesystems keyboard livecd"
#HOOKS="base memdisk systemd archiso_shutdown archiso modconf ssh archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_kms block pcmcia filesystems keyboard livecd"
# COMPRESSION
# Use this to compress the initramfs image. By default, gzip compression

View File

@@ -1,6 +1,6 @@
Server = http://mirrors.advancedhosters.com/archlinux/$repo/os/$arch
Server = http://ftp.osuosl.org/pub/archlinux/$repo/os/$arch
Server = http://arch.mirrors.ionfish.org/$repo/os/$arch
Server = http://mirror.vtti.vt.edu/archlinux/$repo/os/$arch
Server = http://mirror.metrocast.net/archlinux/$repo/os/$arch
Server = http://mirror.us.leaseweb.net/archlinux/$repo/os/$arch
Server = http://mirror.jmu.edu/pub/archlinux/$repo/os/$arch
Server = http://mirror.metrocast.net/archlinux/$repo/os/$arch
Server = http://mirror.vtti.vt.edu/archlinux/$repo/os/$arch
Server = http://arch.mirrors.pair.com/$repo/os/$arch
Server = http://mirrors.advancedhosters.com/archlinux/$repo/os/$arch

View File

@@ -2,8 +2,8 @@
for i in pacman apacman;
do
if [ -f /usr/local/${i}.db.tar.xz ];
if [ -f /usr/local/${i}/${i}.db.tar.xz ];
then
/usr/bin/tar -Jxf /usr/local/${i}.db.tar.xz -C /var/lib/${i}/
/usr/bin/tar -Jxf /usr/local/${i}/${i}.db.tar.xz -C /var/lib/${i}/
fi
done

View File

@@ -14,6 +14,7 @@
#CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
@@ -34,11 +35,11 @@ Color
TotalDownload
CheckSpace
VerbosePkgLists
#ILoveCandy
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
#SigLevel = Required DatabaseOptional #RE-ENABLE ME WHEN A NEW SNAPSHOT IS RELEASED WITH FIXED GPG
SigLevel = Never
SigLevel = Required DatabaseOptional
LocalFileSigLevel = Optional
#RemoteFileSigLevel = Required
@@ -89,7 +90,3 @@ Include = /etc/pacman.d/mirrorlist
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
#[archlinuxfr]
#SigLevel = Never
#Server = http://repo.archlinux.fr/$arch

View File

@@ -45,6 +45,9 @@ pacman -Syy
cleanPacorigs
# Install some prereqs
pacman -S --noconfirm --needed sed
sed -i.bak -e 's/^CheckSpace/#CheckSpace/g' /etc/pacman.conf
pacman -S --noconfirm --needed filesystem
mv /etc/pacman.conf.bak /etc/pacman.conf
pacman -S --noconfirm --needed base syslinux wget rsync unzip jshon sudo abs xmlto bc docbook-xsl git
locale-gen
# And get rid of files it wants to replace

View File

@@ -1,179 +0,0 @@
# args: source, newroot, mountpoint
_mnt_fs() {
local img="${1}"
local newroot="${2}"
local mnt="${3}"
local img_fullname="${img##*/}";
local img_name="${img_fullname%%.*}"
local dm_snap_name="${dm_snap_prefix}_${img_name}"
local ro_dev ro_dev_size rw_dev
ro_dev=$(losetup --find --show --read-only "${img}")
echo ${ro_dev} >> /run/archiso/used_block_devices
ro_dev_size=$(blockdev --getsz ${ro_dev})
if [[ "${cow_persistent}" == "P" ]]; then
if [[ -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow" ]]; then
msg ":: Found '/run/archiso/cowspace/${cow_directory}/${img_name}.cow', using as persistent."
else
msg ":: Creating '/run/archiso/cowspace/${cow_directory}/${img_name}.cow' as persistent."
truncate -s "${cowfile_size}" "/run/archiso/cowspace/${cow_directory}/${img_name}.cow"
fi
else
if [[ -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow" ]]; then
msg ":: Found '/run/archiso/cowspace/${cow_directory}/${img_name}.cow' but non-persistent requested, removing."
rm -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow"
fi
msg ":: Creating '/run/archiso/cowspace/${cow_directory}/${img_name}.cow' as non-persistent."
truncate -s "${cowfile_size}" "/run/archiso/cowspace/${cow_directory}/${img_name}.cow"
fi
rw_dev=$(losetup --find --show "/run/archiso/cowspace/${cow_directory}/${img_name}.cow")
echo ${rw_dev} >> /run/archiso/used_block_devices
dmsetup create ${dm_snap_name} --table "0 ${ro_dev_size} snapshot ${ro_dev} ${rw_dev} ${cow_persistent} 8"
_mnt_dev "/dev/mapper/${dm_snap_name}" "${newroot}${mnt}" "-w"
echo $(readlink -f /dev/mapper/${dm_snap_name}) >> /run/archiso/used_block_devices
}
# args: /path/to/image_file, mountpoint
_mnt_sfs() {
local img="${1}"
local mnt="${2}"
local img_fullname="${img##*/}"
local sfs_dev
if [[ "${copytoram}" == "y" ]]; then
msg -n ":: Copying squashfs image to RAM..."
#if ! cp "${img}" "/run/archiso/copytoram/${img_fullname}" ; then
if ! pv -pterabT "${img}" > "/run/archiso/copytoram/${img_fullname}" ; then
echo "ERROR: while copy '${img}' to '/run/archiso/copytoram/${img_fullname}'"
launch_interactive_shell
fi
img="/run/archiso/copytoram/${img_fullname}"
msg "done."
fi
sfs_dev=$(losetup --find --show --read-only "${img}")
echo ${sfs_dev} >> /run/archiso/used_block_devices
_mnt_dev "${sfs_dev}" "${mnt}" "-r"
}
# args: device, mountpoint, flags
_mnt_dev() {
local dev="${1}"
local mnt="${2}"
local flg="${3}"
mkdir -p "${mnt}"
msg ":: Mounting '${dev}' to '${mnt}'"
while ! poll_device "${dev}" 30; do
echo "ERROR: '${dev}' device did not show up after 30 seconds..."
echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished"
launch_interactive_shell
done
if mount "${flg}" "${dev}" "${mnt}"; then
msg ":: Device '${dev}' mounted successfully."
else
echo "ERROR; Failed to mount '${dev}'"
echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished"
launch_interactive_shell
fi
}
_verify_checksum() {
local _status
cd "/run/archiso/bootmnt/${archisobasedir}/${arch}"
md5sum -c airootfs.md5 > /tmp/checksum.log 2>&1
_status=$?
cd "${OLDPWD}"
return ${_status}
}
run_hook() {
[[ -z "${arch}" ]] && arch="$(uname -m)"
[[ -z "${cowspace_size}" ]] && cowspace_size="75%"
[[ -z "${copytoram_size}" ]] && copytoram_size="75%"
[[ -z "${archisobasedir}" ]] && archisobasedir="arch"
[[ -z "${dm_snap_prefix}" ]] && dm_snap_prefix="arch"
[[ -z "${archisodevice}" ]] && archisodevice="/dev/disk/by-label/${archisolabel}"
if [[ -z "${cowfile_size}" ]]; then
cowfile_size="256M"
fi
if [[ -n "${cow_label}" ]]; then
cow_device="/dev/disk/by-label/${cow_label}"
[[ -z "${cow_persistent}" ]] && cow_persistent="P"
elif [[ -n "${cow_device}" ]]; then
[[ -z "${cow_persistent}" ]] && cow_persistent="P"
else
cow_persistent="N"
fi
[[ -z "${cow_directory}" ]] && cow_directory="persistent_${archisolabel}/${arch}"
# set mount handler for archiso
mount_handler="archiso_mount_handler"
}
# This function is called normally from init script, but it can be called
# as chain from other mount handlers.
# args: /path/to/newroot
archiso_mount_handler() {
local newroot="${1}"
if ! mountpoint -q "/run/archiso/bootmnt"; then
_mnt_dev "${archisodevice}" "/run/archiso/bootmnt" "-r"
if [[ "${copytoram}" != "y" ]]; then
echo $(readlink -f ${archisodevice}) >> /run/archiso/used_block_devices
fi
fi
if [[ "${checksum}" == "y" ]]; then
if [[ -f "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.md5" ]]; then
msg -n ":: Self-test requested, please wait..."
if _verify_checksum; then
msg "done. Checksum is OK, continue booting."
else
echo "ERROR: one or more files are corrupted"
echo "see /tmp/checksum.log for details"
launch_interactive_shell
fi
else
echo "ERROR: checksum=y option specified but ${archisobasedir}/${arch}/airootfs.md5 not found"
launch_interactive_shell
fi
fi
if [[ "${copytoram}" == "y" ]]; then
msg ":: Mounting /run/archiso/copytoram (tmpfs) filesystem, size=${copytoram_size}"
mkdir -p /run/archiso/copytoram
mount -t tmpfs -o "size=${copytoram_size}",mode=0755 copytoram /run/archiso/copytoram
fi
if [[ -n "${cow_device}" ]]; then
_mnt_dev "${cow_device}" "/run/archiso/cowspace" "-r"
echo $(readlink -f ${cow_device}) >> /run/archiso/used_block_devices
mount -o remount,rw "/run/archiso/cowspace"
else
msg ":: Mounting /run/archiso/cowspace (tmpfs) filesystem, size=${cowspace_size}..."
mkdir -p /run/archiso/cowspace
mount -t tmpfs -o "size=${cowspace_size}",mode=0755 cowspace /run/archiso/cowspace
fi
mkdir -p "/run/archiso/cowspace/${cow_directory}"
_mnt_sfs "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.sfs" "/run/archiso/sfs/airootfs"
#_mnt_fs "/run/archiso/sfs/airootfs/airootfs.img" "${newroot}" "/"
mount --bind "/run/archiso/sfs/airootfs" "/new_root"
if [[ "${copytoram}" == "y" ]]; then
umount /run/archiso/bootmnt
fi
}
# vim:ft=sh:ts=4:sw=4:et:

View File

@@ -1,49 +0,0 @@
# vim: set ft=sh:
run_hook() {
if [[ -n "${ip}" && -n "${archiso_http_srv}" ]]; then
archiso_http_srv=$(eval echo ${archiso_http_srv})
[[ -z "${archiso_http_spc}" ]] && archiso_http_spc="75%"
mount_handler="archiso_pxe_http_mount_handler"
fi
}
# Fetch a file with CURL
#
# $1 URL
# $2 Destination directory inside httpspace/${archisobasedir}
_curl_get() {
local _url="${1}"
local _dst="${2}"
msg ":: Downloading image"
if ! curl -L -f -o "/run/archiso/httpspace/${archisobasedir}${_dst}/${_url##*/}" --create-dirs "${_url}"; then
echo "ERROR: Downloading failed."
#echo " Falling back to interactive prompt"
#echo " You can try to fix the problem manually, log out when you are finished"
#launch_interactive_shell
sleep 4
reboot -f
fi
}
archiso_pxe_http_mount_handler () {
newroot="${1}"
msg ":: Mounting /run/archiso/httpspace (tmpfs) filesystem, size='${archiso_http_spc}'"
mkdir -p "/run/archiso/httpspace"
mount -t tmpfs -o size="${archiso_http_spc}",mode=0755 httpspace "/run/archiso/httpspace"
_curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.sfs" "/${arch}"
if [[ "${checksum}" == "y" ]]; then
_curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.md5" "/${arch}"
fi
mkdir -p "/run/archiso/bootmnt"
mount -o bind /run/archiso/httpspace /run/archiso/bootmnt
archiso_mount_handler ${newroot}
}

View File

@@ -1,18 +1,7 @@
# vim: set ft=sh:
run_cleanuphook () {
msg ":: Mounting OverlayFS on / with tmpfs=rw, ${root}=ro ..."
modprobe overlay
msg ":: Adding SSL and SSH support..."
echo "Now attempting overlay mount..."
#mkdir /new_root.hw
mkdir -p /run/archiso/cowspace/upperdir /run/archiso/cowspace/workdir
#mount --move /new_root /new_root.hw
#mkdir /dev/shm
#mount -t tmpfs none /dev/shm
#mount -t overlay overlay -olowerdir=/new_root.hw,upperdir=/new_root,workdir=/dev/shm -o noatime
umount -l /new_root > /dev/null 2>&1
mount -t overlay -o lowerdir=/run/archiso/sfs/airootfs,upperdir=/run/archiso/cowspace/upperdir,workdir=/run/archiso/cowspace/workdir airootfs /new_root
pkill -9 dropbear #kill SSH (in preparation for the live system starting ssh on port 22
}

View File

@@ -1,24 +0,0 @@
#!/bin/bash
build() {
add_module "cdrom"
add_module "loop"
add_module "dm-snapshot"
add_runscript
add_binary /usr/lib/udev/cdrom_id
add_binary blockdev
add_binary dmsetup
add_binary losetup
add_binary mountpoint
add_binary truncate
add_binary pv
add_file /usr/lib/udev/rules.d/60-cdrom_id.rules
add_file /usr/lib/udev/rules.d/10-dm.rules
add_file /usr/lib/udev/rules.d/95-dm-notify.rules
add_file /usr/lib/initcpio/udev/11-dm-initramfs.rules /usr/lib/udev/rules.d/11-dm-initramfs.rules
}
# vim: set ft=sh ts=4 sw=4 et:

View File

@@ -1,18 +0,0 @@
#!/bin/bash
build() {
add_runscript
add_binary curl
add_full_dir /etc/ssl
add_full_dir /etc/ca-certificates
}
help() {
cat<<HELPEOF
This hook loads the necessary modules for boot via PXE and HTTP.
HELPEOF
}
# vim: set ft=sh ts=4 sw=4 et:

View File

@@ -6,8 +6,11 @@ build()
add_module 'loop'
add_module 'overlay'
add_binary "sed"
add_binary "pkill"
add_binary "/usr/bin/sed"
add_binary "/usr/bin/pkill"
add_binary "/usr/bin/curl"
add_full_dir /etc/ssl
add_full_dir /etc/ca-certificates
add_runscript
@@ -16,6 +19,6 @@ build()
help()
{
cat <<HELPEOF
Mount a squashed flat-file directory with OverlayFS on /
Mount a squashed flat-file directory with OverlayFS on /, add SSL support
HELPEOF
}

View File

@@ -68,9 +68,10 @@ build ()
[ -e "${TMPDIR}/passwd" ] && ( grep -q -e '^root:' "${TMPDIR}/passwd" ) || make_etc_passwd
add_checked_modules "/drivers/net/"
add_binary "rm"
add_binary "dropbear"
add_binary "killall"
add_binary "/usr/bin/rm"
add_binary "/usr/bin/dropbear"
add_binary "/usr/bin/killall"
add_binary "/usr/bin/pkill"
echo '/bin/ash' > "${TMPDIR}"/shells
add_file "${TMPDIR}/shells" "/etc/shells"

View File

@@ -14,6 +14,7 @@
#CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
@@ -34,11 +35,11 @@ Color
TotalDownload
CheckSpace
VerbosePkgLists
ILoveCandy
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
#SigLevel = Required DatabaseOptional #RE-ENABLE ME WHEN A NEW SNAPSHOT IS RELEASED WITH FIXED GPG
SigLevel = Never
SigLevel = Required DatabaseOptional
LocalFileSigLevel = Optional
#RemoteFileSigLevel = Required
@@ -98,7 +99,3 @@ Include = /etc/pacman.d/mirrorlist
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
#[archlinuxfr]
#SigLevel = Never
#Server = http://repo.archlinux.fr/$arch