Magellan Linux

Diff of /branches/mlivecdbuild-1_x_branch/mlivecdbuild2.sh

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 348 by niro, Sun Mar 5 02:18:28 2006 UTC revision 1402 by niro, Sun Jun 5 02:31:52 2011 UTC
# Line 1  Line 1 
1  #!/bin/bash  #!/bin/bash
2    
3  # some default settings - gets overidden with the profile config  # some default settings - gets overidden with the profile config
4  CDPROFILE="$1"  CDPROFILE="$2"
5  [[ -z ${CDPROFILE} ]] && CDPROFILE="default"  [[ -z ${CDPROFILE} ]] && CDPROFILE="default"
6  LIVECDROOT="/mnt/MLIVECDBUILD/${CDPROFILE}"  LIVECDROOT="/mnt/MLIVECDBUILD/${CDPROFILE}"
7  CDCHROOTDIR="${LIVECDROOT}/chroot"  CDCHROOTDIR="${LIVECDROOT}/chroot"
# Line 19  CDID="mlcd-$(date +%F-%k%M)" Line 19  CDID="mlcd-$(date +%F-%k%M)"
19  PROFILES_DIR="/usr/lib/mlivecdbuild/profiles"  PROFILES_DIR="/usr/lib/mlivecdbuild/profiles"
20  GLOBAL_PROFILE="${PROFILES_DIR}/global"  GLOBAL_PROFILE="${PROFILES_DIR}/global"
21    
22    # get full path to isolinux.bin, may vary an multilib systems
23    if [[ -f /usr/lib64/mkinitrd/isolinux.bin ]]
24    then
25     ISOLINUX_BIN=/usr/lib64/mkinitrd/isolinux.bin
26    else
27     ISOLINUX_BIN=/usr/lib/mkinitrd/isolinux.bin
28    fi
29    
30  die() { echo "ERROR: $@"; exit 1; }  die() { echo "ERROR: $@"; exit 1; }
31    
32  # get_profile $filename  # get_profile $filename
# Line 46  bootstrap_system() Line 54  bootstrap_system()
54   || die "bootstrapping toolchain"   || die "bootstrapping toolchain"
55  }  }
56    
57    custom_services()
58    {
59     local cmd="$1"
60     local services="$2"
61    
62     case ${cmd} in
63     add|del|default)
64     # add given services from profile
65     if [[ -n ${services} ]]
66     then
67     local i
68     for i in ${services}
69     do
70     MROOT="${CDCHROOTDIR}" rc-config ${cmd} ${i} || die "rc ${cmd} ${i}"
71     done
72     fi
73     ;;
74     *) die "custom_services: unkown command ${cmd}";;
75     esac
76    }
77    
78    add_initrc()
79    {
80     local var="$1"
81    
82     # sanity checks
83     [[ -z ${CDCHROOTDIR} ]] && die "\$CDCHROOTDIR not given."
84     echo "${var}" >> ${CDCHROOTDIR}/.installrc || die "add_initrc() adding \$var"
85    }
86    
87    custom_packages()
88    {
89     local cmd="$1"
90     local packages="$2"
91    
92     case ${cmd} in
93     install|uninstall)
94     if [[ -n ${packages} ]]
95     then
96     :> ${CDCHROOTDIR}/.installrc
97    
98     # respect proxies
99     [[ -n ${http_proxy} ]] && add_initrc "export http_proxy=${http_proxy}"
100     [[ -n ${ftp_proxy} ]] && add_initrc "export ftp_proxy=${ftp_proxy}"
101     [[ -n ${no_proxy} ]] && add_initrc "export no_proxy=${no_proxy}"
102    
103     # do not auto-start any services!
104     add_initrc "export MAGE_BOOTSTRAP=true"
105     add_initrc 'die() { if [ $? -eq 1 ]; then echo "ERROR: $@"; exit 1; fi; }'
106    
107     local i
108     for i in ${packages}
109     do
110     add_initrc "mage ${cmd} ${i} || die ${i}"
111     done
112     add_initrc "mage clean"
113    
114     # now run the .installrc script
115     mount -t proc proc ${CDCHROOTDIR}/proc || die "mount proc"
116     mount -t sysfs sysfs ${CDCHROOTDIR}/sys || die "mount sys"
117     mount -o bind /dev ${CDCHROOTDIR}/dev || die "mount dev"
118     chroot ${CDCHROOTDIR} /bin/bash -i /.installrc || die "chr00ting"
119     umount ${CDCHROOTDIR}/dev || die "umount dev"
120     umount ${CDCHROOTDIR}/proc || die "umount proc"
121     umount ${CDCHROOTDIR}/sys || die "umount sys"
122     [ -f ${CDCHROOTDIR}/.installrc ] && rm ${CDCHROOTDIR}/.installrc
123     fi
124     ;;
125     *) die "custom_packages: unkown command ${cmd}";;
126     esac
127    }
128    
129    read_config()
130    {
131     local file="$1"
132     local pkg
133    
134     ( cat ${file}; echo ) | while read pkg
135     do
136     case "${pkg}" in
137     \#*|"") continue ;;
138     esac
139     echo "${pkg}"
140     done
141    }
142    
143  prepare_iso()  prepare_iso()
144  {  {
145   echo Preparing LiveCD ISO Image ...   echo Preparing LiveCD ISO Image ...
146    
147   # fixes some issues with xfree/xorg xkb   # fixes some issues with xfree/xorg xkb
148   if [ -L "${CDCHROOTDIR}/etc/X11/xkb" -a -d "/usr/X11R6/lib/X11/xkb" ]   if [[ -L ${CDCHROOTDIR}/etc/X11/xkb ]] && [[ -d /usr/X11R6/lib/X11/xkb ]]
149   then   then
150   rm ${CDCHROOTDIR}/etc/X11/xkb || die   rm ${CDCHROOTDIR}/etc/X11/xkb || die
151   mv ${CDCHROOTDIR}/usr/X11R6/lib/X11/xkb ${CDCHROOTDIR}/etc/X11 || die   mv ${CDCHROOTDIR}/usr/X11R6/lib/X11/xkb ${CDCHROOTDIR}/etc/X11 || die
# Line 62  prepare_iso() Line 156  prepare_iso()
156   install -m 0644 $(get_profile fstab) ${CDCHROOTDIR}/etc/fstab || die   install -m 0644 $(get_profile fstab) ${CDCHROOTDIR}/etc/fstab || die
157   install -m 0644 $(get_profile motd) ${CDCHROOTDIR}/etc/motd || die   install -m 0644 $(get_profile motd) ${CDCHROOTDIR}/etc/motd || die
158   install -m 0644 $(get_profile issue) ${CDCHROOTDIR}/etc/issue || die   install -m 0644 $(get_profile issue) ${CDCHROOTDIR}/etc/issue || die
159     install -m 0644 $(get_profile net.eth0) ${CDCHROOTDIR}/etc/conf.d/net.eth0 || die
160   echo "${CDHOSTNAME}" > ${CDCHROOTDIR}/etc/hostname || die   echo "${CDHOSTNAME}" > ${CDCHROOTDIR}/etc/hostname || die
161    
162   echo Setting up services ...   echo Setting up services ...
163    
164   # change mountfs with mountfslivecd  # # add hardware detection
165   MROOT="${CDCHROOTDIR}" rc-config del mountfs || die "rc del mountfs"  # MROOT="${CDCHROOTDIR}" rc-config add hwdetect || die "rc add hwdetect"
  MROOT="${CDCHROOTDIR}" rc-config add mountfslivecd || die "rc add mountfslivecd"  
   
  # add hardware detection  
  MROOT="${CDCHROOTDIR}" rc-config add hwdetect || die "rc add hwdetect"  
166    
167   # del checkfs   # del checkfs
168   MROOT="${CDCHROOTDIR}" rc-config del checkfs || die "rc del checkfs"   MROOT="${CDCHROOTDIR}" rc-config del checkfs || die "rc del checkfs"
169    
170     # add custom packages
171     [[ -n ${ADD_PACKAGES} ]] && custom_packages install "${ADD_PACKAGES}"
172     [ -f $(get_profile add_packages) ] && custom_packages install "$(read_config $(get_profile add_packages))"
173    
174     # del custom packages
175     [[ -n ${DEL_PACKAGES} ]] && custom_packages uninstall "${DEL_PACKAGES}"
176     [ -f $(get_profile del_packages) ] && custom_packages uninstall "$(read_config $(get_profile del_packages))"
177    
178     # add given services from profile
179     [[ -n ${ADD_SERVICES} ]] && custom_services add "${ADD_SERVICES}"
180     [ -f $(get_profile add_services) ] && custom_services add "$(read_config $(get_profile add_services))"
181    
182     # del given services from profile
183     [[ -n ${DEL_SERVICES} ]] && custom_services del "${DEL_SERVICES}"
184     [ -f $(get_profile del_services) ] && custom_services del "$(read_config $(get_profile del_services))"
185    
186     # setup default runlevel
187     [[ -n ${DEFAULT_RUNLEVEL} ]] && custom_services default "${DEFAULT_RUNLEVEL}"
188    
189     if [ -f $(get_profile prepare_custom) ]
190     then
191     echo Running custom user script ...
192     source $(get_profile prepare_custom) || die "running custom user script"
193     fi
194    
195   echo Cleaning unwanted files ...   echo Cleaning unwanted files ...
196   :> ${CDCHROOTDIR}/etc/mtab || die "whiping /etc/mtab"   :> ${CDCHROOTDIR}/etc/mtab || die "whiping /etc/mtab"
197     [ -f ${CDCHROOTDIR}/root/.bash_history ] && rm ${CDCHROOTDIR}/root/.bash_history
198  }  }
199    
200  generate_rootfs()  generate_rootfs()
# Line 96  install_bootloader() Line 213  install_bootloader()
213    
214   # iso linux binary   # iso linux binary
215   install -d ${CDISOROOT}/isolinux   install -d ${CDISOROOT}/isolinux
216   install /usr/lib/mkinitrd/isolinux.bin ${CDISOROOT}/isolinux || die   install ${ISOLINUX_BIN} ${CDISOROOT}/isolinux || die
217    
218   # kernel   # kernel
219   local kimg="$(basename $(readlink ${CDCHROOTDIR}/boot/vmlinuz))"   local kimg="$(basename $(readlink ${CDCHROOTDIR}/boot/vmlinuz))"
# Line 113  install_bootloader() Line 230  install_bootloader()
230  generate_initrd()  generate_initrd()
231  {  {
232   local CHROOTSH="$(mktemp -p ${CDCHROOTDIR})"   local CHROOTSH="$(mktemp -p ${CDCHROOTDIR})"
  echo "DEBUG: ${CHROOTSH}"  
233    
234   echo Generating initrd image ...   echo Generating initrd image ...
235   echo '#!/bin/bash' > ${CHROOTSH} || die   echo '#!/bin/bash' > ${CHROOTSH} || die
# Line 151  generate_iso() Line 267  generate_iso()
267    
268  enter_livecd()  enter_livecd()
269  {  {
270   mount -t sysfs sysfs ${CDCHROOTDIR}/proc   mount -t sysfs sysfs ${CDCHROOTDIR}/sys
271   mount -t proc proc ${CDCHROOTDIR}/proc   mount -t proc proc ${CDCHROOTDIR}/proc
272   mount -o bind /dev ${CDCHROOTDIR}/dev   mount -o bind /dev ${CDCHROOTDIR}/dev
273    
# Line 160  enter_livecd() Line 276  enter_livecd()
276   HOME=/root \   HOME=/root \
277   TERM=$TERM PS1='\u:\w\$ ' \   TERM=$TERM PS1='\u:\w\$ ' \
278   PATH=/bin:/usr/bin:/sbin:/usr/sbin \   PATH=/bin:/usr/bin:/sbin:/usr/sbin \
279     http_proxy=${http_proxy} \
280     ftp_proxy=${ftp_proxy} \
281     no_proxy=${no_proxy} \
282   /bin/bash -i   /bin/bash -i
283    
284     umount ${CDCHROOTDIR}/dev
285     umount ${CDCHROOTDIR}/proc
286     umount ${CDCHROOTDIR}/sys
287    }
288    
289    usage()
290    {
291     echo "Usage: $(basename $0) [command] [profile] ..."
292     echo
293     echo "Commands:"
294     echo "    bootstrap  - bootstraps the rootfs for the livecd"
295     echo "    prepare    - prepare the rootfs to run from a livecd"
296     echo "    rootfs     - generates the squashfs rootfs image"
297     echo "    initrd     - generates a livecd suitable initrd"
298     echo "    bootloader - installs the bootloader"
299     echo "    isogen     - generate the final livecd iso image"
300     echo "    all        - runs all tasks to get a livecd from zero"
301     echo "    enter      - enters the rootfs of a livecd"
302     echo
303     echo "    for example '$(basename $0) all default'"
304     echo "    creates a livecd using the default profile."
305     echo
306  }  }
307    
308  # source profile config - overrides all other vars  # source profile config - overrides all other vars
309  [ -f ${PROFILES_DIR}/${CDPROFILE}/config ] && . ${PROFILES_DIR}/${CDPROFILE}/config  [ -f ${PROFILES_DIR}/${CDPROFILE}/config ] && . ${PROFILES_DIR}/${CDPROFILE}/config
310    
311  bootstrap_system  case $1 in
312  prepare_iso   bootstrap) bootstrap_system;;
313  generate_rootfs   prepare) prepare_iso;;
314  generate_initrd   rootfs) generate_rootfs;;
315  install_bootloader   initrd) generate_initrd;;
316  generate_iso   bootloader) install_bootloader;;
317     isogen) generate_iso;;
318     all)
319     bootstrap_system
320     prepare_iso
321     generate_rootfs
322     generate_initrd
323     install_bootloader
324     generate_iso
325     ;;
326     enter) enter_livecd ;;
327     *|'') usage;;
328    esac

Legend:
Removed from v.348  
changed lines
  Added in v.1402