From: Andres Salomon Date: Thu, 28 May 2009 23:22:04 +0000 (-0400) Subject: mkchroot.sh: break out non-olpc stuff X-Git-Tag: v0.6~63 X-Git-Url: https://spindle.queued.net/cgi-bin/gitweb.cgi?p=xodist;a=commitdiff_plain;h=931a6a70beba07b763ee392b92daa57443401070 mkchroot.sh: break out non-olpc stuff This changes the way image flavors are done; it adds a configs/ directory that allows overriding of misc hooks. This allows a lot more flexibility. The package lists are now in configs/ as well (ie, gnome.packages -> configs/debxo-gnome/packages). Signed-off-by: Andres Salomon --- diff --git a/README b/README index 427a67a..21add02 100644 --- a/README +++ b/README @@ -5,7 +5,7 @@ firmware support unlike an ordinary PC. The usual Debian boot CDs do not work, yet. xodist builds a Debian system image in the format required by the firmware. -See *.packages for other image flavours, and change "kde" below to the +See configs/* for other image flavours, and change "kde" below to the flavour. See README.approx before starting if you would like to cache the packages downloaded. @@ -13,7 +13,7 @@ How to use xodist to generate a Debian KDE image for an OLPC XO: 1. build the root filesystem, - sudo ./mkchroot.sh --package-list kde.packages kde.root + sudo ./mkchroot.sh --package-list debxo-kde kde.root 2. make the JFFS2 filesystem, diff --git a/awesome.packages b/awesome.packages deleted file mode 100644 index 35d8983..0000000 --- a/awesome.packages +++ /dev/null @@ -1,39 +0,0 @@ -xserver-xorg-core -xserver-xorg-input-kbd -xserver-xorg-input-mouse -xserver-xorg-input-evdev -xserver-xorg-video-geode -xfonts-100dpi -xfonts-scalable -xfonts-base -x11-xserver-utils -openssh-client -openntpd -diff -bzip2 -menu -aspell-en -info -manpages-dev -rsync -awesome -stalonetray -network-manager-gnome -claws-mail -epiphany-browser -file-roller -links2 -netsurf -pidgin -evince -xpdf -totem -gstreamer0.10-ffmpeg -gstreamer0.10-plugins-bad -gstreamer0.10-plugins-ugly -xchat -irssi -gnash -mozilla-plugin-gnash -# requested by erikg on #olpc-devel on 2008-11-07 -xterm diff --git a/base.packages b/base.packages deleted file mode 100644 index 01fb859..0000000 --- a/base.packages +++ /dev/null @@ -1,12 +0,0 @@ -locales -libertas-firmware -initramfs-tools -wireless-tools -sudo -less -alsa-utils -ttf-liberation -xserver-xorg-video-geode -xinit -psmisc -console-tools diff --git a/configs/debxo-awesom/hooks b/configs/debxo-awesom/hooks new file mode 100644 index 0000000..0af18b5 --- /dev/null +++ b/configs/debxo-awesom/hooks @@ -0,0 +1,113 @@ +# +# Copyright © 2008-2009 Andres Salomon +# +# This file 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. +# +# 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. +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +customize_chroot_hook() +{ + ROOT_DIR="$1" + + # Any customizations that need to be made to the chroot after the base system + # has been installed (but prior to custom package installation) should be + # put here. $ROOT_DIR should be prefixed to any paths. + + mkdir ${ROOT_DIR}/ofw + + # Apt can't deal w/ jffs2's lack of mmap, so we keep apt's cache on tmpfs + # (see ). + mkdir ${ROOT_DIR}/var/cache/apt/cache + mount -t tmpfs tmpfs ${ROOT_DIR}/var/cache/apt/cache + # XOs are slow and small; don't use pdiffs, don't install recommends, and + # work around lack of mmap. +cat >${ROOT_DIR}/etc/apt/apt.conf<>${ROOT_DIR}/etc/modules< +# +# This file 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. +# +# 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. +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +customize_chroot_hook() +{ + ROOT_DIR="$1" + + # Any customizations that need to be made to the chroot after the base system + # has been installed (but prior to custom package installation) should be + # put here. $ROOT_DIR should be prefixed to any paths. + + mkdir ${ROOT_DIR}/ofw + + # Apt can't deal w/ jffs2's lack of mmap, so we keep apt's cache on tmpfs + # (see ). + mkdir ${ROOT_DIR}/var/cache/apt/cache + mount -t tmpfs tmpfs ${ROOT_DIR}/var/cache/apt/cache + # XOs are slow and small; don't use pdiffs, don't install recommends, and + # work around lack of mmap. +cat >${ROOT_DIR}/etc/apt/apt.conf<>${ROOT_DIR}/etc/modules<${ROOT_DIR}/etc/gconf/2/local-defaults.path< +# +# This file 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. +# +# 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. +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +customize_chroot_hook() +{ + ROOT_DIR="$1" + + # Any customizations that need to be made to the chroot after the base system + # has been installed (but prior to custom package installation) should be + # put here. $ROOT_DIR should be prefixed to any paths. + + mkdir ${ROOT_DIR}/ofw + + # Apt can't deal w/ jffs2's lack of mmap, so we keep apt's cache on tmpfs + # (see ). + mkdir ${ROOT_DIR}/var/cache/apt/cache + mount -t tmpfs tmpfs ${ROOT_DIR}/var/cache/apt/cache + # XOs are slow and small; don't use pdiffs, don't install recommends, and + # work around lack of mmap. +cat >${ROOT_DIR}/etc/apt/apt.conf<>${ROOT_DIR}/etc/modules< +# +# This file 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. +# +# 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. +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +customize_chroot_hook() +{ + ROOT_DIR="$1" + + # Any customizations that need to be made to the chroot after the base system + # has been installed (but prior to custom package installation) should be + # put here. $ROOT_DIR should be prefixed to any paths. + + mkdir ${ROOT_DIR}/ofw + + # Apt can't deal w/ jffs2's lack of mmap, so we keep apt's cache on tmpfs + # (see ). + mkdir ${ROOT_DIR}/var/cache/apt/cache + mount -t tmpfs tmpfs ${ROOT_DIR}/var/cache/apt/cache + # XOs are slow and small; don't use pdiffs, don't install recommends, and + # work around lack of mmap. +cat >${ROOT_DIR}/etc/apt/apt.conf<>${ROOT_DIR}/etc/modules< +# +# This file 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. +# +# 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. +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +customize_chroot_hook() +{ + ROOT_DIR="$1" + + # Any customizations that need to be made to the chroot after the base system + # has been installed (but prior to custom package installation) should be + # put here. $ROOT_DIR should be prefixed to any paths. + + mkdir ${ROOT_DIR}/ofw + + # Apt can't deal w/ jffs2's lack of mmap, so we keep apt's cache on tmpfs + # (see ). + mkdir ${ROOT_DIR}/var/cache/apt/cache + mount -t tmpfs tmpfs ${ROOT_DIR}/var/cache/apt/cache + # XOs are slow and small; don't use pdiffs, don't install recommends, and + # work around lack of mmap. +cat >${ROOT_DIR}/etc/apt/apt.conf<>${ROOT_DIR}/etc/modules<> ${ROOT_DIR}/etc/skel/.Xsession <<- EOF +matchbox-window-manager -use_titlebar no & +sugar +EOF + fi + +} + +cleanup_chroot_hook() +{ + ROOT_DIR="$1" + + # Any customizations that need to be made after the chroot creation is + # complete should be put here. $ROOT_DIR should be prefixed to any + # paths. + + umount ${ROOT_DIR}/var/cache/apt/cache +} diff --git a/configs/debxo-sugar/packages b/configs/debxo-sugar/packages new file mode 100644 index 0000000..7d70521 --- /dev/null +++ b/configs/debxo-sugar/packages @@ -0,0 +1,61 @@ +# The list of packages to install onto the image should be listed here +# (one per line). Aptitude is used to install these, so there are is no +# need to explicitly list dependencies. Packages installed by debootstrap +# plus a few others (sudo, locales) do not need to be listed here, as they +# are always installed. + +# the backend stuff +libertas-firmware +initramfs-tools +wireless-tools +alsa-utils +console-tools +openntpd + +# the silly i-always-use-this-shit stuff +less +psmisc +openssh-client +diff +bzip2 +info +manpages-dev +rsync +links2 + +# X +xserver-xephyr +xserver-xorg-core +xserver-xorg-input-kbd +xserver-xorg-input-mouse +xserver-xorg-input-evdev +xserver-xorg-video-geode +xfonts-100dpi +xfonts-scalable +xfonts-base +x11-xserver-utils +xinit + +# the desktop stuff +menu +aspell-en +big-cursor +ttf-liberation +network-manager-gnome +sugar +sugar-artwork +sugar-calculate-activity +sugar-chat-activity +sugar-journal-activity +sugar-pippy-activity +sugar-presence-service +sugar-sharedstate-classes +sugar-sharingtest-activity +sugar-web-activity +matchbox +network-manager +sugar-doc +etoys +etoys-doc +squeak-vm +unzip diff --git a/configs/debxo-sugar/variables b/configs/debxo-sugar/variables new file mode 100644 index 0000000..40e1313 --- /dev/null +++ b/configs/debxo-sugar/variables @@ -0,0 +1,22 @@ +# DebXO variables + + +# By default, a non-root user is created (with root provided by sudo). Set +# the desired username here. +DEFUSER=olpc + +# The hostname that the image uses +IMG_HOSTNAME=debxo + +# Build architecture (passed to debootstrap) +IMG_ARCH=i386 + +# The contents of /etc/apt/sources.list file in the _final_ image. Note that +# during the image creation process, a different mirror (ie, a local cache) +# can be used by supplying --local-apt-mirror. +APT_SOURCES="deb http://http.us.debian.org/debian/ lenny main contrib non-free +deb http://security.debian.org/ lenny/updates main contrib non-free" + +# The default locale +IMG_LOCALE="en_US.UTF-8 UTF-8" + diff --git a/configs/debxo-xfce/hooks b/configs/debxo-xfce/hooks new file mode 100644 index 0000000..0af18b5 --- /dev/null +++ b/configs/debxo-xfce/hooks @@ -0,0 +1,113 @@ +# +# Copyright © 2008-2009 Andres Salomon +# +# This file 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. +# +# 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. +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +customize_chroot_hook() +{ + ROOT_DIR="$1" + + # Any customizations that need to be made to the chroot after the base system + # has been installed (but prior to custom package installation) should be + # put here. $ROOT_DIR should be prefixed to any paths. + + mkdir ${ROOT_DIR}/ofw + + # Apt can't deal w/ jffs2's lack of mmap, so we keep apt's cache on tmpfs + # (see ). + mkdir ${ROOT_DIR}/var/cache/apt/cache + mount -t tmpfs tmpfs ${ROOT_DIR}/var/cache/apt/cache + # XOs are slow and small; don't use pdiffs, don't install recommends, and + # work around lack of mmap. +cat >${ROOT_DIR}/etc/apt/apt.conf<>${ROOT_DIR}/etc/modules<&2 echo "Usage: $0 [] " 1>&2 echo "" 1>&2 echo "Options:" 1>&2 - echo " --user Username for default user" 1>&2 - echo " --package-list File containing package list" 1>&2 - echo " --apt-sources Contents of /etc/apt/sources.list" 1>&2 + echo " --config-type directory name in configs/ to use" 1>&2 echo " --local-apt-mirror sources.list for local mirror" 1>&2 echo "" 1>&2 exit 1 @@ -41,22 +40,14 @@ usage() while test $# != 0 do case $1 in - --user) - DEFUSER=$2 - shift - ;; - --package-list) - PLIST=$2 - [ -f ${PLIST} ] || { - echo "Error: can't find file '${PLIST}'!" 1>&2 + --config-type) + CONFIG_TYPE=$2 + [ -d ./configs/${CONFIG_TYPE} ] || { + echo "Error: can't find directory './configs/${CONFIG_TYPE}/'!" 1>&2 exit 2 } shift ;; - --apt-sources) - APT_SOURCES="$2" - shift - ;; --local-apt-mirror) LOCAL_APT_MIRROR="$2" shift @@ -85,9 +76,18 @@ if [ -d "${ROOT_DIR}" ]; then usage fi +if [ "$UID" != "0" ]; then + echo "" 1>&2 + echo "*** $0 must be run with root privs!" 1>&2 + exit 1 +fi + start_logging $ROOT_DIR -check_for_cmds debootstrap || exit 1 +# load config-specific values +. ./configs/${CONFIG_TYPE}/variables +. ./configs/${CONFIG_TYPE}/hooks +PLIST="./configs/${CONFIG_TYPE}/packages" if [ -z "${LOCAL_APT_MIRROR}" ]; then LOCAL_APT_MIRROR="${APT_SOURCES}" @@ -98,12 +98,9 @@ MIRROR=$(printf "${LOCAL_APT_MIRROR}\n" | awk '/deb /{print $2}' | head -n1) DIST=$(printf "${LOCAL_APT_MIRROR}\n" | awk '/deb /{print $3}' | head -n1) # create chroot -debootstrap --arch i386 ${DIST} ${ROOT_DIR} ${MIRROR} -mkdir ${ROOT_DIR}/ofw -mkdir ${ROOT_DIR}/var/cache/apt/cache +debootstrap --arch ${IMG_ARCH} ${DIST} ${ROOT_DIR} ${MIRROR} mount -t proc proc ${ROOT_DIR}/proc mount -t devpts devpts ${ROOT_DIR}/dev/pts -mount -t tmpfs tmpfs ${ROOT_DIR}/var/cache/apt/cache # allow daemons to be installed without breaking mv ${ROOT_DIR}/sbin/start-stop-daemon ${ROOT_DIR}/sbin/start-stop-daemon.REAL @@ -115,10 +112,10 @@ EOF chmod 755 ${ROOT_DIR}/sbin/start-stop-daemon # set up hostname stuff -echo "debxo" > ${ROOT_DIR}/etc/hostname +echo "${IMG_HOSTNAME}" > ${ROOT_DIR}/etc/hostname cat >${ROOT_DIR}/etc/hosts<>${ROOT_DIR}/etc/network/interfaces<${ROOT_DIR}/etc/locale.gen + +# run any customizations necessary pre-package install +customize_chroot_hook "$ROOT_DIR" + +# initialize apt export DEBIAN_FRONTEND=noninteractive export DEBCONF_PRIORITY=critical -cat >${ROOT_DIR}/etc/apt/apt.conf<${ROOT_DIR}/etc/apt/sources.list (chroot ${ROOT_DIR} aptitude update) -# set up base system and base packages -echo "en_US.UTF-8 UTF-8" >${ROOT_DIR}/etc/locale.gen -(chroot ${ROOT_DIR} aptitude install -y `cat base.packages`) - -k="http://lunge.mit.edu/~dilinger/debxo-0.2/initramfs-tools_0.92l.2_all.deb - http://lunge.mit.edu/~dilinger/debxo-0.2/ofw-config_0.1_all.deb - http://lunge.mit.edu/~dilinger/debxo-0.4/linux-2.6.25.15_2.6.25.15-165_i386.deb - http://lunge.mit.edu/~dilinger/debxo-0.5/xserver-xorg-video-geode_2.11.0-0.3_i386.deb - http://lunge.mit.edu/~dilinger/debxo-0.5/autox_0.1_all.deb" -mkdir -p cache -for i in $k; do - pkg=$(basename ${i}) - wget --continue -O cache/${pkg} ${i} - cp cache/${pkg} ${ROOT_DIR}/${pkg} - (chroot ${ROOT_DIR} dpkg -i /${pkg}) - pkgbase=$(echo $pkg | cut -d_ -f1) - echo $pkgbase hold | (chroot ${ROOT_DIR} dpkg --set-selections) - rm -f ${ROOT_DIR}/${pkg} -done -# take the geode driver off hold -echo xserver-xorg-video-geode install | (chroot ${ROOT_DIR} dpkg --set-selections) -# take autox off hold -echo autox install | (chroot ${ROOT_DIR} dpkg --set-selections) - -# ensure certain modules get loaded during boot -cat >>${ROOT_DIR}/etc/modules<${ROOT_DIR}/etc/gconf/2/local-defaults.path<> ${ROOT_DIR}/etc/sudoers -# add local network interface -cat >>${ROOT_DIR}/etc/network/interfaces<> ${ROOT_DIR}/home/${DEFUSER}/.Xsession <<- EOF -matchbox-window-manager -use_titlebar no & -sugar -EOF -fi - -# run any local postinstall scripts for the build -PLIST_DIR=${PLIST/.packages/} -if [ -d ${PLIST_DIR} ]; then - if [ -x ${PLIST_DIR}/postinst.sh ]; then - ${PLIST_DIR}/postinst.sh ${ROOT_DIR} - fi - if [ -x ${PLIST_DIR}/postinst-local.sh ]; then - ${PLIST_DIR}/postinst-local.sh ${ROOT_DIR} - fi -fi - # override sources.list with shipping version printf "${APT_SOURCES}\n" >${ROOT_DIR}/etc/apt/sources.list (chroot ${ROOT_DIR} aptitude update) @@ -256,4 +177,6 @@ mv ${ROOT_DIR}/sbin/start-stop-daemon.REAL ${ROOT_DIR}/sbin/start-stop-daemon (chroot ${ROOT_DIR} aptitude clean) umount ${ROOT_DIR}/proc umount ${ROOT_DIR}/dev/pts -umount ${ROOT_DIR}/var/cache/apt/cache + +# custom cleanup stuff +cleanup_chroot_hook "${ROOT_DIR}" diff --git a/release.sh b/release.sh index e453292..6f17989 100755 --- a/release.sh +++ b/release.sh @@ -1,9 +1,9 @@ #!/bin/bash -e # prepare a release -for f in *.packages; do - desktop=$(echo $f | sed 's/\.packages//') - ./mkchroot.sh --package-list ${f} \ +for f in configs/debxo-*; do + desktop=$(basename $f | sed 's/debxo-//') + ./mkchroot.sh --config-type debxo-${desktop} \ --local-apt-mirror "deb http://localhost:9999/debian lenny main contrib non-free deb http://localhost:9999/security lenny/updates main contrib non-free" \ debxo-${desktop} diff --git a/sugar.packages b/sugar.packages deleted file mode 100644 index 3e96df8..0000000 --- a/sugar.packages +++ /dev/null @@ -1,33 +0,0 @@ -xserver-xephyr -xserver-xorg-core -xserver-xorg-input-kbd -xserver-xorg-input-mouse -xserver-xorg-input-evdev -xserver-xorg-video-geode -xfonts-100dpi -xfonts-scalable -xfonts-base -x11-xserver-utils -openssh-client -openntpd -menu -aspell-en -big-cursor -network-manager-gnome -sugar -sugar-artwork -sugar-calculate-activity -sugar-chat-activity -sugar-journal-activity -sugar-pippy-activity -sugar-presence-service -sugar-sharedstate-classes -sugar-sharingtest-activity -sugar-web-activity -matchbox -network-manager -sugar-doc -etoys -etoys-doc -squeak-vm -unzip diff --git a/xfce.packages b/xfce.packages deleted file mode 100644 index c20e798..0000000 --- a/xfce.packages +++ /dev/null @@ -1,39 +0,0 @@ -xserver-xorg-core -xserver-xorg-input-kbd -xserver-xorg-input-mouse -xserver-xorg-input-evdev -xserver-xorg-video-geode -xfonts-100dpi -xfonts-scalable -xfonts-base -x11-xserver-utils -openssh-client -openntpd -diff -bzip2 -menu -aspell-en -info -manpages-dev -rsync -network-manager-gnome -firefox -pidgin -evince -xpdf -totem -gstreamer0.10-ffmpeg -gstreamer0.10-plugins-bad -gstreamer0.10-plugins-ugly -xfce4 -xfce4-terminal -xinit -xauth -firefox -abiword -eog -gksu -synaptic -sugar-artwork -file-roller -epiphany-browser