Subversion Repositories ALCASAR

Compare Revisions

Ignore whitespace Rev 2944 → Rev 2943

/iso/README.md
9,13 → 9,14
How it works
------------
 
The script lists the RPMs installed on a running ALCASAR in order to create a dedicated ISO file.
Once the ISO is done, one can boot on it and install the OS normally. The ALCASAR tarball is available in /root folder.
The script lists the RPMs installed on a running ALCASAR in order to download them from Internet repository.
Then, it downloads the RPM need to create an ISO file.
Once the ISO is done, one can boot on it and install the OS normally. The ALCASAR archive is copied in /root folder
 
What it needs
-------------
 
The Mageia ISO image and ALCASAR tarball are to be placed in the `ressources` directory before running the script.
The Mageia ISO image and ALCASAR archive are to be placed in the `ressources` directory before running the script.
 
How to use
----------
25,9 → 26,9
What can be done
----------------
 
The ISO image seems to be already as light as it can be. With all the necessary packages, it weighs around 800 Mo.
The ISO image seems to be already as light as it can be. With all the necessary packages, it weighs around 800Mo.
 
Here is a list of interesting functionalities:
Here is a list of interesting functionnalities:
- if a needed RPM has not been updated, copy it from the Mageia iso file instead of download it from repository
- Use DrakX to install and configure Alcasar graphically
- Propose an automatic partition table suitable for Alcasar
/iso/build-iso.sh
45,23 → 45,26
ALCASAR_TARBALL=`ls $RESSOURCES| grep '^alcasar.*gz'`
ALCASAR_EXTRACTED_DIR=$(echo $ALCASAR_TARBALL | rev | cut -d '.' -f 3- | rev)
ALCASAR_VERSION=`echo $ALCASAR_EXTRACTED_DIR | cut -d"-" -f2`
TMP_DIR=/var/tmp
MAGEIA_NEW_DIR=$TMP_DIR/mageia_new
MAGEIA_OFFICIAL_DIR=$TMP_DIR/mageia_official
MAGEIA_OFFICIAL_DIR_EFI=$TMP_DIR/mageia_official_efi
MAGEIA_NEW_DIR=/var/tmp/mageia_new
MAGEIA_OFFICIAL_DIR=/var/tmp/mageia_official
MAGEIA_OFFICIAL_DIR_EFI=/var/tmp/mageia_official_efi
coreDir=${MAGEIA_OFFICIAL_DIR}/${ARCH}/media/core
nonFreeDir=${MAGEIA_OFFICIAL_DIR}/${ARCH}/media/nonfree
coreDirNew=${MAGEIA_NEW_DIR}/${ARCH}/media/core/
nonFreeDirNew=${MAGEIA_NEW_DIR}/${ARCH}/media/nonfree
plopFilePath=${MAGEIA_NEW_DIR}/${ARCH}/media/plop.idx
ISO_OUT=/var/tmp/iso
RPM_DIR=/var/tmp/rpms
 
 
# Drake installer
INSTALLER_DIR="${MAGEIA_NEW_DIR}/${ARCH}/install/alcasar"
EFI_GRUB_CFG="${MAGEIA_NEW_DIR}/boot/grub2/grub.cfg"
ADVERT_DIR="${MAGEIA_NEW_DIR}/${ARCH}/install/extra/advertising"
AUTO_INSTALL_CFG=$TMP_DIR/auto_inst.cfg.pl
AUTO_INSTALL_CFG="${ISO_OUT}/auto_inst.cfg.pl"
 
# RPMs needed during an install stage
BASE_RPM_LIST="acpi acpid alsa-utils aoss arp-scan basesystem bash-completion coreutils-doc cpupower curl dhcp-client dmraid dnf dnf-plugins-core dosfstools dracut drakx-net-text gpm grub2 grub2-efi grub2-mageia-theme harddrake hdparm hexedit info ldetect lftp lib64alsa-plugins lib64glib-networking-gnutls locales-en locales-fr lsof lvm2 mageia-theme-Default man-db man-pages microcode microcode_ctl mtools ntfs-3g numlock os-prober p11-kit perl-Hal-Cdroms plymouth procmail python3 python3-dbus radeon-firmware ralink-firmware rtlwifi-firmware sharutils shorewall-ipv6 strace sysfsutils tmpwatch tree vim-minimal vnstat xdg-user-dirs-gtk sudo socat mandi mandi-ifw"
BASE_RPM_LIST="acpi acpid alsa-utils aoss arp-scan basesystem bash-completion coreutils-doc cpupower curl dhcp-client dmraid dnf dnf-plugins-core dosfstools dracut drakx-net-text gpm grub2 grub2-efi grub2-mageia-theme harddrake hdparm hexedit info iwlwifi-agn-ucode ldetect lftp lib64alsa-plugins lib64glib-networking-gnutls locales-en locales-fr lsof lvm2 mageia-theme-Default man-db mandi-ifw man-pages microcode microcode_ctl mtools ntfs-3g numlock os-prober p11-kit perl-Hal-Cdroms plymouth procmail python3 python3-dbus radeon-firmware ralink-firmware rtlwifi-firmware sharutils shorewall-ipv6 strace sysfsutils tmpwatch tree vim-minimal vnstat xdg-user-dirs-gtk sudo socat"
 
#######################
###### Main ######
72,21 → 75,24
[[ $ISO_IN == "" ]] && errorExit "No Mageia iso file in $RESSOURCES"
[[ ! -f "$RESSOURCES/auto_inst.cfg.pl_template" ]] && errorExit "No auto_inst.cfg.pl_template file in $RESSOURCES"
[[ $ALCASAR_TARBALL == "" ]] && errorExit "No ALCASAR tarball file in $RESSOURCES"
 
for directory in $MAGEIA_NEW_DIR $MAGEIA_OFFICIAL_DIR $MAGEIA_OFFICIAL_DIR_EFI
for directory in $MAGEIA_NEW_DIR $MAGEIA_OFFICIAL_DIR $MAGEIA_OFFICIAL_DIR_EFI $ISO_OUT $RPM_DIR
do
[ -d $directory ] || mkdir -p $directory
done
printBold "Mageiar will be build with Mageia-$MAGEIA_VERSION-$ARCH and $ALCASAR_EXTRACTED_DIR"
 
# Retrieve list of installed RPM
ALCASAR_RPM_LIST="$(dnf list installed | cut -d " " -f1 | rev | cut -d "." -f2- | rev | grep -Ev 'coova-chilli|gammu|lib64gammu8|ipt-netflow|nfdump|wkhtmltopdf' | tail -n +2 | tr '\n' ' ')"
# agregate & clean rpm list
RPM_LIST=$(echo $BASE_RPM_LIST $ALCASAR_RPM_LIST | sed "s/ /\n/g" | sort | uniq | sed "s/\n/ /g")
# Retrieve list of Alcasar dependencies
tar -xf $RESSOURCES/$ALCASAR_TARBALL -C /tmp/ || errorExit "could not extract alcasar tar archive"
alcasarRpmList="$(grep -oP "(?<=PACKAGES=\").*?(?=\")" /tmp/$ALCASAR_EXTRACTED_DIR/scripts/alcasar-rpm.sh)"
alcasarKernel="$(grep -oP "(?<=KERNEL=\").*?(?=\")" /tmp/$ALCASAR_EXTRACTED_DIR/scripts/alcasar-rpm.sh)"
alcasarRpmList="$alcasarRpmList $alcasarKernel"
 
# Make clean rpm list
rpmList=$(echo $BASE_RPM_LIST $alcasarRpmList | sed "s/ /\n/g" | sort | uniq | sed "s/\n/ /g")
 
# Insert list into AUTO_INSTALL_CFG
formattedList=$(echo $RPM_LIST | sed "s/[^ ]*/\'\0\'/g" | sed "s/ /,\n/g")
cp -f $RESSOURCES/auto_inst.cfg.pl_template $AUTO_INSTALL_CFG
formattedList=$(echo $rpmList | sed "s/[^ ]*/\'\0\'/g" | sed "s/ /,\n/g" | sed "/kernel-server/d")
cp $RESSOURCES/auto_inst.cfg.pl_template $AUTO_INSTALL_CFG -f
insertLineNumber=$(grep -n "'default_packages' => " "$AUTO_INSTALL_CFG" | cut -d ':' -f1)
fileTop=$(head -n "+$insertLineNumber" "$AUTO_INSTALL_CFG")
fileBottom=$(tail -n "+$insertLineNumber" "$AUTO_INSTALL_CFG" | tail -n +2)
95,16 → 101,16
echo "$formattedList" >> "$AUTO_INSTALL_CFG"
echo "$fileBottom" >> "$AUTO_INSTALL_CFG"
 
# Installing tools to create the iso file
printBold "Installing ISO building tools"
# Installing tools to create the iso
printBold "Installing necessary tools"
dnf install 'dnf-command(download)' -y || errorExit "could not install necessary packages"
#dnf install 'dnf-command(config-manager)' -y || errorExit "could not install necessary packages"
#dnf config-manager --set-enabled mageia-x86_64-nonfree updates-x86_64-nonfree || errorExit "could not install necessary packages"
dnf install -y lftp wget cdrkit-genisoimage xorriso rpmtools syslinux || errorExit "could not install necessary packages"
 
# Mounting the ISO image
printBold "Mounting the image"
if [ `mount |grep $MAGEIA_OFFICIAL_DIR | wc -l` -eq 0 ]; then # if not already mounted
mount -o ro,loop $RESSOURCES/$ISO_IN $MAGEIA_OFFICIAL_DIR || errorExit "failed mounting $ISO_IN."
fi
mount -o ro,loop $RESSOURCES/$ISO_IN $MAGEIA_OFFICIAL_DIR || errorExit "failed mounting $ISO_IN."
sleep 1 # wait for mounting process
[ -d ${MAGEIA_OFFICIAL_DIR}/x86_64 ] || umount $MAGEIA_OFFICIAL_DIR || errorExit "The ISO file isn't in the target architecture ($ARCH)"
 
117,30 → 123,51
mkdir -p ${MAGEIA_NEW_DIR}/${ARCH}/{media/{core,nonfree},install/alcasar}
 
# Adding Alcasar image advert to the installer
cp -f $RESSOURCES/install_slideshow/* "$ADVERT_DIR" || errorExit "could not copy custom slideshow to $ADVERT_DIR"
cp -f $RESSOURCES/install_slideshow/* "$ADVERT_DIR"
 
# Create the installed RPM list excluding those brought with alcasar archive (they aren't in repository)
nbInstalled=$(echo $RPM_LIST | wc -w)
total=`echo $RPM_LIST | wc -w`
installedList="$(dnf list installed | cut -d ' ' -f1 | rev | cut -d . -f2- | rev | grep -Ev 'coova-chilli|gammu|lib64gammu8|ipt-netflow|nfdump|wkhtmltopdf' | tail -n +2 | tr '\n' ' ')"
nbInstalled=$(echo $installedList | wc -w)
rpmList="$installedList $BASE_RPM_LIST"
total=`echo $rpmList | wc -w`
count=0
# Copying the RPM in core and clearing the plop.idx file
echo "Copying $total RPMS in ISO ..."
for rpm in ${RPM_LIST}; do
echo "Copying RPMS in ISO ..."
echo /dev/null > ${plopFilePath}
for rpm in ${rpmList}; do
let percent="${count} * 100 / ${total}"
dnf download --downloaddir $coreDirNew $rpm 1> /dev/null || errorExit "could not download $rpm"
if [[ $count -lt $nbInstalled ]] ; then
dnf download -y --downloadonly --downloaddir $coreDirNew $rpm 1> /dev/null || errorExit "could not download $rpm"
else
dnf install -y --downloadonly --downloaddir $coreDirNew $rpm 1> /dev/null || errorExit "could not download $rpm"
fi
printProgress ${percent}
count=$(expr ${count} + 1)
done
echo "STOP"; exit 1
 
# Sorting the plop file alphabetically
cat ${plopFilePath} | sort > /tmp/tmpFileMageia && mv /tmp/tmpFileMageia ${plopFilePath}
 
# Informations
printBold "$count RPMs copied"
 
# Copying the Alcasar tarball & automatic install option into the ISO
# Downloading rpms needed by Alcasar
cd "$CURRENT_DIR"
printBold "Downloading Alcasar dependencies"
tar -xf /var/iso/$ALCASAR_TARBALL
 
# Copying the Alcasar tar to be put into the ISO
cp /var/iso/$ALCASAR_TARBALL $INSTALLER_DIR/
 
# Add automatic install options
mkdir -p $INSTALLER_DIR || errorExit "could not create directory $INSTALLER_DIR"
cp $RESSOURCES/$ALCASAR_TARBALL $INSTALLER_DIR || errorExit "could not copy $RESSOURCES/$ALCASAR_TARBALL to $INSTALLER_DIR"
cp $AUTO_INSTALL_CFG $INSTALLER_DIR || errorExit "could not copy $AUTO_INSTALL_CFG to $INSTALLER_DIR"
 
# Generating media info for core
echo "Generating media_info for core..."
genhdlist2 ${coreDirNew} --allow-empty-media --quiet
 
echo "Generating media_info for nonfree..."
genhdlist2 ${nonFreeDirNew} --allow-empty-media --quiet
 
170,26 → 197,35
# xorriso -indev Mageia-7-x86_64.iso -report_el_torito as_mkisofs
cd ${MAGEIA_NEW_DIR} && xorriso -as mkisofs \
-V 'Mageia-7.1-x86_64' \
--grub2-mbr --interval:local_fs:0s-15s:zero_mbrpt:${ISO_IN} \
-partition_cyl_align off \
-partition_offset 0 \
--mbr-force-bootable \
-append_partition 2 0xef --interval:local_fs:8785156d-8793347d::${ISO_IN} \
-iso_mbr_part_type 0x00 \
-c 'boot.catalog' \
-b 'boot/grub2/eltorito.img' \
-c '/boot.catalog' \
-b '/boot/grub2/eltorito.img' \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
--grub2-boot-info \
-eltorito-alt-boot \
-e '--interval:appended_partition_2_start_2196289s_size_8192d:all::' \
-no-emul-boot \
-boot-load-size 8192 \
-o ${TMP_DIR}/${newIsoName} .
-o ${CURRENT_DIR}/${newIsoName} .
 
 
# Unmounting & Removing temporary dir
echo "Umounting..."
umount $MAGEIA_OFFICIAL_DIR
for directory in $MAGEIA_NEW_DIR $MAGEIA_OFFICIAL_DIR $MAGEIA_OFFICIAL_DIR_EFI
for directory in $MAGEIA_NEW_DIR $MAGEIA_OFFICIAL_DIR $MAGEIA_OFFICIAL_DIR_EFI $ISO_OUT $RPM_DIR
do
[ -d $directory ] && rm -rf $directory
done
 
mv ${CURRENT_DIR}/${newIsoName} /var/iso/
 
# Finished
rm -f "$AUTO_INSTALL_CFG"
echo "Done."
/iso/ressources/auto_inst.cfg.pl_template
1,15 → 1,16
#!/usr/bin/perl -cw
#
# Configuration file written by :
# * Hamza ESSAYEGH (Querdos) Laurent Roux Rexy
# * Hamza ESSAYEGH (Querdos) Laurent Roux
#
# /!\ Before putting this file in the iso, check the syntax with
# `perl -cw auto_inst.cfg.pl`
# /!\ The package list will be generated in the iso creation script
# See https://wiki.mageia.org/en/Auto_inst for more informations
 
$o = {
# Interactive steps option
# http://members.shaw.ca/mandrake/ -> section Replay Steps for
# more informations
'interactiveSteps' => [
# Select language(s) support to be installed.
'selectLanguage',
69,14 → 70,12
'clearall' => 1
},
 
'enabled_media' => [
'Core Release (Installer)',
'Nonfree Release (Installer)'
],
'X' => { 'disabled' => 1 },
'enabled_media' => [
'Core Release (Installer)',
'Nonfree Release (Installer)'
],
 
 
# Post installation script, executed as root in the installed
# environments and not inside the DrakX installation program
'postInstallNonRooted' => "
91,16 → 90,22
 
# Allow root shell login
rm -f /mnt/etc/securetty
 
# Install server kernel
urpmi --root /mnt/ --auto /tmp/media/x86_64/media/core/kernel-server-4*.rpm --no-verify-rpm
 
# Lock kernel version (exclude from further updates)
echo '/^kernel/' > /mnt/etc/urpmi/skip.list
 
# Place ISO_INSTALL flag
touch /mnt/root/iso_install
",
 
'postInstall' => "
# synchro des DD en cas d'un RAID
dracut -f -H
# synchro horloge
hwclock --systohc --utc
#sert à la synchro des DD en cas d'un RAID
dracut -f -H
#pour synchro horloge
hwclock --systohc --utc
",