cp bin/live-getty bin/live-login bin/live-new-uuid bin/live-snapshot $(DESTDIR)/sbin
mkdir -p $(DESTDIR)/usr/share/live-initramfs
- cp bin/live-preseed bin/live-reconfigure $(DESTDIR)/usr/share/live-initramfs
+ cp bin/live-preseed bin/live-reconfigure contrib/languagelist $(DESTDIR)/usr/share/live-initramfs
mkdir -p $(DESTDIR)/usr/share/initramfs-tools
cp -r hooks scripts $(DESTDIR)/usr/share/initramfs-tools
$$FILE; \
done
+ # Update language list
+ wget -O "contrib/languagelist" \
+ "http://svn.debian.org/viewsvn/*checkout*/d-i/trunk/packages/localechooser/languagelist"
+
clean:
distclean:
# live-snapshot - utility to manage Debian Live systems snapshots
#
-# This program mount a device (fallback to /tmpfs under /mnt/snapshot
-# and save the /live/cow (or a different dir) filesystem in it for reusing
+# This program mounts a device (fallback to /tmpfs under $MOUNTP
+# and saves the /live/cow (or a different dir) filesystem in it for reuse
# in another live-initramfs session. Look at manpage for more info.
#
-# Copyright (C) 2006 Marco Amadori <marco.amadori@gmail.com>
+# Copyright (C) 2006-2008 Marco Amadori <marco.amadori@gmail.com>
# Copyright (C) 2008 Chris Lamb <chris@chris-lamb.co.uk>
#
# This program is free software; you can redistribute it and/or modify
export USERNAME USERFULLNAME HOSTNAME
PROGRAM="$(basename $0)"
-VERSION=0.0.2
-MOUNTP="/mnt/live-snapshot"
+# Needs to be available at run and reboot time
+SAFE_TMPDIR="/live"
+
+# Permits multiple runs
+MOUNTP="$(mktemp -d -p ${SAFE_TMPDIR} live-snapshot-mnt.XXXXXX)"
SNAP_COW="/live/cow"
SNAP_DEV=""
DEST="${MOUNTP}/live-sn.cpio.gz"
exit 0
}
-
Version ()
{
- echo "${PROGRAM}, version ${VERSION}"
+ echo "${PROGRAM}"
echo
echo "Copyright (C) 2006 Marco Amadori <marco.amadori@gmail.com>"
+ echo "Copyright (C) 2008 Chris Lamb <chris@chris-lamb.co.uk>"
echo
echo "This program is free software; you can redistribute it and/or modify"
echo "it under the terms of the GNU General Public License as published by"
esac
done
-
}
Defaults ()
Error "unrecognized resync string"
;;
esac
-
else
# Set target file based on image
case "${SNAP_TYPE}" in
;;
esac
fi
-
}
Validate_input ()
{
- case "${SNAP_TYPE}" in
+ case "${SNAP_TYPE}" in
cpio|squashfs|jffs2|ext2|ext3)
;;
+
*)
Error "invalid filesystem type \"${SNAP_TYPE}\""
;;
# create a temp
mount -t tmpfs -o rw tmpfs "${MOUNTP}"
;;
+
*)
if [ -b "${SNAP_DEV}" ]
then
{
case "${SNAP_TYPE}" in
squashfs)
- echo "./tmp/exclude_list" > /tmp/exclude_list
- ( cd "${SNAP_COW}" && find . -name '*.wh.*' >> /tmp/exclude_list )
- mksquashfs "${SNAP_COW}" "${DEST}" -ef /tmp/exclude_list
- rm /tmp/exclude_list
+ EXCLUDE_LIST="$(mktemp -p ${SAFE_TMPDIR} live-snapshot-exclude-list.XXXXXX)"
+ echo "./${EXCLUDE_LIST}" > "${EXCLUDE_LIST}"
+ cd "${SNAP_COW}"
+ find . -name '*.wh.*' >> "${EXCLUDE_LIST}"
+ cd "${OLDPWD}"
+ mksquashfs "${SNAP_COW}" "${DEST}" -ef "${EXCLUDE_LIST}"
+ rm -f "${EXCLUDE_LIST}"
;;
cpio)
Clean ()
{
- umount "${MOUNTP}"
- rmdir "${MOUNTP}"
+ if echo "${DEST}" | grep -q "${MOUNTP}"
+ then
+ echo "${DEST} is present on ${MOUNTP}, therefore no automatic unmounting the latter." > /dev/null 1>&2
+ else
+ umount "${MOUNTP}"
+ rmdir "${MOUNTP}"
+ fi
}
Main ()
Parse_args "${@}"
Defaults
Validate_input
- trap 'Clean' EXIT
+ trap 'Clean' EXIT
Mount_device
Do_snapshot
}
--- /dev/null
+#
+# This is the complete list of languages (locales) to choose from.
+# langcode;language (en);language (orig);supported_environments;countrycode;fallbacklocale;langlist;console-data
+sq;Albanian;Shqip;2;AL;sq_AL.UTF-8;;kbd=lat0-sun16(utf8)
+am;Amharic;አማርኛ;4;ET;am_ET;;
+ar;Arabic;عربي;3;EG;ar_EG.UTF-8;;console-setup
+eu;Basque;Euskaraz;1;ES;eu_ES.UTF-8;;kbd=lat0-sun16(utf8)
+be;Belarusian;Беларуская;2;BY;be_BY.UTF-8;;console-setup
+bn;Bengali;বাংলা;4;BD;bn_BD;;
+bs;Bosnian;Bosanski;2;BA;bs_BA.UTF-8;;kbd=Lat2-Terminus16(utf8)
+bg;Bulgarian;Български;2;BG;bg_BG.UTF-8;;console-setup
+# For C locale, set language to 'en' to make sure questions are "translated"
+# to English instead of showing codes.
+C;C;No localization;0;;C;en;
+ca;Catalan;Català;1;ES;ca_ES.UTF-8;;kbd=lat0-sun16(utf8)
+# Special case for Chinese as the two flavours share the same ISO 639 code
+# Both will trigger countrychooser. Each will be the backup for the other
+# one
+zh_CN;Chinese (Simplified);中文(简体);3;CN;zh_CN.UTF-8;zh_CN:zh;
+zh_TW;Chinese (Traditional);中文(繁體);3;TW;zh_TW.UTF-8;zh_TW:zh;
+hr;Croatian;Hrvatski;2;HR;hr_HR.UTF-8;;kbd=lat2-sun16(utf8)
+cs;Czech;Čeština;2;CZ;cs_CZ.UTF-8;;kbd=lat2-sun16(utf8)
+da;Danish;Dansk;1;DK;da_DK.UTF-8;;kbd=lat0-sun16(utf8)
+nl;Dutch;Nederlands;1;NL;nl_NL.UTF-8;;kbd=lat0-sun16(utf8)
+dz;Dzongkha;རྫོང་ཁ།;4;BT;dz_BT;;
+en;English;English;0;US;en_US.UTF-8;;kbd=lat0-sun16(utf8)
+# The Esperanto locale *is* (or will be as of 1/11/2006) eo.UTF-8
+# so no country on purpose. The default country is Antarctica because...
+# ...why not..:-)
+eo;Esperanto;Esperanto;2;AQ;eo.UTF-8;;console-setup
+et;Estonian;Eesti;2;EE;et_EE.UTF-8;;kbd=lat0-sun16(utf8)
+fi;Finnish;Suomi;1;FI;fi_FI.UTF-8;;kbd=lat0-sun16(utf8)
+fr;French;Français;1;FR;fr_FR.UTF-8;;console-setup
+gl;Galician;Galego;1;ES;gl_ES.UTF-8;;kbd=lat0-sun16(utf8)
+ka;Georgian;ქართული;4;GE;ka_GE.UTF-8;;console-setup
+de;German;Deutsch;1;DE;de_DE.UTF-8;;kbd=lat0-sun16(utf8)
+el;Greek;Ελληνικά;2;GR;el_GR.UTF-8;;console-setup
+gu;Gujarati;ગુજરાતી;4;IN;gu_IN;;
+he;Hebrew;עברית;3;IL;he_IL.UTF-8;;console-setup
+hi;Hindi;हिन्दी ;4;IN;hi_IN;;
+hu;Hungarian;Magyar;2;HU;hu_HU.UTF-8;;kbd=lat2-sun16(utf8)
+#X is;Icelandic;Íslenska;1;IS;is_IS.UTF-8;;kbd=lat9u-16(utf8)
+id;Indonesian;Bahasa Indonesia;1;ID;id_ID.UTF-8;;kbd=lat0-sun16(utf8)
+#X ga;Irish;Gaeilge;1;IE;ga_IE.UTF-8;;kbd=lat0-sun16(utf8)
+it;Italian;Italiano;1;IT;it_IT.UTF-8;;kbd=lat0-sun16(utf8)
+ja;Japanese;日本語;3;JP;ja_JP.UTF-8;;
+#X kn;Kannada;ಕನ್ನಡ;4;IN;kn_IN;;
+#X ks;Kashmiri;कोशुर;4;IN;ks_IN;;
+#X kk;Kazakh;Қазақ;2;KZ;kk_KZ.UTF-8;;console-setup
+km;Khmer;ខ្មែរ;4;KH;km_KH;;
+ko;Korean;한국어;3;KR;ko_KR.UTF-8;;
+ku;Kurdish;Kurdî;2;TR;ku_TR.UTF-8;;kbd=Lat15-Terminus16(utf8)
+#X lo;Lao;ລາວ;4;LA;lo_LA;;console-setup
+lv;Latvian;Latviski;2;LV;lv_LV.UTF-8;;kbd=lat7-14(utf8)
+lt;Lithuanian;Lietuviškai;2;LT;lt_LT.UTF-8;;kbd=LatArCyrHeb-16(utf8)
+#X mg;Malagasy;Malagasy;1;MG;mg_MG.UTF-8;mg_MG:fr_FR:fr:en;kbd=lat0-sun16(utf8)
+#X ms;Malay;Bahasa Malaysia;1;MY;ms_MY.UTF-8;;kbd=lat0-sun16(utf8)
+ml;Malayalam;മലയാളഠ;4;IN;ml_IN;;
+mr;Marathi;मराठी;4;IN;mr_IN;;
+mk;Macedonian;Македонски;2;MK;mk_MK.UTF-8;;console-setup
+ne;Nepali;नेपाली ;4;NP;ne_NP;;
+# The Sami translation is really incomplete. We however keep Sami on request
+# of Skolelinux as a kind of reward to them..:-). They need to be able to
+# choose Sami as an option so that the Sami locale is set as default
+se_NO;Northern Sami;Sámegillii;1;NO;se_NO.UTF-8;se_NO:nb_NO:nb:no_NO:no:nn_NO:nn:da:sv:en;kbd=lat0-sun(utf8)
+nb_NO;Norwegian Bokmaal;Norsk bokmål;1;NO;nb_NO.UTF-8;nb_NO:nb:no_NO:no:nn_NO:nn:da:sv:en;kbd=lat0-sun16(utf8)
+nn_NO;Norwegian Nynorsk;Norsk nynorsk;1;NO;nn_NO.UTF-8;nn_NO:nn:no_NO:no:nb_NO:nb:da:sv:en;kbd=lat0-sun16(utf8)
+#X fa;Persian;فارسی;3;IR;fa_IR;;console-setup
+pl;Polish;Polski;2;PL;pl_PL.UTF-8;;kbd=lat2-sun16(utf8)
+pt;Portuguese;Português;1;PT;pt_PT.UTF-8;pt:pt_BR:en;kbd=lat0-sun16(utf8)
+pt_BR;Portuguese (Brazil);Português do Brasil;1;BR;pt_BR.UTF-8;pt_BR:pt:en;kbd=lat1-16(utf8)
+pa;Punjabi (Gurmukhi);ਪੰਜਾਬੀ;4;IN;pa_IN;;
+ro;Romanian;Română;2;RO;ro_RO.UTF-8;;kbd=Lat2-Terminus16(utf8)
+ru;Russian;Русский;2;RU;ru_RU.UTF-8;;console-setup
+#X sa;Sanskrit;संस्कृत;4;IN;sa_IN;;
+# Serbian commented for consistency: too incomplete
+#X sr;Serbian;Српски;2;CS;sr_YU.UTF-8@cyrillic;;console-setup
+sk;Slovak;Slovenčina;2;SK;sk_SK.UTF-8;;kbd=lat2-sun16(utf8)
+sl;Slovenian;Slovenščina;2;SI;sl_SI.UTF-8;;kbd=lat2-sun16(utf8)
+es;Spanish;Español;1;ES;es_ES.UTF-8;;kbd=lat0-sun16(utf8)
+sv;Swedish;Svenska;1;SE;sv_SE.UTF-8;;kbd=lat0-sun16(utf8)
+tl;Tagalog;Tagalog;1;PH;tl_PH.UTF-8;;kbd=lat0-sun16(utf8)
+ta;Tamil;தமிழ்;4;IN;ta_IN;;
+#X te;Telugu;తెలుగు;4;IN;te_IN;;
+th;Thai;ภาษาไทย;4;TH;th_TH.UTF-8;;console-setup
+tr;Turkish;Türkçe;2;TR;tr_TR.UTF-8;;kbd=Lat15-Terminus16(utf8)
+uk;Ukrainian;Українська;2;UA;uk_UA.UTF-8;;console-setup
+#X ur;Urdu;اردو;3;PK;ur_PK.UTF-8;;console-setup
+#X ca@valencia;Valencian-Catalan;Valencià-Català;1;ES;ca_ES.UTF-8@valencia;;kbd=lat0-sun16(utf8)
+vi;Vietnamese;Tiếng Việt;3;VN;vi_VN.UTF-8;;console-setup
+#X cy;Welsh;Cymraeg;2;GB;cy_GB.UTF-8;;kbd=iso14.f16(utf8)
+wo;Wolof;Wolof;2;SN;wo_SN;wo:fr:en;
+#X xh;Xhosa;Xhosa;2;ZA;xh_ZA.UTF-8;;kbd=lat0-sun16(utf8)
* Malcom Gilles <live@ouabain.org>
* Marco Amadori <marco.amadori@gmail.com>
* Mathieu Geli <mathieu.geli@gmail.com>
+ * Michal Suchanek <hramrach@centrum.cz>
* Oliver Osburg <o.osburg@uni-jena.de>
* Otavio Salvador <otavio@debian.org>
* Sebastian Raveau <sebastien.raveau@epita.fr>
+casper (1.132) intrepid; urgency=low
+
+ [ Colin Watson ]
+ * Switch default unionfs implementation to aufs.
+
+ [ Agostino Russo ]
+ * Do not scan only vfat volumes when looking for cow devices (LP: #230703)
+ * Allow casper to use a squashfs filesystem within an arbitrary path (LP:
+ #230716, #207137)
+
+ -- Evan Dandrea <evand@ubuntu.com> Wed, 28 May 2008 15:01:30 -0400
+
+casper (1.131) hardy; urgency=low
+
+ [ Luke Yelavich ]
+ * scripts/casper-bottom/30accessibility: Set gconf and orca config values as
+ root in automatic-ubiquity, only-ubiquity, and debug-ubiquity modes.
+ * ubiquity-hooks/30accessibility: Remove unneeded gconf call to disable esd.
+
+ [ Colin Watson ]
+ * Ensure that the live CD user's Desktop directory is owned by them, not
+ by root (LP: #218576).
+ * Duplicate a chunk of console-setup logic into the keyboard script so
+ that we can deal with non-Latin keymaps and the like without having to
+ have gfxboot-theme-ubuntu help us; the previous approach broke other
+ uses of console-setup, and thus the alternate install CD (LP: #218754).
+ This should later be replaced by just running console-setup, and I'll
+ open another bug for this.
+
+ -- Colin Watson <cjwatson@ubuntu.com> Mon, 21 Apr 2008 14:52:05 +0100
+
casper (1.130) hardy; urgency=low
* Handle use of debian-installer/language for locale selection
cp /usr/share/initramfs-tools/scripts/live-helpers "${DESTDIR}"/scripts
# klibc dependencies
-for hidden_klibc_dep_library in libacl libblkid libuuid libdevmapper libattr
+for FILE in /lib/libacl* /lib/libblkid* /lib/libuuid* /lib/libdevmapper* /lib/libattr*
do
- cp -a /lib/${hidden_klibc_dep_library}.so.* "${DESTDIR}"/lib
+ if [ ! -e "${DESTDIR}"/"${FILE}" ]
+ then
+ cp -a "${FILE}" "${DESTDIR}"/"${FILE}"
+ fi
done
# Handling other stuff
{
case "${1}" in
*.squashfs|*.ext2|*.ext3|*.jffs2)
- echo $(setup_loop "${1}" "loop" "/sys/block/loop*" '0' "${LIVE_MEDIA_ENCRYPTION}")
+ echo $(setup_loop "${1}" "loop" "/sys/block/loop*" '0' "${LIVE_MEDIA_ENCRYPTION}" "${2}")
;;
*.dir)
return 1
}
-is_supported_fs ()
-{
- # FIXME: do something better like the scan of supported filesystems
- fstype="${1}"
-
- case ${fstype} in
- vfat|iso9660|udf|ext2|ext3|ntfs|jffs2)
- return 0
- ;;
- esac
-
- return 1
-}
-
copy_live_to ()
{
copyfrom="${1}"
cd "${copyto}"
tar zxf "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})"
rm -f "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})"
- mount -r --move "${copyto}" "${rootmnt}"
+ mount -r -o move "${copyto}" "${rootmnt}"
cd "${OLDPWD}"
else
if [ -n "${MODULETORAMFILE}" ]
livefs_root
umount ${copyfrom}
- mount -r --move ${copyto} ${copyfrom}
+ mount -r -o move ${copyto} ${copyfrom}
fi
rmdir ${copyto}
rofslist="${image} ${rofslist}"
elif [ -f "${image}" ]
then
- backdev=$(get_backing_device "${image}")
+ backdev=$(get_backing_device "${image}" "-r")
fstype=$(get_fstype "${backdev}")
if [ "${fstype}" = "unknown" ]
;;
*)
- mount --move "${d}" "${rootmnt}/live/${d##*/}"
+ mount -o move "${d}" "${rootmnt}/live/${d##*/}"
;;
esac
done
devname="${loopdevname}"
fi
+ if [ -d "${devname}" ]
+ then
+ mount -o bind "${devname}" $mountpoint || continue
+
+ if is_live_path $mountpoint
+ then
+ echo $mountpoint
+ return 0
+ else
+ umount $mountpoint
+ fi
+ fi
+
fstype=$(get_fstype "${devname}")
if is_supported_fs ${fstype}
fi
# or do the scan of block devices
- for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram | grep -v 'dm-')
+ for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram | grep -v 'dm-' | grep -v fd )
do
devname=$(sys2dev "${sysblock}")
fstype=$(get_fstype "${devname}")
exec 7>&2
exec > live.log
exec 2>&1
+ tail -f live.log >&7 &
+ tailpid="${!}"
Arguments
exec 1>&6 6>&-
exec 2>&7 7>&-
+ kill ${tailpid}
cp live.log "${rootmnt}/var/log/"
}
langpart="${1%%_*}"
if [ "$1" != "C" ]; then
# Match the language code with 3rd field in languagelist
- line=$(grep -v "^#" /root/usr/share/localechooser/languagelist | cut -f3,4,5 -d\; | grep -v ';C$' | grep "^$langpart;")
+ line=$(grep -v "^#" /root/usr/share/live-initramfs/languagelist | cut -f3,4,5 -d\; | grep -v ';C$' | grep "^$langpart;")
if [ -n "$line" ]; then
if [ "$(echo "$line" | grep -c '')" -gt 1 ]; then
# More than one match; try matching the
echo ${r}
}
+is_supported_fs ()
+{
+ # FIXME: do something better like the scan of supported filesystems
+ fstype="${1}"
+
+ case ${fstype} in
+ vfat|iso9660|udf|ext2|ext3|ntfs|jffs2)
+ return 0
+ ;;
+ esac
+
+ return 1
+}
+
get_fstype ()
{
local FSTYPE
local pattern=${3}
local offset=${4}
local encryption=${5}
+ local readonly=${6}
modprobe -q -b "${module}"
udevsettle
dev=$(sys2dev "${loopdev}")
options=''
+ if [ -n ${readonly} ]
+ then
+ options="${options} -r"
+ fi
+
if [ 0 -lt "${offset}" ]
then
options="${options} -o ${offset}"
pers_label="${1}"
cow_backing="/${pers_label}-backing"
- for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram)
+ for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram | grep -v fd)
do
for dev in $(subdevices "${sysblock}")
do
filenames="${1}"
snap_backing="/snap-backing"
- for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram)
+ for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram | grep -v fd)
do
for dev in $(subdevices "${sysblock}")
do
devname=$(sys2dev "${dev}")
devfstype="$(get_fstype ${devname})"
- case "${devfstype}" in
- vfat|ext2|ext3|jffs2)
- # FIXME: all supported block devices should be scanned
- mkdir -p "${snap_backing}"
- try_mount "${devname}" "${snap_backing}" "ro"
+ if is_supported_fs ${devfstype}
+ then
+ mkdir -p "${snap_backing}"
+ try_mount "${devname}" "${snap_backing}" "ro"
- for filename in ${filenames}
+ for filename in ${filenames}
do
- if [ -f "${snap_backing}/${filename}" ]
- then
- echo "${devname} ${snap_backing} ${filename}"
- return 0
- fi
- done
-
- umount ${snap_backing}
- ;;
- esac
+ if [ -f "${snap_backing}/${filename}" ]
+ then
+ echo "${devname} ${snap_backing} ${filename}"
+ return 0
+ fi
+ done
+
+ umount ${snap_backing}
+ fi
done
done
}