#!/bin/bash # # JaM Builder # # (C) 2004 Yasushi kinneko Date kinneko@po.incl.ne.jp # # "JaM Builder" is the script which reconstructs and # remaster ISO image for 'MEPIS' Linux Distribution. # # This script based on "YAK Builder 0.02". # (C) 2003 Yutaro Ebihara ebihara@si-linux.com # http://www.si-linux.co.jp/pub/yakbuilder/ # # the JaM Builder 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; either version 2 of the # License, or (at your option) any later version. # # the JaM Builder 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. # # Jan 02 2004 v.0.01 1st relaease # Jan 16 2004 v.0.02 update : add isocopy # Jan 27 2004 v.0.03 update : add mkswap, jamver # Feb 07 2004 v.0.04 update : add change_ja_fdimg # Apr 21 2004 v.0.05 update : add make_works # Apr 26 2004 v.0.06 update : some bug fixed # APNAME="JaMbuilder" VERSION=0.06 DIST_NAME="JaMEPIS" XTERM="/usr/bin/X11/xterm -title jam_chroot -bg lightpink" SOURCE_DIR=./source MASTER_DIR=./master WORK_DIR=./parts CDROM=/mnt/auto/cdrom ISO=mepis-2003.10.01.cd1.iso # -------------------------------- functions ------------------------------------ function make_works () { check_root if ! [ -d $SOURCE_DIR ]; then mkdir -p $SOURCE_DIR fi if ! [ -d $MASTER_DIR ]; then mkdir -p $MASTER_DIR fi if ! [ -d $WORK_DIR ]; then mkdir -p $WORK_DIR fi } function cdromcopy () { check_root make_works echo "copying from $CDROM to $MASTER_DIR directory....." rsync -avu --delete --progress $CDROM/* $MASTER_DIR # get cloop.o from boot.img if ! [ -d /mnt/image ]; then mkdir -p /mnt/image fi mount -o loop $CDROM/boot/boot.img /mnt/image cp /mnt/image/initrd.gz ./ umount /mnt/image gzip -d ./initrd.gz mount -o loop ./initrd /mnt/image cp /mnt/image/modules/cloop.o ./ umount /mnt/image rm ./initrd rm -r /mnt/image if ! [ -d /dev/cloop ]; then mknod /dev/cloop b 240 0 fi if ! [ -d /mnt/cloop ]; then mkdir /mnt/cloop fi insmod ./cloop.o file=$MASTER_DIR/linux/linux mount -o ro /dev/cloop /mnt/cloop echo "" echo "copying from MEPIS cloop image to $SOURCE_DIR directory....." rsync -avu --delete /mnt/cloop/* $SOURCE_DIR umount /mnt/cloop rmmod cloop rm $MASTER_DIR/linux/linux rm -r /mnt/cloop rm /dev/cloop rm ./cloop.o echo "" echo "okay finish. type 'jambuilder edit' and add or delete packages." } function isocopy () { check_root make_works # mount iso image if ! [ -d /mnt/iso ]; then mkdir -p /mnt/iso fi mount -o loop $ISO /mnt/iso echo "copying from $ISO to $MASTER_DIR directory....." rsync -avu --progress /mnt/iso/* $MASTER_DIR # get cloop.o from boot.img if ! [ -d /mnt/image ]; then mkdir -p /mnt/image fi mount -o loop /mnt/iso/boot/boot.img /mnt/image cp /mnt/image/initrd.gz ./ umount /mnt/image gzip -d ./initrd.gz mount -o loop ./initrd /mnt/image cp /mnt/image/modules/cloop.o ./ umount /mnt/image rm ./initrd rm -r /mnt/image if ! [ -f /dev/cloop ]; then mknod /dev/cloop b 240 0 fi if ! [ -d /mnt/cloop ]; then mkdir /mnt/cloop fi if ! [ -f $MASTER_DIR/linux/linux ]; then echo "[ERROR] cloop image nothing!" exit 0 else insmod ./cloop.o file=$MASTER_DIR/linux/linux mount -o ro /dev/cloop /mnt/cloop fi echo "" echo "copying from MEPIS cloop image to $SOURCE_DIR directory....." rsync -avu --delete /mnt/cloop/* $SOURCE_DIR umount /mnt/cloop rmmod cloop rm $MASTER_DIR/linux/linux rm /dev/cloop rm -r /mnt/cloop rm ./cloop.o umount /mnt/iso rm -r /mnt/iso echo "" echo "okay finish. type 'jambuilder edit' and add or delete packages." } function edit (){ check_root echo "Add or delete packages." echo "type 'exit' when you want to exit." mount -t proc proc $SOURCE_DIR/proc mv $SOURCE_DIR/etc/resolv.conf $SOURCE_DIR/etc/resolv.conf-jam cp /etc/resolv.conf $SOURCE_DIR/etc/resolv.conf if [ $DISPLAY ]; then $XTERM -e chroot $SOURCE_DIR else chroot $SOURCE_DIR fi rm $SOURCE_DIR/etc/resolv.conf mv $SOURCE_DIR/etc/resolv.conf-jam $SOURCE_DIR/etc/resolv.conf umount $SOURCE_DIR/proc } function mkcloop () { check_root chkswap if ! [ -d $SOURCE_DIR ]; then echo "ERROR! there is no $SOURCE_DIR dir" exit 1 fi if ! [ -d $MASTER_DIR ]; then echo "ERROR! there is no $MASTER_DIR dir" exit 1 fi # # set log files to zero byte # echo "clean log files" cleanup_logs change_ja_fdimg echo $DIST_NAME`date +%Y%m%d%H%M%S` > ./jamver JAMVER=`cat ./jamver` echo "$JAMVER made by $APNAME$VERSION" `date +%Y%m%d%H%M%S`> $SOURCE_DIR/etc/jamver # build JaMEPIS cloop image mkisofs -R -l -V "$JAMVER iso image" -hide-rr-moved -v \ $SOURCE_DIR | create_compressed_fs - 65536 > $MASTER_DIR/linux/linux chkswap echo "Finish!" echo "Next, type 'jambuilser mkiso'." } function cleanup_logs () { check_root find $SOURCE_DIR/var/log -exec cp /dev/null {} \; } function mkiso () { check_root chkswap if ! [ -d $MASTER_DIR ]; then echo "ERROR! there is no $MASTER_DIR dir" exit 1 fi JAMVER=`cat ./jamver` echo "$JAMVER made by $APNAME$VERSION" > $MASTER_DIR/jamver mkisofs -r -J -l -V "$JAMVER LiveCD" -hide-rr-moved -v \ -b boot/boot.img \ -c boot/boot.cat \ -o $JAMVER-cd.iso \ $MASTER_DIR/ chkswap echo "Finish!" echo "Next, burn CD-ROM for Utilities(like 'K3b') and type 'jambuilder cleanall'." } function cleanall () { check_root rm -rf $SOURCE_DIR $MASTER_DIR if [ -f ./jamver ]; then rm ./jamver fi } function check_root () { if [ $UID != 0 ]; then echo "ERROR! you have to run as a root, or use sudo and try again." exit 1 fi } function chkswap () { # SWAP OFF and DEL swap.temp if [ -f ./swap.temp ]; then echo "temporaly swap is already using. swapoff and remove it." swapoff ./swap.temp rm ./swap.temp else # free swap space need about 1GB. check and get space. # NEEDSWAP=524288 #512MB NEEDSWAP=786432 #768MB # NEEDSWAP=1048576 #1GB FREESWAP=$(free| grep -i Swap| awk '{print $4}') echo "Now, free swap size is $FREESWAP bytes." if [ $FREESWAP -ge $NEEDSWAP ] ; then echo "OK! Swap size is able to bulding." else echo "Swap size is NOT able to bulding." # check disk free space # if # echo "Sorry, no disk space." # else # echo "enable disk space." echo "Now, getting temporaly swap space. Wait a moment." dd if=/dev/zero of=./swap.temp bs=1024 count=$NEEDSWAP ;\ /sbin/mkswap ./swap.temp $NEEDSWAP ;\ /bin/sync; /sbin/swapon ./swap.temp # fi fi fi } function change_ja_fdimg () { FUNCTION_NAME="change_ja_fdimg" #echo "[function]: $FUNCTION_NAME.............." # # delete work files # function nekobaba () { # # delete jp106.kbd # if [ -f $WORK_DIR/jp106.kbd ]; then if [ "$JP106KBDSTAT" = "MADE" ]; then #echo " delteing $WORK_DIR/jp106.kbd." rm $WORK_DIR/jp106.kbd if ! [ $? -eq 0 ]; then echo " [WARNING] missing delete $WORK_DIR/jp106.kbd. error code is $? #exit 0 fi #else #echo " file $WORK_DIR/jp106.kbd exist defaultly. stop delete." fi fi # # delete work dir /mnt/image # if [ -d /mnt/image ]; then if [ "$MNTIMANGESTAT" = "MADE" ]; then #echo " delteing mount point /mnt/image." rm -r /mnt/image if ! [ $? -eq 0 ]; then echo " [WARNING] missing delete /mnt/image. error code is $?. #exit 0 fi #else #echo " mount point /mnt/image exist defaultly. stop delete." fi fi } # # check boot.img existence # if ! [ -f $MASTER_DIR/boot/boot.img ]; then echo " Sorry, no boot.img file. Please check it." exit 0 #else #echo " OK. boot.image exist." fi # # check jp106.kbd existence # JP106KBDSTAT="" # ./jp106.kbd exitsing check flag if ! [ -f $WORK_DIR/jp106.kbd ]; then echo " jp106.kbd is not found at work dir. now getting remote site." wget http://prdownloads.sourceforge.jp/jambuilder/8054/jp106.kbd > /dev/null ###### why??? # if [ $? -eq 0 ]; then # echo " jp106.kbd downloaded." # JP106KBDSTAT="MADE" # mv ./jp106.kbd $WORK_DIR/jp106.kbd # else # echo " missing download jp106.kbd. error code is $?." # exit 0 # fi else #echo " jp106.kbd found at work dir." JP106KBDSTAT="DEFAULT" fi # # make work dir /mnt/image # MNTIMANGESTAT="" # /mnt/image exitsing check flag if ! [ -d /mnt/image ]; then #echo " making mount point /mnt/image." mkdir -p /mnt/image if ! [ $? -eq 0 ]; then echo " missing mkdir /mnt/image. error code is $?." exit 0 fi MNTIMANGESTAT="MADE" else #echo " /mnt/image already exist." MNTIMANGESTAT="DEFAULT" fi #echo " /mnt/image status $MNTIMANGESTAT." # # make jp106 boot.img # if mount | grep /mnt/image > /dev/null 2>&1 ; then echo " /mnt/image already mounted. check your system." nekobaba exit 0 fi MOUNTFLAG="" # mount check flag mount -o loop $MASTER_DIR/boot/boot.img /mnt/image if ! [ $? -eq 0 ]; then echo " missing mount /mnt/image. error code is $?." nekobaba exit 0 #else #echo " mounted boot.img." fi MOUNTFLAG="SELF" if ! [ -f /mnt/image/jp106.kbd ] ; then #echo " copying jp106.kbd to boot.img." cp $WORK_DIR/jp106.kbd /mnt/image if ! [ $? -eq 0 ]; then echo " missing copy jp106.kbd. error code is $?." nekobaba exit 0 fi #else #echo " jp106.kbd already exists in boot.img." fi # add "KBDMAP jp106.kbd" to syslinux.cfg CFGEXISTENCE="" CFGEXISTENCE=`grep jp106.kbd /mnt/image/syslinux.cfg` if ! [ $? -eq 0 ]; then echo " missing check syslinux.cfg. error code is $?." nekobaba exit 0 fi # echo " CFGEXTENCE = [$CFGEXISTENCE]" if [ "$CFGEXISTENCE" = "" ] ; then echo "KBDMAP jp106.kbd" >> /mnt/image/syslinux.cfg if ! [ $? -eq 0 ]; then echo " missing add KBDMAP jp106.kbd to syslinux.cfg. error code is $?." nekobaba exit 0 fi #echo " jp106.kbd added in syslinux.cfg." #else #echo " jp106.kbd already setting in syslinux.cfg." fi if [ "$MOUNTFLAG" = "SELF" ] ; then umount /mnt/image if ! [ $? -eq 0 ]; then echo " missing umount /mnt/image. error code is $?." nekobaba exit 0 fi echo " umounted /mnt/image." #else #echo " /mnt/image is mounted defaultly." fi # # cleanup temp files # nekobaba } # ============================ # # main routine start from here # # ============================ echo "JaM Builder version $VERSION" echo "(C) 2004 Yasushi kinneko Date " echo "" case "$1" in cdcopy) ls /mnt/auto/cdrom > /dev/null # autofs dummy access if grep -q /dev/cdrom /proc/mounts; then echo "[cdcopy] copy from $CDROM directory" cdromcopy else echo "ERROR: cdrom is not mount on /dev/cdrom" echo "mount the cdrom and try again" fi ;; isocopy) if ! [ -f $ISO ]; then echo "ERROR: cdrom image '$ISO' is not exit." echo "get and put the cdrom image and try again" else echo "[isocopy] copy from $ISO image" isocopy fi ;; edit) echo "[edit] edit chroot directory" edit ;; mkcloop) echo "[mkcloop] build cloop image to $MASTER_DIR/linux/linux" mkcloop ;; mkiso) echo "[mkiso] build iso image" mkiso ;; cleanall) echo "[clean] remove and cleanup $SOURCE_DIR , $MASTER_DIR directory" echo -n "Sure? type 'yes' to cleanup ->" read yesno if [ $yesno == 'yes' ]; then cleanall fi ;; *) echo "Usage: jambuilder {isocopy|cdcopy|edit|mkcloop|mkiso|cleanall}" echo "" echo "isocopy: copy files from $ISO to ./master and ./source" echo " setup editting environment" echo "cdcopy: copy files from $CDROM to ./master and ./source" echo " setup editting environment" echo "edit: chroot into the JaMEPIS Userland, install and remove packages" echo "mkcloop: build cloop JaMEPIS Userland image" echo "mkiso: build bootable iso image file" echo "cleanall: cleanup $SOURCE_DIR , $MASTER_DIR directory" echo "" echo "kinneko " exit 1 ;; esac exit 0