diff --git a/README.md b/README.md index 762881f..cead9e5 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ manjaro-tools ============= -Manjaro-tools-0.13 +Manjaro-tools-0.14 User manual @@ -112,13 +112,6 @@ overriding # iso app id # iso_app_id="Manjaro Linux Live/Rescue CD" -# compression used, possible values xz (default, best compression), gzip, lzma, lzo, lz4 -# lz4 is faster but worst compression, may be useful for locally testing isos -# sfs_compress=xz - -# valid: md5, sha1, sha256, sha384, sha512 -# sfs_checksum=md5 - # possible values: openrc,systemd # initsys="systemd" diff --git a/bin/buildiso.in b/bin/buildiso.in index fc3bc4b..cb1564c 100755 --- a/bin/buildiso.in +++ b/bin/buildiso.in @@ -90,7 +90,7 @@ display_settings(){ msg2 "images_only: %s" "${images_only}" msg2 "iso_only: %s" "${iso_only}" msg2 "persist: %s" "${persist}" - msg2 "sign: %s" "${sign}" +# msg2 "sign: %s" "${sign}" msg2 "torrent: %s" "${torrent}" msg "DIST SETTINGS:" @@ -102,8 +102,6 @@ display_settings(){ msg2 "iso_label: %s" "${iso_label}" msg2 "iso_publisher: %s" "${iso_publisher}" msg2 "iso_app_id: %s" "${iso_app_id}" - msg2 "sfs_compress: %s" "${sfs_compress}" - msg2 "sfs_checksum: %s" "${sfs_checksum}" msg2 "use_overlayfs: %s" "${use_overlayfs}" ${verbose} && msg2 "iso_fs: %s" "${iso_fs}" @@ -125,7 +123,7 @@ pretend=false images_only=false iso_only=false verbose=false -sign=false +# sign=false torrent=false persist=false @@ -143,7 +141,7 @@ usage() { echo ' -i Init system to use' echo " [default: ${initsys}]" echo ' -m Set SquashFS image mode to persistence' - echo ' -s Sign the iso' +# echo ' -s Sign the sfs images' echo ' -c Disable clean work dir' echo ' -x Build images only' echo ' -z Generate iso only' @@ -159,7 +157,7 @@ usage() { orig_argv=("$@") -opts='p:a:b:r:t:k:i:czxsmwvqh' +opts='p:a:b:r:t:k:i:czxmwvqh' while getopts "${opts}" arg; do case "${arg}" in @@ -170,7 +168,7 @@ while getopts "${opts}" arg; do t) cache_dir_iso="$OPTARG" ;; k) kernel="$OPTARG" ;; i) initsys="$OPTARG" ;; - s) sign=true ;; +# s) sign=true ;; c) clean_first=false ;; x) images_only=true ;; z) iso_only=true ;; diff --git a/data/manjaro-tools.conf b/data/manjaro-tools.conf index 824f738..f6db0af 100644 --- a/data/manjaro-tools.conf +++ b/data/manjaro-tools.conf @@ -61,13 +61,6 @@ # iso app id # iso_app_id="Manjaro Linux Live/Rescue CD" -# compression used, possible values xz (default, best compression), gzip, lzma, lzo, lz4 -# lz4 is faster but worst compression, may be useful for locally testing isos -# sfs_compress=xz - -# valid: md5, sha1, sha256, sha384, sha512 -# sfs_checksum=md5 - # possible values: openrc,systemd # initsys="systemd" diff --git a/docbook/manjaro-tools.conf.xml b/docbook/manjaro-tools.conf.xml index 9234c9b..a5b0d92 100644 --- a/docbook/manjaro-tools.conf.xml +++ b/docbook/manjaro-tools.conf.xml @@ -241,25 +241,6 @@ along with systemd; If not, see . - - - sfs_compress= - - Defaults compression that will be used - when creating the various images. Defaults to xz. - - - - - sfs_checksum= - - Checksum that will be created against the - final .iso file. Can be (the default), - , , - or . - - - initsys= diff --git a/initcpio/hooks/miso b/initcpio/hooks/miso index 64041d9..e70f7de 100644 --- a/initcpio/hooks/miso +++ b/initcpio/hooks/miso @@ -41,8 +41,8 @@ _mnt_overlayfs() { local src="${1}" local newroot="${2}" local mnt="${3}" - local work_dir="/run/miso/cowspace/work" - local upper_dir="/run/miso/cowspace/upper" + local work_dir="/run/miso/overlay_root/work" + local upper_dir="/run/miso/overlay_root/upper" mkdir -p "${upper_dir}" "${work_dir}" @@ -124,6 +124,7 @@ run_hook() { [[ -z "${dm_snap_prefix}" ]] && dm_snap_prefix="arch" [[ -z "${misodevice}" ]] && misodevice="/dev/disk/by-label/${misolabel}" [[ -z "${cow_spacesize}" ]] && cow_spacesize="256M" + [[ -z "${overlay_root_size}" ]] && overlay_root_size="75%" if [[ -n "${cow_label}" ]]; then cow_device="/dev/disk/by-label/${cow_label}" @@ -207,15 +208,19 @@ miso_mount_handler() { fi mkdir -p -m 0700 "/run/miso/cowspace/${cow_directory}" + msg -n ":: Mounting overlay root (tmpfs) filesystem, size=${overlay_root_size}..." + mkdir -p /run/miso/overlay_root + mount -t tmpfs -o "size=${overlay_root_size}",mode=0755 overlay_root /run/miso/overlay_root + local src="/run/miso/bootmnt/${misobasedir}/${arch}" local dest_sfs="/run/miso/sfs" dest_img="/run/miso/img" local lower_dir - mkdir -p ${dest_img} for sfs in livefs mhwdfs desktopfs rootfs;do if [[ -f "${src}/${sfs}.sfs" ]]; then _mnt_sfs "${src}/${sfs}.sfs" "${dest_sfs}/${sfs}" if [[ -f "${dest_sfs}/${sfs}/${sfs}.img" ]]; then + mkdir -p ${dest_img} lower_dir=${lower_dir:-}${lower_dir:+:}"${dest_img}/${sfs}" _mnt_dmsnapshot "${dest_sfs}/${sfs}/${sfs}.img" "${dest_img}/${sfs}" else diff --git a/initcpio/hooks/miso_aufs b/initcpio/hooks/miso_aufs index d44fd5e..32d7ae6 100644 --- a/initcpio/hooks/miso_aufs +++ b/initcpio/hooks/miso_aufs @@ -129,6 +129,7 @@ run_hook() { [[ -z "${dm_snap_prefix}" ]] && dm_snap_prefix="arch" [[ -z "${misodevice}" ]] && misodevice="/dev/disk/by-label/${misolabel}" [[ -z "${cow_spacesize}" ]] && cow_spacesize="256M" + [[ -z "${overlay_root_size}" ]] && overlay_root_size="75%" if [[ -n "${cow_label}" ]]; then cow_device="/dev/disk/by-label/${cow_label}" @@ -212,17 +213,21 @@ miso_mount_handler() { fi mkdir -p -m 0700 "/run/miso/cowspace/${cow_directory}" - local work_dir="/run/miso/cowspace" + msg -n ":: Mounting overlay root (tmpfs) filesystem, size=${overlay_root_size}..." + mkdir -p /run/miso/overlay_root + mount -t tmpfs -o "size=${overlay_root_size}",mode=0755 overlay_root /run/miso/overlay_root + + local work_dir="/run/miso/overlay_root" _mnt_overlayfs_root "${work_dir}" "${newroot}" "/" local src="/run/miso/bootmnt/${misobasedir}/${arch}" local dest_sfs="/run/miso/sfs" dest_img="/run/miso/img" - mkdir -p ${dest_img} for sfs in livefs mhwdfs desktopfs rootfs;do if [[ -f "${src}/${sfs}.sfs" ]]; then _mnt_sfs "${src}/${sfs}.sfs" "${dest_sfs}/${sfs}" if [[ -f "${dest_sfs}/${sfs}/${sfs}.img" ]]; then + mkdir -p ${dest_img} _mnt_dmsnapshot "${dest_sfs}/${sfs}/${sfs}.img" "${dest_img}/${sfs}" _mnt_overlayfs "${dest_img}/${sfs}" "${newroot}" "/" else diff --git a/initcpio/hooks/miso_pxe_common b/initcpio/hooks/miso_pxe_common index d004cbe..d99c641 100644 --- a/initcpio/hooks/miso_pxe_common +++ b/initcpio/hooks/miso_pxe_common @@ -39,11 +39,16 @@ run_hook () { # setup DNS resolver if [[ "${IPV4DNS0}" != "0.0.0.0" ]]; then - echo "nameserver ${IPV4DNS0}" > /etc/resolv.conf + echo "# added by miso_pxe_common hook" > /etc/resolv.conf + echo "nameserver ${IPV4DNS0}" >> /etc/resolv.conf fi if [[ "${IPV4DNS1}" != "0.0.0.0" ]]; then echo "nameserver ${IPV4DNS1}" >> /etc/resolv.conf fi + if [[ -n "${DNSDOMAIN}" ]]; then + echo "search ${DNSDOMAIN}" >> /etc/resolv.conf + echo "domain ${DNSDOMAIN}" >> /etc/resolv.conf + fi fi } diff --git a/initcpio/hooks/miso_pxe_http b/initcpio/hooks/miso_pxe_http index 98f97ff..0907b20 100644 --- a/initcpio/hooks/miso_pxe_http +++ b/initcpio/hooks/miso_pxe_http @@ -3,6 +3,10 @@ run_hook() { if [[ -n "${ip}" && -n "${miso_http_srv}" ]]; then + # booting with http is always copy-to-ram, so set here to make sure + # addresses are flushed and interface is set down + copytoram="y" + miso_http_srv=$(eval echo ${miso_http_srv}) [[ -z "${miso_http_spc}" ]] && miso_http_spc="75%" diff --git a/initcpio/script/miso_shutdown b/initcpio/script/miso_shutdown index 8cb05a2..c96acf8 100644 --- a/initcpio/script/miso_shutdown +++ b/initcpio/script/miso_shutdown @@ -5,7 +5,8 @@ mkdir /oldrun mount -n --move /oldroot/run /oldrun # Unmount all mounts now. -umount $(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r) +#umount $(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r) +umount $(mount | awk '$3 ~/^\/oldroot/ {if($3 != "/run/miso/bootmnt") print $3}' | sort -r) # Remove all dm-snapshot devices. dmsetup remove_all diff --git a/lib/util-iso-boot.sh b/lib/util-iso-boot.sh index fff6ee7..797ecc8 100644 --- a/lib/util-iso-boot.sh +++ b/lib/util-iso-boot.sh @@ -20,6 +20,7 @@ set_mkinicpio_hooks(){ sed -e 's/plymouth //' -i $1 fi if ! ${use_overlayfs};then + msg2 "Setting aufs hook" sed -e 's/miso /miso_aufs /' -i $1 fi } @@ -33,20 +34,17 @@ gen_boot_args(){ echo ${args[@]} } -set_silent_switch_root(){ - sed -e 's|"$@"|"$@" >/dev/null 2>&1|' -i $1/usr/lib/initcpio/init -} - -# $1: ${profile_dir} -# $2: ${work_dir}/bootfs prepare_initcpio(){ msg2 "Copying initcpio ..." - cp /usr/lib/initcpio/hooks/miso* $2/usr/lib/initcpio/hooks - cp /usr/lib/initcpio/install/miso* $2/usr/lib/initcpio/install - cp /usr/lib/initcpio/miso_shutdown $2/usr/lib/initcpio + cp /usr/lib/initcpio/hooks/miso* $1/etc/initcpio/hooks + cp /usr/lib/initcpio/install/miso* $1/etc/initcpio/install + cp /usr/lib/initcpio/miso_shutdown $1/etc/initcpio + sed -e "s|/usr/lib/initcpio/|/etc/initcpio/|" -i $1/etc/initcpio/install/miso_shutdown +} + +gen_boot_initramfs(){ cp $1/mkinitcpio.conf $2/etc/mkinitcpio-${iso_name}.conf set_mkinicpio_hooks "$2/etc/mkinitcpio-${iso_name}.conf" -# set_silent_switch_root "$2" } # $1: work_dir @@ -87,7 +85,7 @@ vars_to_boot_conf(){ } prepare_efi_loader(){ - local efi_data=$1${DATADIR}/efiboot efi=$2/EFI/boot + local efi_data=$1/usr/share/efi-utils efi=$2/EFI/boot msg2 "Preparing efi loaders ..." prepare_dir "${efi}" cp $1/usr/share/efitools/efi/PreLoader.efi ${efi}/bootx64.efi @@ -120,12 +118,22 @@ check_syslinux_optional(){ sed -e "/nonfree/ d" -i $1/syslinux.msg } +prepare_isolinux(){ + local syslinux=$1/usr/lib/syslinux/bios + msg2 "Copying isolinux binaries ..." + cp ${syslinux}/{{isolinux,isohdpfx}.bin,ldlinux.c32} $2 + msg2 "Copying isolinux.cfg ..." + cp $1/usr/share/syslinux/isolinux/isolinux.cfg $2 + vars_to_boot_conf "$2/isolinux.cfg" +} + prepare_syslinux(){ local syslinux=$1/usr/lib/syslinux/bios msg2 "Copying syslinux binaries ..." - cp ${syslinux}/{*.c32,lpxelinux.0,memdisk,{isolinux,isohdpfx}.bin} $2 + cp ${syslinux}/{*.c32,lpxelinux.0,memdisk} $2 msg2 "Copying syslinux theme ..." - cp $1${DATADIR}/syslinux-theme/* $2 + syslinux=$1/usr/share/syslinux/theme + cp ${syslinux}/* $2 for conf in $2/*.cfg; do vars_to_boot_conf "${conf}" done diff --git a/lib/util-iso.sh b/lib/util-iso.sh index 817b592..c968437 100644 --- a/lib/util-iso.sh +++ b/lib/util-iso.sh @@ -97,6 +97,18 @@ prepare_ext4_img(){ umount_img "${mnt}" } +sign_iso(){ + su ${OWNER} -c "signfile ${iso_dir}/$1" +} + +# $1: file +make_checksum(){ + msg2 "Creating md5sum ..." + cd $1 + md5sum $2.sfs > $2.md5 + cd ${OLDPWD} +} + # $1: image path make_sfs() { local src="$1" @@ -134,20 +146,19 @@ make_sfs() { mksfs_args+=(${sfs} -noappend) - local highcomp="-b 256K -Xbcj x86" - [[ "${sfs_compress}" != "xz" ]] && highcomp="" + local highcomp="-b 256K -Xbcj x86" comp='xz' if [[ "${name}" == "mhwdfs" && ${used_kernel} < "4" ]]; then mksfs_args+=(-comp lz4) else - mksfs_args+=(-comp ${sfs_compress} ${highcomp}) + mksfs_args+=(-comp ${comp} ${highcomp}) fi if ${verbose};then mksquashfs "${mksfs_args[@]}" >/dev/null else mksquashfs "${mksfs_args[@]}" fi - + make_checksum "${dest}" "${name}" ${persist} && rm "${src}.img" show_elapsed_time "${FUNCNAME}" "${timer_start}" @@ -173,10 +184,10 @@ assemble_iso(){ -appid "${iso_app_id}" \ -publisher "${iso_publisher}" \ -preparer "Prepared by manjaro-tools/${0##*/}" \ - -eltorito-boot syslinux/isolinux.bin \ - -eltorito-catalog syslinux/boot.cat \ + -eltorito-boot isolinux/isolinux.bin \ + -eltorito-catalog isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table \ - -isohybrid-mbr "${iso_root}/syslinux/isohdpfx.bin" \ + -isohybrid-mbr "${iso_root}/isolinux/isohdpfx.bin" \ ${efi_boot_args[@]} \ -output "${iso_dir}/${iso_file}" \ "${iso_root}/" @@ -238,6 +249,8 @@ make_image_root() { pacman -Qr "${path}" > "${path}/rootfs-pkgs.txt" copy_overlay "${profile_dir}/root-overlay" "${path}" + prepare_initcpio "${path}" + reset_pac_conf "${path}" clean_up_image "${path}" @@ -345,7 +358,7 @@ make_image_boot() { mount_image_live "${path}" configure_plymouth "${path}" - prepare_initcpio "${profile_dir}" "${path}" + gen_boot_initramfs "${profile_dir}" "${path}" gen_boot_image "${path}" @@ -400,17 +413,29 @@ make_efi_dvd() { fi } +make_isolinux() { + if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then + msg "Prepare [/iso/isolinux]" + local isolinux=${iso_root}/isolinux + mkdir -p ${isolinux} + prepare_isolinux "${work_dir}/livefs" "${isolinux}" + + : > ${work_dir}/build.${FUNCNAME} + msg "Done [/iso/isolinux]" + fi +} + make_syslinux() { if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then - msg "Prepare [/iso/syslinux]" - local syslinux=${iso_root}/syslinux + msg "Prepare [/iso/${iso_name}/boot/syslinux]" + local syslinux=${iso_root}/${iso_name}/boot/syslinux mkdir -p ${syslinux} prepare_syslinux "${work_dir}/livefs" "${syslinux}" mkdir -p ${syslinux}/hdt # gzip -c -9 ${work_dir}/rootfs/usr/share/hwdata/pci.ids > ${syslinux}/hdt/pciids.gz # gzip -c -9 ${work_dir}/livefs/usr/lib/modules/*-MANJARO/modules.alias > ${syslinux}/hdt/modalias.gz : > ${work_dir}/build.${FUNCNAME} - msg "Done [/iso/syslinux]" + msg "Done [/iso/${iso_name}/boot/syslinux]" fi } @@ -441,9 +466,6 @@ check_requirements(){ import ${LIBDIR}/util-iso-${iso_fs}.sh } -sign_iso(){ - su ${OWNER} -c "signfile ${iso_dir}/$1" -} make_torrent(){ local fn=${iso_file}.torrent @@ -452,21 +474,9 @@ make_torrent(){ mktorrent ${mktorrent_args[*]} -o ${iso_dir}/${fn} ${iso_dir}/${iso_file} } -# $1: file -make_checksum(){ - msg "Creating [%s] sum ..." "${sfs_checksum}" - cd ${iso_dir} - local cs=$(${sfs_checksum}sum $1) - msg2 "%s sum: %s" "${sfs_checksum}" "${cs##*/}" - echo "${cs}" > ${iso_dir}/$1.${sfs_checksum} - msg "Done [%s] sum" "${sfs_checksum}" -} - compress_images(){ local timer=$(get_timer) run_safe "make_iso" - make_checksum "${iso_file}" - ${sign} && sign_iso "${iso_file}" ${torrent} && make_torrent user_own "${iso_dir}" "-R" show_elapsed_time "${FUNCNAME}" "${timer}" @@ -489,6 +499,7 @@ prepare_images(){ run_safe "make_image_mhwd" fi run_safe "make_image_boot" + run_safe "make_isolinux" run_safe "make_syslinux" if [[ "${target_arch}" == "x86_64" ]]; then run_safe "make_efi_usb" diff --git a/lib/util.sh b/lib/util.sh index 9f80551..dc14a99 100644 --- a/lib/util.sh +++ b/lib/util.sh @@ -301,10 +301,6 @@ init_buildiso(){ [[ -z ${iso_app_id} ]] && iso_app_id='Manjaro Linux Live/Rescue CD' - [[ -z ${sfs_compress} ]] && sfs_compress='xz' - - [[ -z ${sfs_checksum} ]] && sfs_checksum='md5' - [[ -z ${initsys} ]] && initsys="systemd" [[ -z ${kernel} ]] && kernel="linux44"