forked from artix/artools
Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
7bf4dff1a1 | |||
529e73e2ab | |||
7be420a24f | |||
cd76f7d3cf | |||
918b95db58 | |||
77c464d603 |
@@ -117,6 +117,7 @@ pretend=false
|
||||
images_only=false
|
||||
iso_only=false
|
||||
persist=false
|
||||
use_dracut=false
|
||||
|
||||
basestrap_args=(-GMc)
|
||||
cmd=${0##*/}
|
||||
@@ -139,6 +140,7 @@ usage() {
|
||||
echo ' -x Build images only'
|
||||
echo ' -z Generate iso only'
|
||||
echo ' Requires pre built images (-x)'
|
||||
echo ' -d Use dracut instead of mkinitcpio for iso initramfs'
|
||||
echo ' -q Query settings and pretend build'
|
||||
echo ' -h This help'
|
||||
echo ''
|
||||
@@ -148,7 +150,7 @@ usage() {
|
||||
|
||||
orig_argv=("$0" "$@")
|
||||
|
||||
opts='p:r:t:i:g:czxmqh'
|
||||
opts='p:r:t:i:g:czxmdqh'
|
||||
|
||||
while getopts "${opts}" arg; do
|
||||
case "${arg}" in
|
||||
@@ -161,6 +163,7 @@ while getopts "${opts}" arg; do
|
||||
x) images_only=true ;;
|
||||
z) iso_only=true ;;
|
||||
m) persist=true ;;
|
||||
d) use_dracut=true ;;
|
||||
q) pretend=true ;;
|
||||
h|?) usage 0 ;;
|
||||
*) echo "invalid argument '${arg}'"; usage 1 ;;
|
||||
|
@@ -142,21 +142,23 @@ run_hook() {
|
||||
[[ -z "${cow_flags}" ]] && cow_flags="defaults"
|
||||
[[ -z "${cow_directory}" ]] && cow_directory="persistent_${label}"
|
||||
[[ -z "${cow_chunksize}" ]] && cow_chunksize="8"
|
||||
# set mount handler for artix
|
||||
mount_handler="artix_mount_handler"
|
||||
[[ -z "${overlay}" ]] && overlay=""
|
||||
|
||||
lower_dir=''
|
||||
live_root="/run/artix"
|
||||
bootmnt="/run/bootmnt"
|
||||
overlay_root="${live_root}/overlay_root"
|
||||
cow="${live_root}/cowspace"
|
||||
bootmnt="${live_root}/bootmnt"
|
||||
cp2ram="${live_root}/copytoram"
|
||||
|
||||
# set mount handler for artix
|
||||
mount_handler="artix_mount_handler"
|
||||
}
|
||||
|
||||
_check_sum() {
|
||||
local fs="$1"
|
||||
local fs="${1}"
|
||||
if [[ -f "${bootmnt}/${root}/${fs}.img" ]]; then
|
||||
if [[ -f "${bootmnt}/${root}/${fs}.img.sha512" ]]; then
|
||||
if [[ -f "${bootmnt}/${root}/${fs}.img.md5" ]]; then
|
||||
msg -n ":: Self-test requested, please wait..."
|
||||
if _verify_checksum "${fs}"; then
|
||||
msg "done. Checksum is OK, continue booting."
|
||||
@@ -166,14 +168,14 @@ _check_sum() {
|
||||
launch_interactive_shell
|
||||
fi
|
||||
else
|
||||
echo "ERROR: checksum=y option specified but ${root}/${fs}.img.sha512 not found"
|
||||
echo "ERROR: checksum=y option specified but ${root}/${fs}.img.md5 not found"
|
||||
launch_interactive_shell
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
_check_sig() {
|
||||
|
||||
local fs="${1}"
|
||||
if [[ -f "${bootmnt}/${root}/${fs}.img" ]]; then
|
||||
if [[ -f "${bootmnt}/${root}/${fs}.img.sig" ]]; then
|
||||
msg -n ":: Signature verification requested, please wait..."
|
||||
@@ -191,12 +193,12 @@ _check_sig() {
|
||||
}
|
||||
|
||||
_gen_arg() {
|
||||
local arg="$1"
|
||||
local arg="${1}"
|
||||
echo "${lower_dir:-}${lower_dir:+:}${arg}"
|
||||
}
|
||||
|
||||
_mount_root_overlay() {
|
||||
local sfs="$1"
|
||||
_mount_root_overlayfs() {
|
||||
local sfs="${1}"
|
||||
local src="${bootmnt}/${root}"
|
||||
local dest_sfs="${live_root}/sfs"
|
||||
local dest_img="${live_root}/img"
|
||||
@@ -227,15 +229,15 @@ artix_mount_handler() {
|
||||
fi
|
||||
fi
|
||||
|
||||
for fs in rootfs livefs; do
|
||||
if [[ "${checksum}" == "y" ]]; then
|
||||
_check_sum "${fs}"
|
||||
fi
|
||||
if [[ "${checksum}" == "y" ]]; then
|
||||
_check_sum "rootfs"
|
||||
[[ -n "${overlay}" ]] && _check_sum "${overlay}"
|
||||
fi
|
||||
|
||||
if [[ "${verify}" == "y" ]]; then
|
||||
_check_sig "${fs}"
|
||||
fi
|
||||
done
|
||||
if [[ "${verify}" == "y" ]]; then
|
||||
_check_sig "rootfs"
|
||||
[[ -n "${overlay}" ]] && _check_sig "${overlay}"
|
||||
fi
|
||||
|
||||
if [[ "${copytoram}" == "y" ]]; then
|
||||
msg ":: Mounting ${cp2ram} (tmpfs) filesystem, size=${copytoram_size}"
|
||||
@@ -258,9 +260,8 @@ artix_mount_handler() {
|
||||
mkdir -p ${overlay_root}
|
||||
mount -t tmpfs -o "size=${overlay_root_size}",mode=0755 overlay_root ${overlay_root}
|
||||
|
||||
for fs in livefs rootfs; do
|
||||
_mount_root_overlay "${fs}"
|
||||
done
|
||||
[[ -n "${overlay}" ]] && _mount_root_overlayfs "${overlay}"
|
||||
_mount_root_overlayfs "rootfs"
|
||||
|
||||
_mnt_overlayfs "${lower_dir}" "${newroot}" "/"
|
||||
|
||||
|
@@ -6,7 +6,6 @@ run_hook () {
|
||||
if [[ -n "${img_dev}" && -n "${img_loop}" ]]; then
|
||||
mount_handler="artix_loop_mount_handler"
|
||||
fi
|
||||
live_root="/run/artix"
|
||||
}
|
||||
|
||||
artix_loop_mount_handler () {
|
||||
|
@@ -23,7 +23,7 @@ _curl_get() {
|
||||
local _dst="${2}"
|
||||
|
||||
msg ":: Downloading '${_url}'"
|
||||
if ! curl -L -f -o "/run/artix/httpspace/${root}${_dst}/${_url##*/}" --create-dirs "${_url}"; then
|
||||
if ! curl -L -f -o "${live_root}/httpspace/${root}${_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"
|
||||
@@ -31,29 +31,33 @@ _curl_get() {
|
||||
fi
|
||||
}
|
||||
|
||||
_get_sfs() {
|
||||
local _sfs="${2}"
|
||||
local _src=${artix_http_srv}${root}
|
||||
if [[ ! -z "$( curl -s --head "${_src}/${_sfs}.img" | grep "OK" )" ]]; then
|
||||
_curl_get "${_src}/${_sfs}.img" "/"
|
||||
|
||||
if [[ "${checksum}" == "y" ]]; then
|
||||
_curl_get "${_src}/${_sfs}.md5" "/"
|
||||
fi
|
||||
if [[ "${verify}" == "y" ]]; then
|
||||
_curl_get "${_src}/${_sfs}.img.sig" "/"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
artix_pxe_http_mount_handler () {
|
||||
newroot="${1}"
|
||||
|
||||
msg ":: Mounting /run/artix/httpspace (tmpfs) filesystem, size='${artix_http_spc}'"
|
||||
mkdir -p "/run/artix/httpspace"
|
||||
mount -t tmpfs -o size="${artix_http_spc}",mode=0755 httpspace "/run/artix/httpspace"
|
||||
msg ":: Mounting ${live_root}/httpspace (tmpfs) filesystem, size='${artix_http_spc}'"
|
||||
mkdir -p "${live_root}/httpspace"
|
||||
mount -t tmpfs -o size="${artix_http_spc}",mode=0755 httpspace "${live_root}/httpspace"
|
||||
|
||||
local _src=${artix_http_srv}${root}/${arch}
|
||||
_get_sfs "rootfs"
|
||||
[[ -n "${overlay}" ]] && _mount_root_overlayfs "${overlay}"
|
||||
|
||||
for sfs in livefs rootfs;do
|
||||
if [[ ! -z "$( curl -s --head "${_src}/${sfs}.sfs" | grep "OK" )" ]]; then
|
||||
_curl_get "${_src}/${sfs}.sfs" "/${arch}"
|
||||
|
||||
if [[ "${checksum}" == "y" ]]; then
|
||||
_curl_get "${_src}/${sfs}.md5" "/${arch}"
|
||||
fi
|
||||
if [[ "${verify}" == "y" ]]; then
|
||||
_curl_get "${_src}/${sfs}.sfs.sig" "/${arch}"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
mkdir -p "/run/artix/bootmnt"
|
||||
mount -o bind /run/artix/httpspace /run/artix/bootmnt
|
||||
mkdir -p "${bootmnt}"
|
||||
mount -o bind ${live_root}/httpspace ${bootmnt}
|
||||
|
||||
artix_mount_handler ${newroot}
|
||||
}
|
||||
|
@@ -12,10 +12,10 @@ run_hook() {
|
||||
|
||||
artix_nfs_mount_handler() {
|
||||
newroot="${1}"
|
||||
mkdir -p "/run/artix/bootmnt"
|
||||
mkdir -p "${bootmnt}"
|
||||
msg ":: Mounting '${artix_nfs_srv}'"
|
||||
# Do not put "${artix_nfs_opt}" nfsmount fails!
|
||||
if ! nfsmount ${artix_nfs_opt} "${artix_nfs_srv}" "/run/artix/bootmnt"; then
|
||||
if ! nfsmount ${artix_nfs_opt} "${artix_nfs_srv}" "${bootmnt}"; then
|
||||
echo "ERROR: Mounting '${artix_nfs_srv}'"
|
||||
echo " Falling back to interactive prompt"
|
||||
echo " You can try to fix the problem manually, log out when you are finished"
|
||||
|
@@ -25,7 +25,7 @@ if [[ ! -d /oldrun/artix/copytoram ]]; then
|
||||
if [[ -d /oldrun/artix/img_dev ]]; then
|
||||
umount /oldrun/artix/img_dev
|
||||
else
|
||||
umount /oldrun/artix/bootmnt
|
||||
umount /oldrun/bootmnt
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@@ -143,10 +143,10 @@ write_unpackfs() {
|
||||
local yaml=$(write_yaml_header)
|
||||
yaml+=$(write_yaml_map 0 'unpack')
|
||||
# if ${persist}; then
|
||||
# yaml+=$(write_yaml_seq_map 2 'source' '"/run/artix/bootmnt/LiveOS/rootfs.img"')
|
||||
# yaml+=$(write_yaml_seq_map 2 'source' '"/run/bootmnt/LiveOS/rootfs.img"')
|
||||
# yaml+=$(write_yaml_map 4 'sourcefs' '"ext4"')
|
||||
# else
|
||||
yaml+=$(write_yaml_seq_map 2 'source' '"/run/artix/bootmnt/LiveOS/rootfs.img"')
|
||||
yaml+=$(write_yaml_seq_map 2 'source' '"/run/bootmnt/LiveOS/rootfs.img"')
|
||||
yaml+=$(write_yaml_map 4 'sourcefs' '"squashfs"')
|
||||
# fi
|
||||
yaml+=$(write_yaml_map 4 'destination' '""')
|
||||
|
149
lib/iso/grub.sh
149
lib/iso/grub.sh
@@ -12,51 +12,8 @@
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
write_mkinitcpio_conf() {
|
||||
local conf="$1/etc/mkinitcpio-artix.conf"
|
||||
printf "%s\n" 'MODULES=(loop dm-snapshot)' > $conf
|
||||
printf "%s\n" 'COMPRESSION="xz"' >> $conf
|
||||
if [[ "${PROFILE}" == 'base' ]];then
|
||||
printf "%s\n" 'HOOKS=(base udev artix_shutdown artix artix_loop_mnt artix_pxe_common artix_pxe_http artix_pxe_nbd artix_pxe_nfs artix_kms modconf block filesystems keyboard keymap)' >> $conf
|
||||
else
|
||||
printf "%s\n" 'HOOKS=(base udev artix_shutdown artix artix_loop_mnt artix_kms modconf block filesystems keyboard keymap)' >> $conf
|
||||
fi
|
||||
}
|
||||
|
||||
prepare_initcpio(){
|
||||
msg2 "Copying initcpio ..."
|
||||
local dest="$1"
|
||||
cp /etc/initcpio/hooks/artix* $dest/etc/initcpio/hooks
|
||||
cp /etc/initcpio/install/artix* $dest/etc/initcpio/install
|
||||
cp /etc/initcpio/artix_shutdown $dest/etc/initcpio
|
||||
|
||||
msg2 "Writing mkinitcpio.conf ..."
|
||||
write_mkinitcpio_conf "$dest"
|
||||
}
|
||||
|
||||
prepare_initramfs(){
|
||||
local mnt="$1"
|
||||
|
||||
if [[ -n ${GPG_KEY} ]]; then
|
||||
su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY"
|
||||
exec 17<>/tmp/GPG_KEY
|
||||
fi
|
||||
local _kernel=$(<$mnt/usr/src/linux/version)
|
||||
ARTIX_GNUPG_FD=${GPG_KEY:+17} artools-chroot $mnt \
|
||||
/usr/bin/mkinitcpio -k ${_kernel} \
|
||||
-c /etc/mkinitcpio-artix.conf \
|
||||
-g /boot/initramfs.img
|
||||
|
||||
if [[ -n ${GPG_KEY} ]]; then
|
||||
exec 17<&-
|
||||
fi
|
||||
if [[ -f /tmp/GPG_KEY ]]; then
|
||||
rm /tmp/GPG_KEY
|
||||
fi
|
||||
}
|
||||
|
||||
prepare_boot_extras(){
|
||||
local src="$1" dest="$2"
|
||||
local src="$1" dest=${iso_root}/boot
|
||||
|
||||
for u in intel amd;do
|
||||
cp $src/boot/$u-ucode.img $dest/$u-ucode.img
|
||||
@@ -67,10 +24,108 @@ prepare_boot_extras(){
|
||||
cp $src/usr/share/licenses/common/GPL2/license.txt $dest/memtest.COPYING
|
||||
}
|
||||
|
||||
##################dracut##################
|
||||
|
||||
prepare_initramfs_dracut(){
|
||||
local mnt="$1"
|
||||
local kver=$(<"$mnt"/usr/src/linux/version)
|
||||
|
||||
printf "%s\n" 'add_dracutmodules+=" dmsquash-live"' > "$mnt"/etc/dracut.conf.d/50-live.conf
|
||||
|
||||
msg "Starting build: %s" "${kver}"
|
||||
artools-chroot "$mnt" dracut -fqM /boot/initramfs.img "$kver"
|
||||
msg "Image generation successful"
|
||||
|
||||
cp "$mnt"/boot/initramfs.img "${iso_root}"/boot/initramfs-"${ARCH}".img
|
||||
|
||||
prepare_boot_extras "$mnt"
|
||||
}
|
||||
|
||||
configure_grub_dracut(){
|
||||
msg "Configuring grub kernel options ..."
|
||||
local kopts=(
|
||||
"root=live:LABEL=${iso_label}"
|
||||
'rd.live.squashimg=rootfs.img'
|
||||
'rd.live.image'
|
||||
'rootflags=auto'
|
||||
)
|
||||
[[ "${PROFILE}" != 'base' ]] && kopts+=("rd.live.join=livefs.img")
|
||||
|
||||
local ro_opts=()
|
||||
local rw_opts=()
|
||||
# 'rd.writable.fsimg=1'
|
||||
|
||||
sed -e "s|@kopts@|${kopts[*]}|" \
|
||||
-e "s|@ro_opts@|${ro_opts[*]}|" \
|
||||
-e "s|@rw_opts@|${rw_opts[*]}|" \
|
||||
-i ${iso_root}/boot/grub/kernels.cfg
|
||||
}
|
||||
|
||||
#############################################
|
||||
|
||||
write_mkinitcpio_conf() {
|
||||
msg2 "Writing mkinitcpio.conf ..."
|
||||
local conf="$1/etc/mkinitcpio-artix.conf"
|
||||
printf "%s\n" 'MODULES=(loop dm-snapshot)' > $conf
|
||||
printf "%s\n" 'COMPRESSION="xz"' >> $conf
|
||||
if [[ "${PROFILE}" == 'base' ]];then
|
||||
printf "%s\n" 'HOOKS=(base udev artix_shutdown artix artix_loop_mnt
|
||||
artix_pxe_common artix_pxe_http artix_pxe_nbd artix_pxe_nfs
|
||||
artix_kms modconf block filesystems keyboard keymap)' >> $conf
|
||||
else
|
||||
printf "%s\n" 'HOOKS=(base udev artix_shutdown artix artix_loop_mnt
|
||||
artix_kms modconf block filesystems keyboard keymap)' >> $conf
|
||||
fi
|
||||
}
|
||||
|
||||
prepare_initcpio(){
|
||||
msg2 "Copying initcpio ..."
|
||||
local dest="$1"
|
||||
cp /etc/initcpio/hooks/artix* $dest/etc/initcpio/hooks
|
||||
cp /etc/initcpio/install/artix* $dest/etc/initcpio/install
|
||||
cp /etc/initcpio/artix_shutdown $dest/etc/initcpio
|
||||
}
|
||||
|
||||
prepare_initramfs(){
|
||||
local mnt="$1"
|
||||
|
||||
prepare_initcpio "$mnt"
|
||||
|
||||
write_mkinitcpio_conf "$mnt"
|
||||
|
||||
if [[ -n ${GPG_KEY} ]]; then
|
||||
su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY"
|
||||
exec 17<>/tmp/GPG_KEY
|
||||
fi
|
||||
local _kernel=$(<"$mnt"/usr/src/linux/version)
|
||||
ARTIX_GNUPG_FD=${GPG_KEY:+17} artools-chroot "$mnt" \
|
||||
/usr/bin/mkinitcpio -k ${_kernel} \
|
||||
-c /etc/mkinitcpio-artix.conf \
|
||||
-g /boot/initramfs.img
|
||||
|
||||
if [[ -n ${GPG_KEY} ]]; then
|
||||
exec 17<&-
|
||||
fi
|
||||
if [[ -f /tmp/GPG_KEY ]]; then
|
||||
rm /tmp/GPG_KEY
|
||||
fi
|
||||
|
||||
cp $mnt/boot/initramfs.img ${iso_root}/boot/initramfs-${ARCH}.img
|
||||
prepare_boot_extras "$mnt"
|
||||
}
|
||||
|
||||
configure_grub(){
|
||||
local kopts="root=LiveOS label=${iso_label}"
|
||||
local popts=''
|
||||
sed -e "s|@kopts@|${kopts}|" -e "s|@popts@|${popts}|" -i ${iso_root}/boot/grub/kernels.cfg
|
||||
msg "Configuring grub kernel options ..."
|
||||
local ro_opts=()
|
||||
local rw_opts=()
|
||||
local kopts=("label=${iso_label}")
|
||||
|
||||
[[ "${PROFILE}" != 'base' ]] && kopts+=('overlay=livefs')
|
||||
|
||||
sed -e "s|@kopts@|${kopts[*]}|" \
|
||||
-e "s|@ro_opts@|${ro_opts[*]}|" \
|
||||
-e "s|@rw_opts@|${rw_opts[*]}|" \
|
||||
-i ${iso_root}/boot/grub/kernels.cfg
|
||||
}
|
||||
|
||||
prepare_grub(){
|
||||
|
@@ -24,9 +24,9 @@ make_sig () {
|
||||
|
||||
make_checksum(){
|
||||
local file="$1"
|
||||
msg2 "Creating sha512sum ..."
|
||||
msg2 "Creating md5sum ..."
|
||||
cd ${iso_root}${live_dir}
|
||||
sha512sum $file > $file.sha512
|
||||
md5sum $file > $file.md5
|
||||
cd ${OLDPWD}
|
||||
}
|
||||
|
||||
@@ -100,13 +100,13 @@ make_sfs() {
|
||||
|
||||
mksquashfs "${mksfs_args[@]}"
|
||||
|
||||
make_checksum "${img_name}"
|
||||
${persist} && rm -r "${work_dir}/embed"
|
||||
|
||||
if [[ -n ${GPG_KEY} ]];then
|
||||
make_sig "${img_name}"
|
||||
if ! ${use_dracut}; then
|
||||
make_checksum "${img_name}"
|
||||
if [[ -n ${GPG_KEY} ]];then
|
||||
make_sig "${img_name}"
|
||||
fi
|
||||
fi
|
||||
|
||||
${persist} && rm -r "${work_dir}/embed"
|
||||
fi
|
||||
show_elapsed_time "${FUNCNAME}" "${timer_start}"
|
||||
}
|
||||
|
@@ -148,21 +148,20 @@ make_livefs() {
|
||||
make_bootfs() {
|
||||
if [[ ! -e ${work_dir}/bootfs.lock ]]; then
|
||||
msg "Prepare [/iso/boot]"
|
||||
local boot="${iso_root}/boot"
|
||||
|
||||
prepare_dir "${boot}"
|
||||
prepare_dir "${iso_root}/boot"
|
||||
|
||||
cp ${work_dir}/rootfs/boot/vmlinuz* ${boot}/vmlinuz-${ARCH}
|
||||
cp ${work_dir}/rootfs/boot/vmlinuz* ${iso_root}/boot/vmlinuz-${ARCH}
|
||||
|
||||
local bootfs="${work_dir}/bootfs"
|
||||
|
||||
mount_overlay "${bootfs}" "${work_dir}"
|
||||
|
||||
prepare_initcpio "${bootfs}"
|
||||
prepare_initramfs "${bootfs}"
|
||||
|
||||
cp ${bootfs}/boot/initramfs.img ${boot}/initramfs-${ARCH}.img
|
||||
prepare_boot_extras "${bootfs}" "${boot}"
|
||||
if ${use_dracut}; then
|
||||
prepare_initramfs_dracut "${bootfs}"
|
||||
else
|
||||
prepare_initramfs "${bootfs}"
|
||||
fi
|
||||
|
||||
umount_overlay
|
||||
|
||||
@@ -181,7 +180,11 @@ make_grub(){
|
||||
|
||||
prepare_grub "${work_dir}/rootfs" "$layer"
|
||||
|
||||
configure_grub
|
||||
if ${use_dracut}; then
|
||||
configure_grub_dracut
|
||||
else
|
||||
configure_grub
|
||||
fi
|
||||
|
||||
: > ${work_dir}/grub.lock
|
||||
msg "Done [/iso/boot/grub]"
|
||||
|
Reference in New Issue
Block a user