diff options
Diffstat (limited to 'archiso')
-rw-r--r-- | archiso/initcpio/hooks/archiso | 208 | ||||
-rw-r--r-- | archiso/initcpio/hooks/archiso_loop_mnt | 32 | ||||
-rw-r--r-- | archiso/initcpio/hooks/archiso_pxe_common | 50 | ||||
-rw-r--r-- | archiso/initcpio/hooks/archiso_pxe_http | 61 | ||||
-rw-r--r-- | archiso/initcpio/hooks/archiso_pxe_nbd | 40 | ||||
-rw-r--r-- | archiso/initcpio/hooks/archiso_pxe_nfs | 30 | ||||
-rw-r--r-- | archiso/initcpio/hooks/archiso_shutdown | 6 | ||||
-rw-r--r-- | archiso/initcpio/install/archiso | 22 | ||||
-rw-r--r-- | archiso/initcpio/install/archiso_kms | 26 | ||||
-rw-r--r-- | archiso/initcpio/install/archiso_loop_mnt | 13 | ||||
-rw-r--r-- | archiso/initcpio/install/archiso_pxe_common | 26 | ||||
-rw-r--r-- | archiso/initcpio/install/archiso_pxe_http | 15 | ||||
-rw-r--r-- | archiso/initcpio/install/archiso_pxe_nbd | 17 | ||||
-rw-r--r-- | archiso/initcpio/install/archiso_pxe_nfs | 17 | ||||
-rw-r--r-- | archiso/initcpio/install/archiso_shutdown | 20 | ||||
-rw-r--r-- | archiso/initcpio/script/archiso_shutdown | 37 | ||||
-rwxr-xr-x | archiso/mkarchiso | 584 |
17 files changed, 0 insertions, 1204 deletions
diff --git a/archiso/initcpio/hooks/archiso b/archiso/initcpio/hooks/archiso deleted file mode 100644 index 66a6273..0000000 --- a/archiso/initcpio/hooks/archiso +++ /dev/null @@ -1,208 +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 [[ "${cowfile_size}" == "100" ]]; then - rw_dev_size=${ro_dev_size} - else - # size calculation done in this way to avoid integer overflow when ro_dev_size is > 10.2G - rw_dev_size=$((ro_dev_size/100*cowfile_size)) - fi - - 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." - dd of="/run/archiso/cowspace/${cow_directory}/${img_name}.cow" count=0 seek=${rw_dev_size} &> /dev/null - 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." - dd of="/run/archiso/cowspace/${cow_directory}/${img_name}.cow" count=0 seek=${rw_dev_size} &> /dev/null - fi - - rw_dev=$(losetup --find --show "/run/archiso/cowspace/${cow_directory}/${img_name}.cow") - echo ${rw_dev} >> /run/archiso/used_block_devices - - echo "0 ${ro_dev_size} snapshot ${ro_dev} ${rw_dev} ${cow_persistent} 8" | dmsetup create ${dm_snap_name} - - _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 - 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}" - md5sum -c checksum.${arch}.md5 > /tmp/checksum.${arch}.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="100" - else - cowfile_size=${cowfile_size/%} - fi - - if [[ -z "${aitab}" ]]; then - aitab="/run/archiso/bootmnt/${archisobasedir}/aitab" - else - aitab="/run/archiso/bootmnt/${archisobasedir}/${aitab}" - 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 [[ ! -f "${aitab}" ]]; then - echo "ERROR: '${aitab}' file does not exist." - 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 - - if [[ "${checksum}" == "y" ]]; then - if [[ -f "/run/archiso/bootmnt/${archisobasedir}/checksum.${arch}.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.${arch}.log for details" - launch_interactive_shell - fi - else - echo "ERROR: checksum=y option specified but checksum.${arch}.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}" - - local aitab_img aitab_mnt aitab_arch aitab_sfs_comp aitab_fs_type aitab_fs_size - while read aitab_img aitab_mnt aitab_arch aitab_sfs_comp aitab_fs_type aitab_fs_size; do - [[ "${aitab_img#\#}" != "${aitab_img}" ]] && continue - [[ "${aitab_arch}" != "any" && "${aitab_arch}" != "${arch}" ]] && continue - if [[ "${aitab_fs_type}" != "none" ]]; then - _mnt_sfs "/run/archiso/bootmnt/${archisobasedir}/${aitab_arch}/${aitab_img}.fs.sfs" "/run/archiso/sfs/${aitab_img}" - _mnt_fs "/run/archiso/sfs/${aitab_img}/${aitab_img}.fs" "${newroot}" "${aitab_mnt}" - else - _mnt_sfs "/run/archiso/bootmnt/${archisobasedir}/${aitab_arch}/${aitab_img}.sfs" "${newroot}${aitab_mnt}" - fi - done < "${aitab}" - - if [[ "${copytoram}" == "y" ]]; then - umount /run/archiso/bootmnt - fi -} - -# vim:ft=sh:ts=4:sw=4:et: diff --git a/archiso/initcpio/hooks/archiso_loop_mnt b/archiso/initcpio/hooks/archiso_loop_mnt deleted file mode 100644 index a02cfac..0000000 --- a/archiso/initcpio/hooks/archiso_loop_mnt +++ /dev/null @@ -1,32 +0,0 @@ -# vim: set ft=sh: - -run_hook () { - [[ -n "${img_label}" ]] && img_dev="/dev/disk/by-label/${img_label}" - if [[ -n "${img_dev}" && -n "${img_loop}" ]]; then - mount_handler="archiso_loop_mount_handler" - fi -} - -archiso_loop_mount_handler () { - newroot="${1}" - - local _dev_loop - - msg ":: Setup a loop device from ${img_loop} located at device ${img_dev}" - _mnt_dev "${img_dev}" "/run/archiso/img_dev" "-r" - if [[ "${copytoram}" != "y" ]]; then - echo $(readlink -f ${img_dev}) >> /run/archiso/used_block_devices - fi - - if ! _dev_loop=$(losetup --find --show --read-only "/run/archiso/img_dev/${img_loop}"); then - echo "ERROR: Setting loopback device for file '/run/archiso/img_dev/${img_loop}'" - launch_interactive_shell - fi - - archiso_mount_handler ${newroot} - - if [[ "${copytoram}" == "y" ]]; then - losetup -d ${_dev_loop} - umount /run/archiso/img_dev - fi -} diff --git a/archiso/initcpio/hooks/archiso_pxe_common b/archiso/initcpio/hooks/archiso_pxe_common deleted file mode 100644 index d8ac709..0000000 --- a/archiso/initcpio/hooks/archiso_pxe_common +++ /dev/null @@ -1,50 +0,0 @@ -# vim: set ft=sh: - -run_hook () { - local i net_mac bootif_mac bootif_dev - # These variables will be parsed from /tmp/net-*.conf generated by ipconfig - local DEVICE - local IPV4ADDR IPV4BROADCAST IPV4NETMASK IPV4GATEWAY IPV4DNS0 IPV4DNS1 - local HOSTNAME DNSDOMAIN NISDOMAIN ROOTSERVER ROOTPATH - local filename - # /tmp/net-*.conf - - if [[ -n "${ip}" ]]; then - if [[ -n "${BOOTIF}" ]]; then - bootif_mac=${BOOTIF#01-} - bootif_mac=${bootif_mac//-/:} - for i in /sys/class/net/*/address; do - read net_mac < ${i} - if [[ "${bootif_mac}" == "${net_mac}" ]]; then - bootif_dev=${i#/sys/class/net/} - bootif_dev=${bootif_dev%/address} - break - fi - done - ip="${ip}::${bootif_dev}" - fi - - # setup network and save some values - ipconfig "ip=${ip}" - - . /tmp/net-*.conf - - pxeserver=${ROOTSERVER} - - # setup DNS resolver - if [[ "${IPV4DNS0}" != "0.0.0.0" ]]; then - echo "nameserver ${IPV4DNS0}" > /etc/resolv.conf - fi - if [[ "${IPV4DNS1}" != "0.0.0.0" ]]; then - echo "nameserver ${IPV4DNS1}" >> /etc/resolv.conf - fi - fi -} - -run_latehook () { - [[ -z "${copy_resolvconf}" ]] && copy_resolvconf="y" - - if [[ "${copy_resolvconf}" != "n" && -f /etc/resolv.conf ]]; then - cp /etc/resolv.conf /new_root/etc/resolv.conf - fi -} diff --git a/archiso/initcpio/hooks/archiso_pxe_http b/archiso/initcpio/hooks/archiso_pxe_http deleted file mode 100644 index 32e8ab0..0000000 --- a/archiso/initcpio/hooks/archiso_pxe_http +++ /dev/null @@ -1,61 +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 '${_url}'" - if ! curl -L -f -o "/run/archiso/httpspace/${archisobasedir}${_dst}/${_url##*/}" --create-dirs "${_url}"; then - echo "ERROR: Downloading '${_url}'" - 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 -} - -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" - - local _aitab_url="${archiso_http_srv}${aitab#/run/archiso/bootmnt/}" - local _aitab_file="/run/archiso/httpspace/${aitab#/run/archiso/bootmnt/}" - - _curl_get "${_aitab_url}" "/" - - local aitab_img aitab_mnt aitab_arch aitab_sfs_comp aitab_fs_type aitab_fs_size - while read aitab_img aitab_mnt aitab_arch aitab_sfs_comp aitab_fs_type aitab_fs_size; do - [[ "${aitab_img#\#}" != "${aitab_img}" ]] && continue - [[ "${aitab_arch}" != "any" && "${aitab_arch}" != "${arch}" ]] && continue - if [[ "${aitab_fs_type}" != "none" ]]; then - _curl_get "${archiso_http_srv}${archisobasedir}/${aitab_arch}/${aitab_img}.fs.sfs" "/${aitab_arch}" - else - _curl_get "${archiso_http_srv}${archisobasedir}/${aitab_arch}/${aitab_img}.sfs" "/${aitab_arch}" - fi - done < "${_aitab_file}" - - if [[ "${checksum}" == "y" ]]; then - _curl_get "${archiso_http_srv}${archisobasedir}/checksum.${arch}.md5" "/" - fi - - mkdir -p "/run/archiso/bootmnt" - mount -o bind /run/archiso/httpspace /run/archiso/bootmnt - - archiso_mount_handler ${newroot} -} diff --git a/archiso/initcpio/hooks/archiso_pxe_nbd b/archiso/initcpio/hooks/archiso_pxe_nbd deleted file mode 100644 index d9bc6d8..0000000 --- a/archiso/initcpio/hooks/archiso_pxe_nbd +++ /dev/null @@ -1,40 +0,0 @@ -# vim: set ft=sh: - -run_hook() { - if [[ -n "${ip}" && -n "${archiso_nbd_srv}" ]]; then - - archiso_nbd_srv=$(eval echo ${archiso_nbd_srv}) - [[ -z "${archiso_nbd_name}" ]] && archiso_nbd_name="archiso" - - mount_handler="archiso_pxe_nbd_mount_handler" - fi -} - -archiso_pxe_nbd_mount_handler () { - newroot="${1}" - - # Module autoloading like with loop devices does not work, doing manually... - modprobe nbd 2> /dev/null - - msg ":: Waiting for boot device..." - while ! poll_device /dev/nbd0 30; do - echo "ERROR: boot device didn't 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 - - msg ":: Setup NBD from ${archiso_nbd_srv} at /dev/nbd0" - nbd-client ${archiso_nbd_srv} -N ${archiso_nbd_name} /dev/nbd0 - - if [[ "${copytoram}" != "n" ]]; then - copytoram="y" - fi - - archisodevice=/dev/nbd0 - - archiso_mount_handler ${newroot} - - msg ":: Disconnect NBD from ${archiso_nbd_srv} at /dev/nbd0" - nbd-client -d /dev/nbd0 -} diff --git a/archiso/initcpio/hooks/archiso_pxe_nfs b/archiso/initcpio/hooks/archiso_pxe_nfs deleted file mode 100644 index 67874ec..0000000 --- a/archiso/initcpio/hooks/archiso_pxe_nfs +++ /dev/null @@ -1,30 +0,0 @@ -# vim: set ft=sh: - -run_hook() { - if [[ -n "${ip}" && -n "${archiso_nfs_srv}" ]]; then - - archiso_nfs_srv=$(eval echo ${archiso_nfs_srv}) - [[ -n "${archiso_nfs_opt}" ]] && archiso_nfs_opt="-o ${archiso_nfs_opt}" - - mount_handler="archiso_nfs_mount_handler" - fi -} - -archiso_nfs_mount_handler() { - newroot="${1}" - mkdir -p "/run/archiso/bootmnt" - msg ":: Mounting '${archiso_nfs_srv}'" - # Do not put "${archiso_nfs_opt}" nfsmount fails! - if ! nfsmount ${archiso_nfs_opt} "${archiso_nfs_srv}" "/run/archiso/bootmnt"; then - echo "ERROR: Mounting '${archiso_nfs_srv}'" - 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 - - if [[ "${copytoram}" != "n" ]]; then - copytoram="y" - fi - - archiso_mount_handler ${newroot} -} diff --git a/archiso/initcpio/hooks/archiso_shutdown b/archiso/initcpio/hooks/archiso_shutdown deleted file mode 100644 index e50dedb..0000000 --- a/archiso/initcpio/hooks/archiso_shutdown +++ /dev/null @@ -1,6 +0,0 @@ -run_cleanuphook() { - rm -rf /usr/lib/modules - cp -ax / /run/initramfs -} - -# vim: set ft=sh ts=4 sw=4 et: diff --git a/archiso/initcpio/install/archiso b/archiso/initcpio/install/archiso deleted file mode 100644 index 8893667..0000000 --- a/archiso/initcpio/install/archiso +++ /dev/null @@ -1,22 +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_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: diff --git a/archiso/initcpio/install/archiso_kms b/archiso/initcpio/install/archiso_kms deleted file mode 100644 index 3ff31f3..0000000 --- a/archiso/initcpio/install/archiso_kms +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -build() { - add_module "radeon" - add_module "nouveau" - add_module "i915" - add_module "via-agp" - add_module "sis-agp" - add_module "intel-agp" - - if [[ $(uname -m) == i686 ]]; then - add_module "amd64-agp" - add_module "ati-agp" - add_module "sworks-agp" - add_module "ali-agp" - add_module "amd-k7-agp" - add_module "nvidia-agp" - add_module "efficeon-agp" - fi -} - -help() { - cat << HELPEOF -Adds all common KMS drivers to the initramfs image. -HELPEOF -} diff --git a/archiso/initcpio/install/archiso_loop_mnt b/archiso/initcpio/install/archiso_loop_mnt deleted file mode 100644 index 59f1d94..0000000 --- a/archiso/initcpio/install/archiso_loop_mnt +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -build() { - add_runscript -} - -help() { -cat<<HELPEOF - This hook loads the necessary modules for boot via loop device. -HELPEOF -} - -# vim: set ft=sh ts=4 sw=4 et: diff --git a/archiso/initcpio/install/archiso_pxe_common b/archiso/initcpio/install/archiso_pxe_common deleted file mode 100644 index eec9a7e..0000000 --- a/archiso/initcpio/install/archiso_pxe_common +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -build() { - add_checked_modules -f "(irda|phy|wimax|wireless|ppp_|plip|pppoe)" "/drivers/net/" - - add_runscript - - add_binary /usr/lib/initcpio/ipconfig /bin/ipconfig - - # Add hosts support files+dns - add_symlink /usr/lib/libnss_files.so.2 $(readlink /usr/lib/libnss_files.so.2) - add_binary $(readlink -f /usr/lib/libnss_files.so.2) - add_symlink /usr/lib/libnss_dns.so.2 $(readlink /usr/lib/libnss_dns.so.2) - add_binary $(readlink -f /usr/lib/libnss_dns.so.2) - - add_dir /etc - echo "hosts: files dns" > $BUILDROOT/etc/nsswitch.conf -} - -help() { -cat<<HELPEOF - This hook loads the necessary modules for boot via PXE. -HELPEOF -} - -# vim: set ft=sh ts=4 sw=4 et: diff --git a/archiso/initcpio/install/archiso_pxe_http b/archiso/initcpio/install/archiso_pxe_http deleted file mode 100644 index 4e02f98..0000000 --- a/archiso/initcpio/install/archiso_pxe_http +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -build() { - add_runscript - - add_binary curl -} - -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: diff --git a/archiso/initcpio/install/archiso_pxe_nbd b/archiso/initcpio/install/archiso_pxe_nbd deleted file mode 100644 index 47d98ce..0000000 --- a/archiso/initcpio/install/archiso_pxe_nbd +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -build() { - add_module "nbd" - - add_runscript - - add_binary nbd-client -} - -help() { -cat<<HELPEOF - This hook loads the necessary modules for boot via PXE and NBD. -HELPEOF -} - -# vim: set ft=sh ts=4 sw=4 et: diff --git a/archiso/initcpio/install/archiso_pxe_nfs b/archiso/initcpio/install/archiso_pxe_nfs deleted file mode 100644 index f8226e5..0000000 --- a/archiso/initcpio/install/archiso_pxe_nfs +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -build() { - add_module "nfs" - - add_runscript - - add_binary /usr/lib/initcpio/nfsmount /bin/nfsmount -} - -help() { - cat <<HELPEOF - This hook loads the necessary modules for boot via PXE and NFS. -HELPEOF -} - -# vim: set ft=sh ts=4 sw=4 et: diff --git a/archiso/initcpio/install/archiso_shutdown b/archiso/initcpio/install/archiso_shutdown deleted file mode 100644 index 5ae976a..0000000 --- a/archiso/initcpio/install/archiso_shutdown +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -build() { - add_binary cp - - add_runscript - - add_file /usr/lib/initcpio/archiso_shutdown /shutdown -} - -help() { - cat <<HELPEOF -This hook will create a shutdown initramfs in /run/initramfs -that we can pivot to on shutdown in order to unmount / and -and others mount points, dm-snapshot devices and loopback devices. -Mostly usefull for dm-snapshot persistent. -HELPEOF -} - -# vim: set ft=sh ts=4 sw=4 et: diff --git a/archiso/initcpio/script/archiso_shutdown b/archiso/initcpio/script/archiso_shutdown deleted file mode 100644 index 41b3945..0000000 --- a/archiso/initcpio/script/archiso_shutdown +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/ash - -# /oldroot depends on things inside /oldroot/run/archiso... -mkdir /oldrun -mount -n --move /oldroot/run /oldrun - -# Unmount all mounts now. -umount $(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r) - -# Remove all dm-snapshot devices. -dmsetup remove_all - -# Remove all loopback devices. -for _lup in $(grep ^/dev/loop /oldrun/archiso/used_block_devices | tac); do - if ! losetup -d ${_lup} 2> /dev/null; then - umount -d ${_lup} - fi -done - -# Unmount the space used to store *.cow. -umount /oldrun/archiso/cowspace - -# Unmount boot device if needed (no copytoram=y used) -if [[ ! -d /oldrun/archiso/copytoram ]]; then - if [[ -d /oldrun/archiso/img_dev ]]; then - umount /oldrun/archiso/img_dev - else - umount /oldrun/archiso/bootmnt - fi -fi - -# reboot / poweroff / halt, depending on the argument passed by init -# if something invalid is passed, we halt -case "$1" in - reboot|poweroff|halt) "$1" -f ;; - *) halt -f;; -esac diff --git a/archiso/mkarchiso b/archiso/mkarchiso deleted file mode 100755 index fa32b62..0000000 --- a/archiso/mkarchiso +++ /dev/null @@ -1,584 +0,0 @@ -#!/bin/bash - -set -e -u - -export LANG=C - -app_name=${0##*/} -arch=$(uname -m) -pkg_list="" -run_cmd="" -quiet="y" -pacman_conf="/etc/pacman.conf" -export iso_label="ARCH_$(date +%Y%m)" -iso_publisher="Arch Linux <http://www.archlinux.org>" -iso_application="Arch Linux Live/Rescue CD" -install_dir="arch" -work_dir="work" -out_dir="out" - -# Show an INFO message -# $1: message string -_msg_info() { - local _msg="${1}" - echo "[mkarchiso] INFO: ${_msg}" -} - -# Show an ERROR message then exit with status -# $1: message string -# $2: exit code number (with 0 does not exit) -_msg_error() { - local _msg="${1}" - local _error=${2} - echo - echo "[mkarchiso] ERROR: ${_msg}" - echo - if [[ ${_error} -gt 0 ]]; then - exit ${_error} - fi -} - -# Show space usage similar to df, but better formatted. -# $1: mount-point or mounted device. -_show_space_usage () { - local _where="${1}" - local _fs _total _used _avail _pct_u=0 _mnt - read _fs _total _used _avail _pct_u _mnt < <(df -m "${_where}" | tail -1) &> /dev/null - _msg_info "Total: ${_total} MiB (100%) | Used: ${_used} MiB (${_pct_u}) | Avail: ${_avail} MiB ($((100 - ${_pct_u%\%}))%)" -} - -_chroot_mount () { - mount -t devtmpfs dev "${work_dir}/root-image/dev" - mount -t devpts devpts "${work_dir}/root-image/dev/pts" - mount -t tmpfs devshm "${work_dir}/root-image/dev/shm" - mount -t proc proc "${work_dir}/root-image/proc" - mount -t tmpfs run "${work_dir}/root-image/run" - mount -t sysfs sys "${work_dir}/root-image/sys" - mount -t tmpfs tmp "${work_dir}/root-image/tmp" - - trap '_chroot_umount' EXIT HUP INT TERM -} - -_chroot_umount () { - umount "${work_dir}/root-image/tmp" - umount "${work_dir}/root-image/sys" - umount "${work_dir}/root-image/run" - umount "${work_dir}/root-image/proc" - umount "${work_dir}/root-image/dev/shm" - umount "${work_dir}/root-image/dev/pts" - umount "${work_dir}/root-image/dev" - - trap - EXIT HUP INT TERM -} - -_chroot_init() { - if [[ ! -d ${work_dir}/root-image/var/cache/pacman ]]; then - mkdir -p ${work_dir}/root-image/{dev,proc,run,sys,tmp,var/lib/pacman} - _pacman "base" - _pacman "syslinux" - fi -} - -_chroot_run() { - _chroot_mount - eval chroot ${work_dir}/root-image "${run_cmd}" - _chroot_umount -} - -# Mount a filesystem (trap signals in case of error for unmounting it -# $1: source image -# $2: mount-point -_mount_fs() { - local _src="${1}" - local _dst="${2}" - trap "_umount_fs ${_src}" EXIT HUP INT TERM - mkdir -p "${_dst}" - _msg_info "Mounting '${_src}' on '${_dst}'" - mount "${_src}" "${_dst}" - _show_space_usage "${_dst}" -} - -# Unmount a filesystem (and untrap signals) -# $1: mount-point or device/image -_umount_fs() { - local _dst="${1}" - _show_space_usage "${_dst}" - _msg_info "Unmounting '${_dst}'" - umount "${_dst}" - rmdir "${_dst}" - trap - EXIT HUP INT TERM -} - -# Compare if a file/directory (source) is newer than other file (target) -# $1: source file/directory -# $2: target file -# return: 0 if target does not exists or if target is older than source. -# 1 if target is newer than source -_is_directory_changed() { - local _src="${1}" - local _dst="${2}" - - if [ -e "${_dst}" ]; then - if [[ $(find ${_src} -newer ${_dst} | wc -l) -gt 0 ]]; then - _msg_info "Target '${_dst}' is older than '${_src}', updating." - rm -f "${_dst}" - return 0 - else - _msg_info "Target '${_dst}' is up to date with '${_src}', skipping." - return 1 - fi - else - _msg_info "Target '${_dst}' does not exist, making it from '${_src}'" - return 0 - fi -} - -# Show help usage, with an exit status. -# $1: exit status number. -_usage () -{ - echo "usage ${app_name} [options] command <command options>" - echo " general options:" - echo " -p PACKAGE(S) Package(s) to install, can be used multiple times" - echo " -r <command> Run <command> inside root-image" - echo " -C <file> Config file for pacman." - echo " Default: '${pacman_conf}'" - echo " -L <label> Set a label for the disk" - echo " Default: '${iso_label}'" - echo " -P <publisher> Set a publisher for the disk" - echo " Default: '${iso_publisher}'" - echo " -A <application> Set an application name for the disk" - echo " Default: '${iso_application}'" - echo " -D <install_dir> Set an install_dir. All files will by located here." - echo " Default: '${install_dir}'" - echo " NOTE: Max 8 characters, use only [a-z0-9]" - echo " -w <work_dir> Set the working directory" - echo " Default: '${work_dir}'" - echo " -o <out_dir> Set the output directory" - echo " Default: '${out_dir}'" - echo " -v Enable verbose output" - echo " -h This message" - echo " commands:" - echo " init" - echo " Make base layout and install base group" - echo " install" - echo " Install all specified packages (-p)" - echo " run" - echo " run command specified by -r" - echo " prepare" - echo " build all images" - echo " checksum" - echo " make a checksum.md5 for self-test" - echo " pkglist" - echo " make a pkglist.txt of packages installed on root-image" - echo " iso <image name>" - echo " build an iso image from the working dir" - exit ${1} -} - -# Shows configuration according to command mode. -# $1: init | install | run | prepare | checksum | iso -_show_config () { - local _mode="$1" - echo - _msg_info "Configuration settings" - _msg_info " Command: ${command_name}" - _msg_info " Architecture: ${arch}" - _msg_info " Working directory: ${work_dir}" - _msg_info " Installation directory: ${install_dir}" - case "${_mode}" in - init) - _msg_info " Pacman config file: ${pacman_conf}" - ;; - install) - _msg_info " Pacman config file: ${pacman_conf}" - _msg_info " Packages: ${pkg_list}" - ;; - run) - _msg_info " Run command: ${run_cmd}" - ;; - prepare) - ;; - checksum) - ;; - pkglist) - ;; - iso) - _msg_info " Image name: ${img_name}" - _msg_info " Disk label: ${iso_label}" - _msg_info " Disk publisher: ${iso_publisher}" - _msg_info " Disk application: ${iso_application}" - ;; - esac - echo -} - -# Install desired packages to root-image -_pacman () -{ - _msg_info "Installing packages to '${work_dir}/root-image/'..." - - _chroot_mount - - if [[ "${quiet}" = "y" ]]; then - pacman -Sy -r "${work_dir}/root-image" --config "${pacman_conf}" --needed --noconfirm $* &> /dev/null - else - pacman -Sy -r "${work_dir}/root-image" --config "${pacman_conf}" --needed --noconfirm $* - fi - - _chroot_umount - - _msg_info "Packages installed successfully!" -} - -# Cleanup root-image -_cleanup () { - _msg_info "Cleaning up what we can on root-image..." - - # Delete initcpio image(s) - if [[ -d "${work_dir}/root-image/boot" ]]; then - find "${work_dir}/root-image/boot" -type f -name '*.img' -delete - fi - # Delete kernel(s) - if [[ -d "${work_dir}/root-image/boot" ]]; then - find "${work_dir}/root-image/boot" -type f -name 'vmlinuz*' -delete - fi - # Delete pacman database sync cache files (*.tar.gz) - if [[ -d "${work_dir}/root-image/var/lib/pacman" ]]; then - find "${work_dir}/root-image/var/lib/pacman" -maxdepth 1 -type f -delete - fi - # Delete pacman database sync cache - if [[ -d "${work_dir}/root-image/var/lib/pacman/sync" ]]; then - find "${work_dir}/root-image/var/lib/pacman/sync" -delete - fi - # Delete pacman package cache - if [[ -d "${work_dir}/root-image/var/cache/pacman/pkg" ]]; then - find "${work_dir}/root-image/var/cache/pacman/pkg" -type f -delete - fi - # Delete all log files, keeps empty dirs. - if [[ -d "${work_dir}/root-image/var/log" ]]; then - find "${work_dir}/root-image/var/log" -type f -delete - fi - # Avoid journald use permanent storage (Storage=auto) - if [[ -d "${work_dir}/root-image/var/log/journal" ]]; then - rm -rf "${work_dir}/root-image/var/log/journal" - fi - # Delete all temporary files and dirs - if [[ -d "${work_dir}/root-image/var/tmp" ]]; then - find "${work_dir}/root-image/var/tmp" -mindepth 1 -delete - fi - # Delete package pacman related files. - find "${work_dir}" \( -name "*.pacnew" -o -name "*.pacsave" -o -name "*.pacorig" \) -delete - _msg_info "Done!" -} - -# Makes a SquashFS filesystem image of file/directory passes as argument with desired compression. -# $1: Source file/directory -# $2: SquashFS compression type (gzip | lzo | xz) -_mksfs () { - local _src="${1}" - local _sfs_comp="${2}" - - if [[ ! -e "${work_dir}/${_src}" ]]; then - _msg_error "The path '${work_dir}/${_src}' does not exist" 1 - fi - - local _sfs_img="${work_dir}/${_src}.sfs" - - _msg_info "Creating SquashFS image for '${work_dir}/${_src}', This may take some time..." - local _seconds=${SECONDS} - if [[ "${quiet}" = "y" ]]; then - mksquashfs "${work_dir}/${_src}" "${_sfs_img}" -noappend -comp "${_sfs_comp}" -no-progress &> /dev/null - else - mksquashfs "${work_dir}/${_src}" "${_sfs_img}" -noappend -comp "${_sfs_comp}" -no-progress - fi - _seconds=$((SECONDS - _seconds)) - printf "[mkarchiso] INFO: Image creation done in %02d:%02d minutes\n" $((_seconds / 60)) $((_seconds % 60)) -} - -# Makes a filesystem from a source directory. -# $1: Source directory -# $2: Target filesystem type (ext4 | ext3 | ext2 | xfs | btrfs) -# $3: Size of target filesystem. Can be an absolute value in MiB, or relative value of desired free space (1% - 99%) -_mkfs () { - local _src="${1}" - local _fs_type="${2}" - local _fs_size="${3}" - - local _fs_src="${work_dir}/${_src}" - local _fs_img="${work_dir}/${_src}.fs" - - if [[ ! -e "${_fs_src}" ]]; then - _msg_error "The path '${_fs_src}' does not exist" 1 - fi - - local _spc_used - _spc_used=$(du -sxm "${_fs_src}" | awk '{print $1}') - - # Caculate FS size with desired % of free space, adds 10% overhead to used space. - if [[ ${_fs_size} != ${_fs_size%\%} ]]; then - if [[ ${_fs_size%\%} -le 0 || ${_fs_size%\%} -ge 100 ]]; then - _msg_error "Invalid percentage of free space specified '${_fs_size}' on '${_src}', should be 0% < x < 100%" 1 - fi - _fs_size=$((_spc_used * 110 / (100 - ${_fs_size%\%}))) - else - local _spc_used_over=$((_spc_used * 11 / 10)) - if [[ ${_fs_size} -lt ${_spc_used_over} ]]; then - _msg_error "Filesystem size specified '${_fs_size}' MiB for '${_src}' is too small, must be at least '${_spc_used_over}' MiB" 1 - fi - fi - - _msg_info "Creating ${_fs_type} image of ${_fs_size} MiB..." - rm -f "${_fs_img}" - truncate -s ${_fs_size}M "${_fs_img}" - local _qflag="" - if [[ ${quiet} == "y" ]]; then - _qflag="-q" - fi - case "${_fs_type}" in - ext4) - mkfs.ext4 ${_qflag} -O ^has_journal -E lazy_itable_init=0 -m 0 -F "${_fs_img}" - tune2fs -c 0 -i 0 "${_fs_img}" &> /dev/null - ;; - ext3) - mkfs.ext3 ${_qflag} -m 0 -F "${_fs_img}" - tune2fs -c 0 -i 0 "${_fs_img}" &> /dev/null - ;; - ext2) - mkfs.ext2 ${_qflag} -m 0 -F "${_fs_img}" - tune2fs -c 0 -i 0 "${_fs_img}" &> /dev/null - ;; - xfs) - mkfs.xfs ${_qflag} "${_fs_img}" - ;; - btrfs) - mkfs.btrfs -M "${_fs_img}" - ;; - *) - _msg_error "Invalid filesystem: ${_fs_type}" 1 - ;; - esac - _msg_info "Done!" - _mount_fs "${_fs_img}" "${work_dir}/mnt/${_src}" - _msg_info "Copying '${_fs_src}/' to '${work_dir}/mnt/${_src}/'..." - cp -aT "${_fs_src}/" "${work_dir}/mnt/${_src}/" - _msg_info "Done!" - _umount_fs "${work_dir}/mnt/${_src}" -} - -command_checksum () { - _show_config checksum - - local _chk_arch - - for _chk_arch in i686 x86_64; do - if _is_directory_changed "${work_dir}/iso/${install_dir}" "${work_dir}/iso/${install_dir}/checksum.${_chk_arch}.md5"; then - _msg_info "Creating checksum file for self-test (${_chk_arch})..." - cd "${work_dir}/iso/${install_dir}" - if [[ -d "${_chk_arch}" ]]; then - md5sum aitab > checksum.${_chk_arch}.md5 - find ${_chk_arch} -type f -print0 | xargs -0 md5sum >> checksum.${_chk_arch}.md5 - if [[ -d "any" ]]; then - find any -type f -print0 | xargs -0 md5sum >> checksum.${_chk_arch}.md5 - fi - fi - cd ${OLDPWD} - _msg_info "Done!" - fi - done -} - -command_pkglist () { - _show_config pkglist - - if _is_directory_changed "${work_dir}/root-image/var/lib/pacman/local" "${work_dir}/iso/${install_dir}/pkglist.${arch}.txt"; then - _msg_info "Creating a list of installed packages on live-enviroment..." - pacman -Sl -r "${work_dir}/root-image" --config "${pacman_conf}" | \ - awk '/\[installed\]$/ {print $1 "/" $2 "-" $3}' > \ - "${work_dir}/iso/${install_dir}/pkglist.${arch}.txt" - _msg_info "Done!" - fi - -} - -# Create an ISO9660 filesystem from "iso" directory. -command_iso () { - local _iso_efi_boot_args="" - - if [[ ! -f "${work_dir}/iso/isolinux/isolinux.bin" ]]; then - _msg_error "The file '${work_dir}/iso/isolinux/isolinux.bin' does not exist." 1 - fi - if [[ ! -f "${work_dir}/iso/isolinux/isohdpfx.bin" ]]; then - _msg_error "The file '${work_dir}/iso/isolinux/isohdpfx.bin' does not exist." 1 - fi - - # If exists, add an EFI "El Torito" boot image (FAT filesystem) to ISO-9660 image. - if [[ -f "${work_dir}/iso/EFI/archiso/efiboot.img" ]]; then - _iso_efi_boot_args="--efi-boot EFI/archiso/efiboot.img" - fi - - _show_config iso - - if _is_directory_changed "${work_dir}/iso" "${out_dir}/${img_name}"; then - mkdir -p ${out_dir} - _msg_info "Creating ISO image..." - local _qflag="" - if [[ ${quiet} == "y" ]]; then - _qflag="-quiet" - fi - xorriso -as mkisofs ${_qflag} \ - -iso-level 3 \ - -full-iso9660-filenames \ - -volid "${iso_label}" \ - -appid "${iso_application}" \ - -publisher "${iso_publisher}" \ - -preparer "prepared by mkarchiso" \ - -eltorito-boot isolinux/isolinux.bin \ - -eltorito-catalog isolinux/boot.cat \ - -no-emul-boot -boot-load-size 4 -boot-info-table \ - ${_iso_efi_boot_args} \ - -isohybrid-mbr ${work_dir}/iso/isolinux/isohdpfx.bin \ - -output "${out_dir}/${img_name}" \ - "${work_dir}/iso/" - _msg_info "Done! | $(ls -sh ${out_dir}/${img_name})" - fi -} - -# Parse aitab and create each filesystem specified on that, and push it in "iso" directory. -command_prepare () { - if [[ ! -f "${work_dir}/iso/${install_dir}/aitab" ]]; then - _msg_error "The file '${work_dir}/iso/${install_dir}/aitab' does not exist." 1 - fi - _show_config prepare - - _cleanup - local _aitab_img _aitab_mnt _aitab_arch _aitab_sfs_comp _aitab_fs_type _aitab_fs_size - while read _aitab_img _aitab_mnt _aitab_arch _aitab_sfs_comp _aitab_fs_type _aitab_fs_size ; do - if [[ ${_aitab_img} =~ ^# ]]; then - continue - fi - if [[ "${_aitab_arch}" != "any" && "${_aitab_arch}" != "${arch}" ]]; then - continue - fi - local _src="${work_dir}/${_aitab_img}" - local _dst="${work_dir}/iso/${install_dir}/${_aitab_arch}" - mkdir -p "${_dst}" - if [[ ${_aitab_fs_type} != "none" ]]; then - if _is_directory_changed "${_src}" "${_dst}/${_aitab_img}.fs.sfs"; then - _mkfs ${_aitab_img} ${_aitab_fs_type} ${_aitab_fs_size} - _mksfs ${_aitab_img}.fs ${_aitab_sfs_comp} - mv "${_src}.fs.sfs" "${_dst}" - rm "${_src}.fs" - fi - else - if _is_directory_changed "${_src}" "${_dst}/${_aitab_img}.sfs"; then - _mksfs ${_aitab_img} ${_aitab_sfs_comp} - mv "${work_dir}/${_aitab_img}.sfs" "${_dst}" - fi - fi - done < "${work_dir}/iso/${install_dir}/aitab" -} - -# Install packages on root-image. -# A basic check to avoid double execution/reinstallation is done via hashing package names. -command_install () { - if [[ ! -f "${pacman_conf}" ]]; then - _msg_error "Pacman config file '${pacman_conf}' does not exist" 1 - fi - - #trim spaces - pkg_list="$(echo ${pkg_list})" - - if [[ -z ${pkg_list} ]]; then - _msg_error "Packages must be specified" 0 - _usage 1 - fi - - _show_config install - - local _pkg_list_hash - _pkg_list_hash=$(echo ${pkg_list} | sort -u | md5sum | cut -c1-32) - if [[ -f "${work_dir}/install.${_pkg_list_hash}" ]]; then - _msg_info "These packages are already installed, skipping." - else - _pacman "${pkg_list}" - : > "${work_dir}/install.${_pkg_list_hash}" - fi -} - -command_init() { - _show_config init - _chroot_init -} - -command_run() { - _show_config run - _chroot_run -} - -if [[ ${EUID} -ne 0 ]]; then - _msg_error "This script must be run as root." 1 -fi - -while getopts 'p:r:C:L:P:A:D:w:o:vh' arg; do - case "${arg}" in - p) pkg_list="${pkg_list} ${OPTARG}" ;; - r) run_cmd="${OPTARG}" ;; - C) pacman_conf="${OPTARG}" ;; - L) iso_label="${OPTARG}" ;; - P) iso_publisher="${OPTARG}" ;; - A) iso_application="${OPTARG}" ;; - D) install_dir="${OPTARG}" ;; - w) work_dir="${OPTARG}" ;; - o) out_dir="${OPTARG}" ;; - v) quiet="n" ;; - h|?) _usage 0 ;; - *) - _msg_error "Invalid argument '${arg}'" 0 - _usage 1 - ;; - esac -done - -shift $((OPTIND - 1)) - -if [[ $# -lt 1 ]]; then - _msg_error "No command specified" 0 - _usage 1 -fi -command_name="${1}" - -case "${command_name}" in - init) - command_init - ;; - install) - command_install - ;; - run) - command_run - ;; - prepare) - command_prepare - ;; - checksum) - command_checksum - ;; - pkglist) - command_pkglist - ;; - iso) - if [[ $# -lt 2 ]]; then - _msg_error "No image specified" 0 - _usage 1 - fi - img_name="${2}" - command_iso - ;; - *) - _msg_error "Invalid command name '${command_name}'" 0 - _usage 1 - ;; -esac - -# vim:ts=4:sw=4:et: |