2014-12-08 23:50:56 +01:00
#!/bin/bash
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
2015-01-28 21:05:18 +01:00
[ [ -r ${ LIBDIR } /util-iso-image.sh ] ] && source ${ LIBDIR } /util-iso-image.sh
2015-03-04 00:40:44 +01:00
[ [ -r ${ LIBDIR } /util-iso-boot.sh ] ] && source ${ LIBDIR } /util-iso-boot.sh
2015-01-29 05:16:15 +01:00
[ [ -r ${ LIBDIR } /util-iso-calamares.sh ] ] && source ${ LIBDIR } /util-iso-calamares.sh
2015-05-11 23:32:40 +02:00
# check_run_dir(){
# if [[ ! -f shared/Packages-Systemd ]] || [[ ! -f shared/Packages-Openrc ]];then
# die "${0##*/} is not run in a valid iso-profiles folder!"
# fi
# }
2015-02-09 20:34:37 +01:00
2014-12-19 04:29:18 +01:00
copy_overlay_root( ) {
2015-02-13 15:17:00 +01:00
msg2 "Copying overlay ..."
cp -a --no-preserve= ownership overlay/* $1
2014-12-12 05:18:17 +01:00
}
2015-01-29 05:16:15 +01:00
copy_overlay_custom( ) {
2015-02-13 15:17:00 +01:00
msg2 " Copying ${ custom } -overlay ... "
cp -a --no-preserve= ownership ${ custom } -overlay/* ${ work_dir } /${ custom } -image
2014-12-12 05:18:17 +01:00
}
2014-12-12 17:36:29 +01:00
copy_overlay_livecd( ) {
2014-12-16 05:29:46 +01:00
msg2 "Copying overlay-livecd ..."
2014-12-21 01:42:17 +01:00
if [ [ -L overlay-livecd ] ] ; then
2015-02-13 15:17:00 +01:00
cp -a --no-preserve= ownership overlay-livecd/* $1
2014-12-20 23:21:26 +01:00
else
2015-02-13 15:17:00 +01:00
msg2 "Copying custom overlay-livecd ..."
cp -LR overlay-livecd/* $1
2014-12-20 23:21:26 +01:00
fi
2014-12-12 17:36:29 +01:00
}
2014-12-19 04:29:18 +01:00
copy_startup_scripts( ) {
2015-02-13 15:17:00 +01:00
msg2 "Copying startup scripts ..."
cp ${ PKGDATADIR } /scripts/livecd $1
cp ${ PKGDATADIR } /scripts/mhwd-live $1
chmod +x $1 /livecd
chmod +x $1 /mhwd-live
2014-12-12 17:36:29 +01:00
}
2015-03-03 02:38:31 +01:00
write_profile_conf_entries( ) {
local conf = $1 /profile.conf
echo '' >> ${ conf }
echo '# custom image name' >> ${ conf }
echo " custom= ${ custom } " >> ${ conf }
echo '' >> ${ conf }
2015-03-05 10:54:09 +01:00
echo '# iso_name' >> ${ conf }
echo " iso_name= ${ iso_name } " >> ${ conf }
2015-03-03 02:38:31 +01:00
}
2014-12-14 04:27:24 +01:00
copy_livecd_helpers( ) {
2015-02-13 15:17:00 +01:00
msg2 "Copying livecd helpers ..."
[ [ ! -d $1 ] ] && mkdir -p $1
cp ${ LIBDIR } /util-livecd.sh $1
cp ${ LIBDIR } /util-msg.sh $1
cp ${ LIBDIR } /util.sh $1
2015-02-26 20:36:36 +01:00
cp ${ PKGDATADIR } /scripts/kbd-model-map $1
2015-03-01 21:24:53 +01:00
2015-03-02 23:35:15 +01:00
cp ${ profile_conf } $1
2015-03-03 02:38:31 +01:00
write_profile_conf_entries $1
2014-12-11 03:54:02 +01:00
}
2014-12-14 07:10:36 +01:00
copy_cache_lng( ) {
2015-02-13 15:17:00 +01:00
msg2 "Copying lng cache ..."
cp ${ cache_dir_lng } /* ${ work_dir } /lng-image/opt/livecd/lng
2015-05-02 09:33:13 +02:00
msg2 "Trimming lng pkgs ..."
paccache -rv -k1 -c ${ work_dir } /lng-image/opt/livecd/lng
2014-12-14 07:10:36 +01:00
}
2015-01-14 23:14:44 +01:00
copy_cache_xorg( ) {
2015-02-13 15:17:00 +01:00
msg2 "Copying xorg pkgs cache ..."
cp ${ cache_dir_xorg } /* ${ work_dir } /pkgs-image/opt/livecd/pkgs
2015-05-02 09:33:13 +02:00
msg2 "Trimming xorg pkgs ..."
paccache -rv -k1 -c ${ work_dir } /pkgs-image/opt/livecd/pkgs
2014-12-14 07:10:36 +01:00
}
2015-01-15 02:49:21 +01:00
prepare_cachedirs( ) {
2015-02-16 19:07:19 +01:00
prepare_dir " ${ cache_dir_iso } "
prepare_dir " ${ cache_dir_xorg } "
prepare_dir " ${ cache_dir_lng } "
2014-12-14 07:10:36 +01:00
}
2014-12-18 05:07:04 +01:00
clean_cache( ) {
2015-02-23 19:33:11 +01:00
msg2 " Cleaning [ $1 ] ... "
2014-12-18 05:07:04 +01:00
find " $1 " -name '*.pkg.tar.xz' -delete & >/dev/null
2014-12-08 23:50:56 +01:00
}
2015-05-11 12:47:02 +02:00
# $1: image path
squash_image_dir( ) {
2015-05-11 18:31:41 +02:00
if [ [ ! -d " $1 " ] ] ; then
2015-05-11 12:47:02 +02:00
error " $1 is not a directory "
return 1
fi
2015-05-11 21:29:46 +02:00
local timer = $( get_timer) path = ${ work_dir } /iso/${ iso_name } /${ arch }
local sq_img = " ${ path } / $( basename ${ 1 } ) .sqfs "
mkdir -p ${ path }
2015-05-11 12:47:02 +02:00
msg " Generating SquashFS image for ' ${ 1 } ' "
2015-05-11 18:31:41 +02:00
if [ [ -f " ${ sq_img } " ] ] ; then
local has_changed_dir = $( find ${ 1 } -newer ${ sq_img } )
2015-05-11 12:47:02 +02:00
msg2 " Possible changes for ${ 1 } ... " >> /tmp/buildiso.debug
2015-05-11 18:31:41 +02:00
msg2 " ${ has_changed_dir } " >> /tmp/buildiso.debug
if [ [ -n " ${ has_changed_dir } " ] ] ; then
2015-05-11 12:47:02 +02:00
msg2 " SquashFS image ' ${ sq_img } ' is not up to date, rebuilding... "
2015-05-11 18:31:41 +02:00
rm " ${ sq_img } "
2015-05-11 12:47:02 +02:00
else
msg2 " SquashFS image ' ${ sq_img } ' is up to date, skipping. "
return
fi
fi
2015-05-11 20:59:05 +02:00
local highcomp = "-b 256K -Xbcj x86"
2015-05-11 18:31:41 +02:00
[ [ " ${ iso_compression } " != "xz" ] ] && highcomp = ""
2015-05-11 12:47:02 +02:00
msg2 "Creating SquashFS image. This may take some time..."
2015-05-11 21:02:14 +02:00
mksquashfs " ${ 1 } " " ${ sq_img } " -noappend -comp ${ iso_compression } ${ highcomp }
2015-05-11 18:31:41 +02:00
msg3 " Time ${ FUNCNAME } : $( elapsed_time ${ timer } ) minutes "
2015-05-11 12:47:02 +02:00
}
2015-05-11 23:32:40 +02:00
run_xorriso( ) {
msg "Creating ISO image..."
2015-05-12 01:08:23 +02:00
local efi_boot_args = ( )
2015-05-11 12:47:02 +02:00
if [ [ -f " ${ work_dir } /iso/EFI/miso/ ${ iso_name } .img " ] ] ; then
msg2 "Setting efi args. El Torito detected."
2015-05-12 01:08:23 +02:00
efi_boot_args = ( "-eltorito-alt-boot"
" -e EFI/miso/ ${ iso_name } .img "
"-isohybrid-gpt-basdat"
2015-05-11 12:47:02 +02:00
"-no-emul-boot" )
fi
2015-05-11 23:32:40 +02:00
2015-05-11 12:47:02 +02:00
xorriso -as mkisofs \
-iso-level 3 -rock -joliet \
-max-iso9660-filenames -omit-period \
-omit-version-number \
-relaxed-filenames -allow-lowercase \
-volid " ${ iso_label } " \
-appid " ${ iso_app_id } " \
-publisher " ${ iso_publisher } " \
-preparer " Prepared by manjaro-tools/ ${ 0 ##*/ } " \
-eltorito-boot isolinux/isolinux.bin \
-eltorito-catalog isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-isohybrid-mbr " ${ work_dir } /iso/isolinux/isohdpfx.bin " \
${ efi_boot_args [@] } \
-output " ${ cache_dir_iso } / ${ iso_file } " \
" ${ work_dir } /iso/ "
2015-05-11 23:32:40 +02:00
}
# Build ISO
make_iso( ) {
msg "Start [Build ISO]"
2015-05-12 01:08:23 +02:00
touch " ${ work_dir } /iso/.miso "
2015-05-11 23:32:40 +02:00
for d in $( find " ${ work_dir } " -maxdepth 1 -type d -name '[^.]*' ) ; do
if [ [ " $d " != " ${ work_dir } /iso " ] ] && \
[ [ " $( basename " $d " ) " != "iso" ] ] && \
[ [ " $( basename " $d " ) " != "efiboot" ] ] && \
[ [ " $d " != " ${ work_dir } " ] ] ; then
squash_image_dir " $d " || die "Exit ..."
fi
done
msg "Making bootable image"
# Sanity checks
[ [ ! -d " ${ work_dir } /iso " ] ] && die " [ ${ work_dir } /iso] doesn't exist. What did you do?! "
if [ [ -f " ${ cache_dir_iso } / ${ iso_file } " ] ] ; then
msg2 "Removing existing bootable image..."
rm -rf " ${ cache_dir_iso } / ${ iso_file } "
fi
run_xorriso
2015-05-11 12:47:02 +02:00
2015-02-13 15:17:00 +01:00
chown -R " ${ OWNER } :users " " ${ cache_dir_iso } "
msg "Done [Build ISO]"
2014-12-12 05:18:17 +01:00
}
2015-01-26 21:48:37 +01:00
# $1: file
2015-01-29 00:17:15 +01:00
make_checksum( ) {
2015-02-13 15:17:00 +01:00
cd ${ cache_dir_iso }
2015-03-05 10:54:09 +01:00
msg " Creating [ ${ iso_checksum } sum] ... "
local cs = $( ${ iso_checksum } sum $1 )
msg2 " ${ iso_checksum } sum: ${ cs } "
echo " ${ cs } " > $1 .${ iso_checksum }
msg " Done [ ${ iso_checksum } sum] "
2015-02-13 15:17:00 +01:00
cd ..
2015-01-26 21:48:37 +01:00
}
2014-12-08 23:50:56 +01:00
# Base installation (root-image)
2015-01-13 04:48:04 +01:00
make_image_root( ) {
2015-02-13 15:17:00 +01:00
if [ [ ! -e ${ work_dir } /build.${ FUNCNAME } ] ] ; then
msg "Prepare [Base installation] (root-image)"
local path = " ${ work_dir } /root-image "
2015-05-11 21:29:46 +02:00
mkdir -p ${ path }
2015-05-11 18:31:41 +02:00
make_chroot " ${ path } " " ${ packages } "
2015-05-11 23:32:40 +02:00
clean_up_image " ${ path } "
2015-02-13 15:17:00 +01:00
pacman -Qr " ${ path } " > " ${ path } /root-image-pkgs.txt "
2015-02-19 16:57:35 +01:00
configure_lsb " ${ path } "
2015-02-13 15:17:00 +01:00
copy_overlay_root " ${ path } "
2015-05-10 23:09:36 +02:00
${ is_custom_pac_conf } && clean_pacman_conf " ${ path } "
2015-02-13 15:17:00 +01:00
: > ${ work_dir } /build.${ FUNCNAME }
msg "Done [Base installation] (root-image)"
2014-12-08 23:50:56 +01:00
fi
2014-12-10 19:06:52 +01:00
}
2015-01-29 05:16:15 +01:00
make_image_custom( ) {
2015-02-13 15:17:00 +01:00
if [ [ ! -e ${ work_dir } /build.${ FUNCNAME } ] ] ; then
msg " Prepare [ ${ custom } installation] ( ${ custom } -image) "
local path = " ${ work_dir } / ${ custom } -image "
mkdir -p ${ path }
umount_image_handler
aufs_mount_root_image " ${ path } "
2015-05-11 18:31:41 +02:00
make_chroot " ${ path } " " ${ packages } "
2015-05-11 23:32:40 +02:00
clean_up_image " ${ path } "
2015-02-13 15:17:00 +01:00
pacman -Qr " ${ path } " > " ${ path } / ${ custom } -image-pkgs.txt "
2015-03-05 10:54:09 +01:00
cp " ${ path } / ${ custom } -image-pkgs.txt " ${ cache_dir_iso } /${ iso_name } -${ custom } -${ dist_release } -${ arch } -pkgs.txt
2015-02-13 15:17:00 +01:00
[ [ -d ${ custom } -overlay ] ] && copy_overlay_custom
configure_custom_image " ${ path } "
2015-05-10 23:09:36 +02:00
${ is_custom_pac_conf } && clean_pacman_conf " ${ path } "
2015-02-13 15:17:00 +01:00
umount_image_handler
2015-03-18 11:39:21 +01:00
find ${ path } -name '.wh.*' -delete & >/dev/null
2015-02-13 15:17:00 +01:00
: > ${ work_dir } /build.${ FUNCNAME }
msg " Done [ ${ custom } installation] ( ${ custom } -image) "
fi
2014-12-08 23:50:56 +01:00
}
2015-01-13 04:48:04 +01:00
make_image_livecd( ) {
2015-02-13 15:17:00 +01:00
if [ [ ! -e ${ work_dir } /build.${ FUNCNAME } ] ] ; then
2015-05-12 19:56:56 +02:00
msg "Prepare [livecd installation] (livecd-image)"
2015-02-13 15:17:00 +01:00
local path = " ${ work_dir } /livecd-image "
mkdir -p ${ path }
umount_image_handler
if [ [ -n " ${ custom } " ] ] ; then
aufs_mount_custom_image " ${ path } "
aufs_append_root_image " ${ path } "
else
aufs_mount_root_image " ${ path } "
fi
2015-05-11 18:31:41 +02:00
make_chroot " ${ path } " " ${ packages } "
2015-05-11 23:32:40 +02:00
clean_up_image " ${ path } "
2015-02-13 15:17:00 +01:00
pacman -Qr " ${ path } " > " ${ path } /livecd-image-pkgs.txt "
copy_overlay_livecd " ${ path } "
# copy over setup helpers and config loader
copy_livecd_helpers " ${ path } /opt/livecd "
copy_startup_scripts " ${ path } /usr/bin "
configure_livecd_image " ${ path } "
2015-05-10 23:09:36 +02:00
${ is_custom_pac_conf } && clean_pacman_conf " ${ path } "
2015-02-13 15:17:00 +01:00
# Clean up GnuPG keys?
rm -rf " ${ path } /etc/pacman.d/gnupg "
umount_image_handler
2015-03-18 11:39:21 +01:00
find ${ path } -name '.wh.*' -delete & >/dev/null
2015-02-13 15:17:00 +01:00
: > ${ work_dir } /build.${ FUNCNAME }
msg "Done [livecd-image]"
2014-12-08 23:50:56 +01:00
fi
2014-12-15 23:12:04 +01:00
}
2015-01-13 04:48:04 +01:00
make_image_xorg( ) {
2015-02-13 15:17:00 +01:00
if [ [ ! -e ${ work_dir } /build.${ FUNCNAME } ] ] ; then
msg "Prepare [pkgs-image]"
local path = " ${ work_dir } /pkgs-image "
mkdir -p ${ path } /opt/livecd/pkgs
umount_image_handler
if [ [ -n " ${ custom } " ] ] ; then
aufs_mount_custom_image " ${ path } "
aufs_append_root_image " ${ path } "
else
aufs_mount_root_image " ${ path } "
fi
download_to_cache " ${ path } " " ${ cache_dir_xorg } " " ${ packages_xorg } "
copy_cache_xorg
if [ [ -n " ${ packages_xorg_cleanup } " ] ] ; then
for xorg_clean in ${ packages_xorg_cleanup } ; do
rm ${ path } /opt/livecd/pkgs/${ xorg_clean }
done
fi
cp ${ PKGDATADIR } /pacman-gfx.conf ${ path } /opt/livecd
rm -r ${ path } /var
make_repo " ${ path } /opt/livecd/pkgs/gfx-pkgs " " ${ path } /opt/livecd/pkgs "
configure_xorg_drivers " ${ path } "
umount_image_handler
2015-03-18 11:39:21 +01:00
find ${ path } -name '.wh.*' -delete & >/dev/null
2015-02-13 15:17:00 +01:00
: > ${ work_dir } /build.${ FUNCNAME }
msg "Done [pkgs-image]"
2014-12-11 07:36:41 +01:00
fi
2014-12-08 23:50:56 +01:00
}
2015-01-13 04:48:04 +01:00
make_image_lng( ) {
2015-02-13 15:17:00 +01:00
if [ [ ! -e ${ work_dir } /build.${ FUNCNAME } ] ] ; then
msg "Prepare [lng-image]"
local path = " ${ work_dir } /lng-image "
mkdir -p ${ path } /opt/livecd/lng
umount_image_handler
if [ [ -n " ${ custom } " ] ] ; then
aufs_mount_custom_image " ${ path } "
aufs_append_root_image " ${ path } "
else
aufs_mount_root_image " ${ path } "
fi
if [ [ -n ${ packages_lng_kde } ] ] ; then
download_to_cache " ${ path } " " ${ cache_dir_lng } " " ${ packages_lng } ${ packages_lng_kde } "
copy_cache_lng
else
download_to_cache " ${ path } " " ${ cache_dir_lng } " " ${ packages_lng } "
copy_cache_lng
fi
if [ [ -n " ${ packages_lng_cleanup } " ] ] ; then
for lng_clean in ${ packages_lng_cleanup } ; do
rm ${ path } /opt/livecd/lng/${ lng_clean }
done
fi
cp ${ PKGDATADIR } /pacman-lng.conf ${ path } /opt/livecd
rm -r ${ path } /var
make_repo ${ path } /opt/livecd/lng/lng-pkgs ${ path } /opt/livecd/lng
umount_image_handler
2015-03-18 11:39:21 +01:00
find ${ path } -name '.wh.*' -delete & >/dev/null
2015-02-13 15:17:00 +01:00
: > ${ work_dir } /build.${ FUNCNAME }
msg "Done [lng-image]"
2014-12-08 23:50:56 +01:00
fi
}
2014-12-11 22:46:11 +01:00
2015-01-13 04:48:04 +01:00
make_image_boot( ) {
2015-02-13 15:17:00 +01:00
if [ [ ! -e ${ work_dir } /build.${ FUNCNAME } ] ] ; then
2015-03-05 10:54:09 +01:00
msg " Prepare [ ${ iso_name } /boot] "
local path_iso = " ${ work_dir } /iso/ ${ iso_name } /boot "
2015-02-13 15:17:00 +01:00
mkdir -p ${ path_iso } /${ arch }
cp ${ work_dir } /root-image/boot/memtest86+/memtest.bin ${ path_iso } /${ arch } /memtest
2015-03-05 10:54:09 +01:00
cp ${ work_dir } /root-image/boot/vmlinuz* ${ path_iso } /${ arch } /${ iso_name }
2015-02-13 15:17:00 +01:00
local path = " ${ work_dir } /boot-image "
mkdir -p ${ path }
umount_image_handler
if [ [ -n " ${ custom } " ] ] ; then
aufs_mount_custom_image " ${ path } "
aufs_append_root_image " ${ path } "
else
aufs_mount_root_image " ${ path } "
fi
2015-05-15 23:52:29 +02:00
copy_initcpio " ${ path } " || die "Failed to copy initcpio."
2015-02-13 15:17:00 +01:00
gen_boot_image " ${ path } "
2015-03-05 10:54:09 +01:00
mv ${ path } /boot/${ iso_name } .img ${ path_iso } /${ arch } /${ iso_name } .img
2015-04-17 08:57:55 +02:00
if [ [ -f ${ path } /boot/intel-ucode.img ] ] ; then
cp ${ path } /boot/intel-ucode.img ${ path_iso } /intel_ucode.img
cp ${ path } /usr/share/licenses/intel-ucode/LICENSE ${ path_iso } /intel_ucode.LICENSE
fi
2015-02-13 15:17:00 +01:00
umount_image_handler
rm -R ${ path }
: > ${ work_dir } /build.${ FUNCNAME }
2015-03-05 10:54:09 +01:00
msg " Done [ ${ iso_name } /boot] "
2015-02-13 15:17:00 +01:00
fi
2014-12-08 23:50:56 +01:00
}
# Prepare /EFI
make_efi( ) {
2015-02-13 15:17:00 +01:00
if [ [ ! -e ${ work_dir } /build.${ FUNCNAME } ] ] ; then
2015-03-05 10:54:09 +01:00
msg " Prepare [ ${ iso_name } /boot/EFI] "
2015-02-13 15:17:00 +01:00
local path_iso = " ${ work_dir } /iso "
local path_efi = " ${ path_iso } /EFI "
mkdir -p ${ path_efi } /boot
2015-03-04 10:42:15 +01:00
copy_efi_loaders " ${ work_dir } /root-image " " ${ path_efi } /boot "
2015-02-13 15:17:00 +01:00
mkdir -p ${ path_iso } /loader/entries
2015-03-04 00:40:44 +01:00
write_loader_conf " ${ path_iso } /loader "
write_efi_shellv1_conf " ${ path_iso } /loader/entries "
write_efi_shellv2_conf " ${ path_iso } /loader/entries "
write_usb_conf " ${ path_iso } /loader/entries "
write_usb_nonfree_conf " ${ path_iso } /loader/entries "
2015-02-18 04:28:11 +01:00
copy_efi_shells " ${ path_efi } "
2015-02-13 15:17:00 +01:00
: > ${ work_dir } /build.${ FUNCNAME }
2015-03-05 10:54:09 +01:00
msg " Done [ ${ iso_name } /boot/EFI] "
2015-02-13 15:17:00 +01:00
fi
2014-12-08 23:50:56 +01:00
}
# Prepare kernel.img::/EFI for "El Torito" EFI boot mode
make_efiboot( ) {
2015-02-13 15:17:00 +01:00
if [ [ ! -e ${ work_dir } /build.${ FUNCNAME } ] ] ; then
2015-03-05 10:54:09 +01:00
msg " Prepare [ ${ iso_name } /iso/EFI] "
2015-02-13 15:17:00 +01:00
local path_iso = " ${ work_dir } /iso "
mkdir -p ${ path_iso } /EFI/miso
2015-05-06 21:05:12 +02:00
truncate -s ${ efi_part_size } ${ path_iso } /EFI/miso/${ iso_name } .img
2015-03-05 10:54:09 +01:00
mkfs.vfat -n MISO_EFI ${ path_iso } /EFI/miso/${ iso_name } .img
2015-02-13 15:17:00 +01:00
mkdir -p ${ work_dir } /efiboot
2015-03-05 10:54:09 +01:00
mount ${ path_iso } /EFI/miso/${ iso_name } .img ${ work_dir } /efiboot
2015-02-13 15:17:00 +01:00
local path_efi = " ${ work_dir } /efiboot/EFI "
mkdir -p ${ path_efi } /miso
2015-03-05 10:54:09 +01:00
copy_boot_images " ${ path_iso } / ${ iso_name } /boot " " ${ path_efi } /miso "
2015-02-13 15:17:00 +01:00
mkdir -p ${ path_efi } /boot
2015-03-04 10:42:15 +01:00
copy_efi_loaders " ${ work_dir } /root-image " " ${ path_efi } /boot "
2015-03-04 01:43:47 +01:00
local efi_loader = ${ work_dir } /efiboot/loader
mkdir -p ${ efi_loader } /entries
write_loader_conf " ${ efi_loader } "
write_efi_shellv1_conf " ${ efi_loader } /entries "
write_efi_shellv2_conf " ${ efi_loader } /entries "
write_dvd_conf " ${ efi_loader } /entries "
write_dvd_nonfree_conf " ${ efi_loader } /entries "
2015-03-04 10:42:15 +01:00
copy_efi_shells " ${ path_efi } "
2015-02-13 15:17:00 +01:00
umount ${ work_dir } /efiboot
: > ${ work_dir } /build.${ FUNCNAME }
2015-03-05 10:54:09 +01:00
msg " Done [ ${ iso_name } /iso/EFI] "
2015-02-13 15:17:00 +01:00
fi
2014-12-08 23:50:56 +01:00
}
# Prepare /isolinux
make_isolinux( ) {
2015-02-13 15:17:00 +01:00
if [ [ ! -e ${ work_dir } /build.${ FUNCNAME } ] ] ; then
2015-03-05 10:54:09 +01:00
msg " Prepare [ ${ iso_name } /iso/isolinux] "
2015-03-04 13:11:50 +01:00
local path = ${ work_dir } /iso/isolinux
mkdir -p ${ path }
cp -a --no-preserve= ownership isolinux/* ${ path }
write_isolinux_cfg " ${ path } "
2015-03-04 21:38:46 +01:00
write_isolinux_msg " ${ path } "
2015-02-13 15:17:00 +01:00
if [ [ -e isolinux-overlay ] ] ; then
2015-03-04 13:11:50 +01:00
msg2 "isolinux overlay found. Overwriting files ..."
cp -a --no-preserve= ownership isolinux-overlay/* ${ path }
update_isolinux_cfg " ${ path } "
2015-03-04 21:38:46 +01:00
update_isolinux_msg " ${ path } "
2015-02-13 15:17:00 +01:00
fi
2015-03-04 13:11:50 +01:00
copy_isolinux_bin " ${ work_dir } /root-image " " ${ path } "
2015-02-13 15:17:00 +01:00
: > ${ work_dir } /build.${ FUNCNAME }
2015-03-05 10:54:09 +01:00
msg " Done [ ${ iso_name } /iso/isolinux] "
2015-02-13 15:17:00 +01:00
fi
2014-12-08 23:50:56 +01:00
}
make_isomounts( ) {
2015-02-13 15:17:00 +01:00
if [ [ ! -e ${ work_dir } /build.${ FUNCNAME } ] ] ; then
msg "Creating [isomounts]"
2015-03-05 10:54:09 +01:00
write_isomounts " ${ work_dir } /iso/ ${ iso_name } /isomounts "
2015-02-13 15:17:00 +01:00
: > ${ work_dir } /build.${ FUNCNAME }
msg "Done creating [isomounts]"
fi
2014-12-08 23:50:56 +01:00
}
2015-01-29 00:17:15 +01:00
# $1: file name
load_pkgs( ) {
2015-02-13 15:17:00 +01:00
msg3 " Loading Packages: [ $1 ] ... "
if [ [ " ${ arch } " = = "i686" ] ] ; then
2015-03-05 10:54:09 +01:00
packages = $( sed "s|#.*||g" " $1 " | sed "s| ||g" | sed "s|>dvd.*||g" | sed "s|>blacklist.*||g" | sed "s|>x86_64.*||g" | sed "s|>i686||g" | sed " s|KERNEL| $kernel |g " | sed ':a;N;$!ba;s/\n/ /g' )
2015-02-13 15:17:00 +01:00
elif [ [ " ${ arch } " = = "x86_64" ] ] ; then
2015-03-05 10:54:09 +01:00
packages = $( sed "s|#.*||g" " $1 " | sed "s| ||g" | sed "s|>dvd.*||g" | sed "s|>blacklist.*||g" | sed "s|>i686.*||g" | sed "s|>x86_64||g" | sed " s|KERNEL| $kernel |g " | sed ':a;N;$!ba;s/\n/ /g' )
2015-02-13 15:17:00 +01:00
fi
2015-01-29 00:17:15 +01:00
}
2015-01-16 13:52:35 +01:00
load_pkgs_xorg( ) {
2015-02-13 15:17:00 +01:00
msg3 "Loading Packages: [Packages-Xorg] ..."
if [ [ " ${ arch } " = = "i686" ] ] ; then
2015-03-05 10:54:09 +01:00
packages_xorg = $( sed "s|#.*||g" Packages-Xorg | sed "s| ||g" | sed "s|>dvd.*||g" | sed "s|>blacklist.*||g" | sed "s|>cleanup.*||g" | sed "s|>x86_64.*||g" | sed "s|>i686||g" | sed "s|>free_x64.*||g" | sed "s|>free_uni||g" | sed "s|>nonfree_x64.*||g" | sed "s|>nonfree_uni||g" | sed " s|KERNEL| $kernel |g " | sed ':a;N;$!ba;s/\n/ /g' )
2015-02-13 15:17:00 +01:00
elif [ [ " ${ arch } " = = "x86_64" ] ] ; then
2015-03-05 10:54:09 +01:00
packages_xorg = $( sed "s|#.*||g" Packages-Xorg | sed "s| ||g" | sed "s|>dvd.*||g" | sed "s|>blacklist.*||g" | sed "s|>cleanup.*||g" | sed "s|>i686.*||g" | sed "s|>x86_64||g" | sed "s|>free_x64||g" | sed "s|>free_uni||g" | sed "s|>nonfree_uni||g" | sed "s|>nonfree_x64||g" | sed " s|KERNEL| $kernel |g " | sed ':a;N;$!ba;s/\n/ /g' )
2015-02-13 15:17:00 +01:00
fi
2015-03-05 10:54:09 +01:00
packages_xorg_cleanup = $( sed "s|#.*||g" Packages-Xorg | grep cleanup | sed "s|>cleanup||g" | sed " s|KERNEL| $kernel |g " | sed ':a;N;$!ba;s/\n/ /g' )
2015-01-16 13:52:35 +01:00
}
2015-01-15 04:38:47 +01:00
2015-01-16 13:52:35 +01:00
load_pkgs_lng( ) {
2015-02-13 15:17:00 +01:00
msg3 "Loading Packages: [Packages-Lng] ..."
if [ [ " ${ arch } " = = "i686" ] ] ; then
packages_lng = $( sed "s|#.*||g" Packages-Lng | sed "s| ||g" | sed "s|>dvd.*||g" | sed "s|>blacklist.*||g" | sed "s|>cleanup.*||g" | sed "s|>x86_64.*||g" | sed "s|>i686||g" | sed "s|>kde.*||g" | sed ':a;N;$!ba;s/\n/ /g' )
elif [ [ " ${ arch } " = = "x86_64" ] ] ; then
packages_lng = $( sed "s|#.*||g" Packages-Lng | sed "s| ||g" | sed "s|>dvd.*||g" | sed "s|>blacklist.*||g" | sed "s|>cleanup.*||g" | sed "s|>i686.*||g" | sed "s|>x86_64||g" | sed "s|>kde.*||g" | sed ':a;N;$!ba;s/\n/ /g' )
fi
packages_lng_cleanup = $( sed "s|#.*||g" Packages-Lng | grep cleanup | sed "s|>cleanup||g" )
packages_lng_kde = $( sed "s|#.*||g" Packages-Lng | grep kde | sed "s|>kde||g" | sed ':a;N;$!ba;s/\n/ /g' )
2015-01-16 13:52:35 +01:00
}
2015-01-15 04:38:47 +01:00
2015-05-06 23:03:08 +02:00
check_chroot_version( ) {
2015-05-11 21:29:46 +02:00
[ [ -f ${ work_dir } /root-image/.manjaro-tools ] ] && local chroot_version = $( cat ${ work_dir } /root-image/.manjaro-tools)
2015-05-03 23:32:21 +02:00
if [ [ ${ version } != $chroot_version ] ] ; then
clean_first = true
fi
}
2015-05-04 21:32:04 +02:00
check_plymouth( ) {
is_plymouth = false
source mkinitcpio.conf
for h in ${ HOOKS [@] } ; do
if [ [ $h = = 'plymouth' ] ] ; then
is_plymouth = true
fi
done
}
2015-05-10 20:22:46 +02:00
check_custom_pacman_conf( ) {
if [ [ -f pacman-${ pacman_conf_arch } .conf ] ] ; then
pacman_conf = " pacman- ${ pacman_conf_arch } .conf "
is_custom_pac_conf = true
else
pacman_conf = " ${ PKGDATADIR } /pacman- ${ pacman_conf_arch } .conf "
is_custom_pac_conf = false
fi
}
2015-01-29 00:17:15 +01:00
# $1: profile
2015-01-17 19:05:18 +01:00
load_profile( ) {
2015-03-03 01:59:44 +01:00
msg3 " Profile: [ $1 ] "
2015-03-03 02:38:31 +01:00
load_profile_config 'profile.conf'
2015-02-13 15:17:00 +01:00
local files = $( ls Packages*)
for f in ${ files [@] } ; do
case $f in
Packages| Packages-Livecd| Packages-Xorg| Packages-Lng) continue ; ;
*) packages_custom = " $f " ; msg2 " Packages-Custom: $f " ; ;
esac
done
custom = ${ packages_custom #*- }
custom = ${ custom ,, }
2015-03-05 10:54:09 +01:00
iso_file = " ${ iso_name } - ${ custom } - ${ dist_release } - ${ arch } .iso "
2015-05-10 20:22:46 +02:00
check_custom_pacman_conf
2015-02-13 15:17:00 +01:00
create_args += ( -C ${ pacman_conf } )
work_dir = ${ chroots_iso } /$1 /${ arch }
2015-05-04 21:32:04 +02:00
check_plymouth
2015-05-06 23:03:08 +02:00
[ [ -d ${ work_dir } /root-image ] ] && check_chroot_version
2015-05-03 22:27:40 +02:00
}
2014-12-31 01:02:43 +01:00
compress_images( ) {
2015-02-18 04:28:11 +01:00
local timer = $( get_timer)
2015-02-13 15:17:00 +01:00
make_iso
make_checksum " ${ iso_file } "
2015-02-20 11:57:04 +01:00
msg3 " Time ${ FUNCNAME } : $( elapsed_time ${ timer } ) minutes "
2014-12-31 01:02:43 +01:00
}
2015-01-15 02:49:21 +01:00
build_images( ) {
2015-02-18 04:28:11 +01:00
local timer = $( get_timer)
2015-02-13 15:17:00 +01:00
load_pkgs "Packages"
make_image_root
if [ [ -f " ${ packages_custom } " ] ] ; then
load_pkgs " ${ packages_custom } "
make_image_custom
fi
2015-02-14 10:50:41 +01:00
if [ [ -f Packages-Livecd ] ] ; then
load_pkgs "Packages-Livecd"
make_image_livecd
fi
2015-02-13 15:17:00 +01:00
if [ [ -f Packages-Xorg ] ] ; then
load_pkgs_xorg
make_image_xorg
fi
if [ [ -f Packages-Lng ] ] ; then
load_pkgs_lng
make_image_lng
fi
make_image_boot
if [ [ " ${ arch } " = = "x86_64" ] ] ; then
make_efi
make_efiboot
fi
make_isolinux
make_isomounts
2015-02-20 11:57:04 +01:00
msg3 " Time ${ FUNCNAME } : $( elapsed_time ${ timer } ) minutes "
2014-12-31 01:02:43 +01:00
}
2015-01-15 04:38:47 +01:00
2015-05-04 01:15:52 +02:00
check_profile( ) {
2015-05-04 02:09:45 +02:00
local keyfiles = ( 'profile.conf' 'mkinitcpio.conf' 'Packages' 'Packages-Livecd' )
local keydirs = ( 'overlay' 'overlay-livecd' 'isolinux' )
2015-05-04 01:15:52 +02:00
local has_keyfiles = false has_keydirs = false
2015-05-04 02:09:45 +02:00
msg " Checking profile [ $1 ] "
2015-05-04 01:15:52 +02:00
for f in ${ keyfiles [@] } ; do
2015-05-04 01:51:45 +02:00
if [ [ -f $1 /$f ] ] ; then
2015-05-04 01:15:52 +02:00
has_keyfiles = true
2015-05-04 01:51:45 +02:00
else
has_keyfiles = false
break
2015-05-04 01:15:52 +02:00
fi
done
for d in ${ keydirs [@] } ; do
2015-05-04 01:51:45 +02:00
if [ [ -d $1 /$d ] ] ; then
2015-05-04 01:15:52 +02:00
has_keydirs = true
2015-05-04 01:51:45 +02:00
else
has_keydirs = false
break
2015-05-04 01:15:52 +02:00
fi
done
2015-05-04 02:09:45 +02:00
msg2 " has_keyfiles: ${ has_keyfiles } "
msg2 " has_keydirs: ${ has_keydirs } "
2015-05-04 01:15:52 +02:00
if ${ has_keyfiles } && ${ has_keydirs } ; then
2015-05-06 20:21:55 +02:00
msg "Profile sanity check passed."
2015-05-04 01:15:52 +02:00
else
eval $2
fi
}
2015-02-14 10:50:41 +01:00
make_profile( ) {
msg " Start building [ $1 ] "
cd $1
load_profile " $1 "
${ clean_first } && clean_chroots " ${ work_dir } "
${ clean_cache_xorg } && clean_cache " ${ cache_dir_xorg } "
${ clean_cache_lng } && clean_cache " ${ cache_dir_lng } "
if ${ iso_only } ; then
2015-03-04 10:42:15 +01:00
[ [ ! -d ${ work_dir } ] ] && die " Create images: buildiso -p ${ buildset_iso } -i "
2015-02-14 10:50:41 +01:00
compress_images
exit 1
fi
if ${ images_only } ; then
build_images
2015-03-04 10:42:15 +01:00
warning " Continue compress: buildiso -p ${ buildset_iso } -sc ... "
2015-02-14 10:50:41 +01:00
exit 1
else
build_images
compress_images
fi
cd ..
2015-02-20 11:57:04 +01:00
msg " Finished building [ $1 ] "
msg3 " Time ${ FUNCNAME } : $( elapsed_time ${ timer_start } ) minutes "
2015-01-15 04:38:47 +01:00
}
build_iso( ) {
2015-02-13 15:17:00 +01:00
if ${ is_buildset } ; then
for prof in $( cat ${ sets_dir_iso } /${ buildset_iso } .set) ; do
2015-05-04 01:15:52 +02:00
check_profile " $prof " "break"
2015-02-14 10:50:41 +01:00
make_profile " $prof "
2015-02-13 15:17:00 +01:00
done
else
2015-05-04 01:15:52 +02:00
check_profile " ${ buildset_iso } " 'die "Profile sanity check failed."'
2015-02-14 10:50:41 +01:00
make_profile " ${ buildset_iso } "
2015-02-13 15:17:00 +01:00
fi
2015-01-15 04:38:47 +01:00
}