#!/bin/bash # Copyright (C) 2004-2010 Centro de Computacao Cientifica e Software Livre # Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR # # This file is part of le-base # # le-base is free software; you can redistNameribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distNameributed 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. #------------------------------------------------------------------------------ export DEBIAN_FRONTEND=noninteractive editDistro() { log "Editing $DISTROBASE ..." initFiles # Edits live image for file in $(ls "$SCRIPTSDIR"); do if [ -x "$SCRIPTSDIR/$file" ] && egrep -q '^[0-9]{2}-[a-z-]+' <<< "$file"; then echo "$file" #read -p "PAUSADO ..." if ! "$SCRIPTSDIR/$file" $1; then log "Error: While running the "$SCRIPTSDIR/$file"" return 1 fi fi done return 0 } regenerateManifest() { log "Regenerating manifest list ..." chmod +w "$CDDIR"/casper/filesystem.manifest chroot "$CHROOTDIR" dpkg-query -W --showformat='${Package} ${Version}\n' > \ "$CDDIR"/casper/filesystem.manifest if [ "$DISTRO" == "Linux_Educacional_4.0" ]; then cp "$CDDIR"/casper/filesystem.manifest \ "$CDDIR"/casper/filesystem.manifest-desktop for package in $(cat "$INSTLIST" | cut -d '=' -f1 | grep -v "^#"); do sed -i "/$package/d" "$CDDIR"/casper/filesystem.manifest-desktop done for pkg in $(cat "$INSTLIST"-desktop | cut -d'=' -f1 | grep -v "^#"); do ( printf "$pkg "; chroot "$CHROOTDIR" apt-cache showpkg "$pkg" | grep "^[0-9]" | tail -n1 | cut -d ' ' -f1 ) >> \ "$CDDIR"/casper/filesystem.manifest-desktop done elif [ "$DISTRO" == "Linux_Educacional_5" ]; then cat "$INSTLIST"-remove >> "$CDDIR"/casper/filesystem.manifest-remove fi return 0 } compressFS() { log "Compressing squash image ..." if [ -n "$(cat $MOUNTLIST)" ]; then log "Error to umount $(cat $MOUNTLIST | tr '\n' ' ')" return 1 fi rm -f "$CDDIR"/casper/filesystem.squashfs mksquashfs "$CHROOTDIR" "$CDDIR"/casper/filesystem.squashfs -comp gzip du -sx --block-size=1 "$CHROOTDIR" | cut -f1 > "$CDDIR"/casper/filesystem.size return 0 } extractISO() { log "Extracting $1 ..." initFiles mount -o loop $1 "$TMP"/"$DISTROBASE" && log "$TMP/$DISTROBASE" >> "$MOUNTLIST" rsync --exclude=/casper/filesystem.squashfs -a "$TMP"/"$DISTROBASE"/ "$CDDIR"\ || return 1 unsquashfs "$TMP"/"$DISTROBASE"/casper/filesystem.squashfs || return 1 mv -f "$SQUASHIMAGE" "$CHROOTDIR" || return 1 umount "$TMP"/"$DISTROBASE" && removeMountList "$TMP"/"$DISTROBASE" return 0 } createISO() { log "Generating live ISO ..." # Calculates MD5 cd "$CDDIR"/ rm -f md5sum.txt find -type f -print0 | xargs -0 md5sum | egrep -v 'isolinux/boot.cat|md5sum.txt' | tee md5sum.txt # Generates ISO file genisoimage -D -r -V "$DISTRO" -cache-inodes -J -l -b \ isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size \ 4 -boot-info-table -o "$DISTROISO".iso "$CDDIR" log "Generating iso checksum ..." md5sum "$DISTROISO.iso" > "$DISTROISO.md5" # Move generated file, if an output was specified if test -n "$OUTPUT"; then mv "$DISTROISO.iso" "$OUTPUT" mv "$DISTROISO.md5" "$OUTPUT.md5" fi } initFiles() { mkdir -p "$TMP" || return 1 mkdir -p "$TMP"/"$DISTROBASE" "$CDDIR" "$LOGDIR" || return 1 touch "$MOUNTLIST" || return 1 } replaceIso() { if [ -e "$CDDIR" ]; then log "Want to replace the current image? [y/N]" read ack if [ "$ack" == "y" ]; then log "Cleaning temporary directory ..." rm -rf "$TMP"/* "$CHROOTDIR" "$CDDIR" "$SQUASHIMAGE" || return 6 #$0 --clean --dist $1 || exit 6 else log "Extraction canceled!" return 1 fi fi return 0 } log() { if "$LOGINFO" && [ "$1" ]; then echo "$@" | tee -a "$LOGFILE" logger -t le-gera-iso "$@" elif [ "$1" ]; then echo "$@" else tee -a "$LOGFILE" fi } #------------------------------------------------------------------------------ # Sets configuration variables DIR=$(readlink -f "$0") . "`dirname "$(echo "$DIR")"`/common.sh" nextDist=false nextAll=false iso=false clean=false all=false dist=false edit=false host=false mirror=false nextHost=false nextMirror=false output=false for opc in "$@"; do case "$opc" in --dist) dist=true nextDist=true ;; --all) all=true nextAll=true ;; --edit) edit=true ;; --iso) iso=true ;; --clean) clean=true ;; --output) output=true ;; -bash) bash exit 0 ;; --host) host=true nextHost=true ;; --mirror) mirror=true nextMirror=true ;; *) $nextHost && export LEHOST="$opc" && nextHost=false $nextMirror && export LEMIRROR="$opc" && nextMirror=false $nextDist && distName="$opc" && nextDist=false $nextAll && baseIso="$opc" && nextAll=false $output && OUTPUT="$opc" && output=false esac done if (($iso || $clean || $all || $edit) && (! $dist || [ -z "$distName" ])) || !($iso || $clean || $all || $edit); then echo "Use: $0 OPTION [SRC_IMAGE] --dist DIST_RELEASE" echo " OPTION:" echo " --clean Cleaning temporary files and old iso" echo " --iso Uses old temporary files to generates a new LE iso" echo " --all Generate a new LE iso using the SRC_IMAGE file of base iso" echo " --edit Executes the edit scripts using old temporary files" echo " --output Specifies the path to the generated iso file" exit 2 fi loadConf "$PREFIX/conf/$distName/create-iso.conf" $distName #------------------------------------------------------------------------------ # Check ambient integrity LOGDIR="$LOGDIR" LOGFILE="$LOGDIR/$(date +"%y-%m-%d_%T_")`basename "$(echo "$distName")"`_$LEMIRROR.log" checkUser || exit 1 initFiles || exit 2 checkMountedFS || exit 7 checkOutput "$OUTPUT" || exit 8 #------------------------------------------------------------------------------ # Init routines if $iso; then if ! regenerateManifest | log; then log "Error to regenarate manifest file" exit 3 fi if ! compressFS | log; then log "Error to create squash image" exit 4 fi if ! createISO | log; then log "Error to create ISO image" exit 5 fi elif $edit; then if ! editDistro $distName | log; then log "Error to edit Squash image" exit 2 fi elif $clean; then log "Cleaning temporary directory ..." rm -rf "$TMP"/* "$CHROOTDIR" "$CDDIR" "$SQUASHIMAGE" || exit 6 elif $all; then replaceIso $distName || exit 6 if ! extractISO $baseIso | log; then log "Error to extract $2" exit 1 fi if ! editDistro $distName | log; then log "Error to edit Squash image" exit 2 fi if ! regenerateManifest | log; then log "Error to regenarate manifest file" exit 3 fi if ! compressFS | log; then log "Error to create squash image" exit 4 fi if ! createISO | log; then log "Error to create ISO image" exit 5 fi fi #/root/teste_ram/rsync.sh exit 0