summaryrefslogtreecommitdiff
path: root/archiso
diff options
context:
space:
mode:
authorNicolás Reynolds <apoyosis@correo.inta.gob.ar>2011-08-17 12:26:22 -0300
committerNicolás Reynolds <apoyosis@correo.inta.gob.ar>2011-08-17 12:26:22 -0300
commitbe5fc1d5c788df0f2d8d050e97581977caf133a3 (patch)
tree39f6c577dbad42bbd5efc5eae6a4f316e476f3c1 /archiso
parentacdae85c827f2a6349397740c9e3ed2ded82cb07 (diff)
parent708ba38c206a2147fbd7a357d6ece8881807231d (diff)
Merge branch 'master' of https://projects.archlinux.org/git/archiso
Conflicts: configs/baseline/build.sh configs/baseline/syslinux/syslinux.cfg configs/releng/build.sh configs/releng/syslinux.dual/syslinux_arch32.cfg configs/releng/syslinux.dual/syslinux_arch64.cfg configs/releng/syslinux/syslinux.cfg
Diffstat (limited to 'archiso')
-rw-r--r--archiso/Makefile2
-rw-r--r--archiso/hooks/archiso36
-rwxr-xr-xarchiso/mkarchiso17
3 files changed, 50 insertions, 5 deletions
diff --git a/archiso/Makefile b/archiso/Makefile
index 78dd534..60632e2 100644
--- a/archiso/Makefile
+++ b/archiso/Makefile
@@ -20,7 +20,7 @@ install-hooks:
install-examples:
# install examples
install -d -m 755 $(DESTDIR)/usr/share/archiso/
- cp -r ../configs $(DESTDIR)/usr/share/archiso/configs
+ cp -r ../configs $(DESTDIR)/usr/share/archiso/
install-doc:
install -d -m 755 $(DESTDIR)/usr/share/archiso/
diff --git a/archiso/hooks/archiso b/archiso/hooks/archiso
index 7e2997a..c973ffc 100644
--- a/archiso/hooks/archiso
+++ b/archiso/hooks/archiso
@@ -29,6 +29,7 @@ _mnt_fs() {
local mnt="${2}"
local img_fullname="${img##*/}";
local img_name="${img_fullname%%.*}"
+ local dm_snap_name="${dm_snap_prefix}_${img_name}"
local ro_dev ro_dev_size ro_dev_fs_type rw_dev
mkdir -p "${mnt}"
@@ -42,11 +43,11 @@ _mnt_fs() {
_next_loop_dev
rw_dev=$(_make_loop_dev "/cowspace/${img_name}.cow")
- echo "0 ${ro_dev_size} snapshot ${ro_dev} ${rw_dev} N 8" | dmsetup create ${img_name}
+ echo "0 ${ro_dev_size} snapshot ${ro_dev} ${rw_dev} N 8" | dmsetup create ${dm_snap_name}
- msg ":: Mounting '/dev/mapper/${img_name}' (${ro_dev_fs_type}) to '${mnt}'"
- if ! mount -t "${ro_dev_fs_type}" "/dev/mapper/${img_name}" "${mnt}" ; then
- echo "ERROR: while mounting '/dev/mapper/${img_name}' to '${mnt}'"
+ msg ":: Mounting '/dev/mapper/${dm_snap_name}' (${ro_dev_fs_type}) to '${mnt}'"
+ if ! mount -t "${ro_dev_fs_type}" "/dev/mapper/${dm_snap_name}" "${mnt}" ; then
+ echo "ERROR: while mounting '/dev/mapper/${dm_snap_name}' to '${mnt}'"
launch_interactive_shell
fi
}
@@ -76,11 +77,22 @@ _mnt_sfs() {
fi
}
+_verify_checksum() {
+ local _status
+ cd "/bootmnt/${archisobasedir}"
+ md5sum -c checksum.md5 > /checksum.log 2>&1
+ _status=$?
+ cd "${OLDPWD}"
+ return ${_status}
+}
+
+
run_hook() {
[[ -z "${arch}" ]] && arch="$(uname -m)"
[[ -z "${cowspace_size}" ]] && cowspace_size="75%"
[[ -z "${copytoram_size}" ]] && copytoram_size="75%"
[[ -z "${archisobasedir}" ]] && archisobasedir="arch"
+ [[ -z "${dm_snap_prefix}" ]] && dm_snap_prefix="arch"
[[ -z "${archisodevice}" ]] && archisodevice="/dev/disk/by-label/${archisolabel}"
if [[ -z "${aitab}" ]]; then
aitab="/bootmnt/${archisobasedir}/aitab"
@@ -133,6 +145,22 @@ archiso_mount_handler() {
launch_interactive_shell
fi
+ if [[ "${checksum}" == "y" ]]; then
+ if [[ -f "/bootmnt/${archisobasedir}/checksum.md5" ]]; then
+ msg -n ":: Self-test requested, please wait..."
+ if _verify_checksum; then
+ msg "done. Checksum is OK, continue booting."
+ else
+ echo "ERROR: one or more files are corrupted"
+ echo "see /checksum.log for details"
+ launch_interactive_shell
+ fi
+ else
+ echo "ERROR: checksum=y option specified but checksum.md5 not found"
+ launch_interactive_shell
+ fi
+ fi
+
if [[ "${copytoram}" == "y" ]]; then
msg -n ":: Mounting /copytoram (tmpfs) filesystem, size=${copytoram_size}..."
mount -t tmpfs -o "size=${copytoram_size}",mode=0755 copytoram /copytoram
diff --git a/archiso/mkarchiso b/archiso/mkarchiso
index e09ad54..1c3242d 100755
--- a/archiso/mkarchiso
+++ b/archiso/mkarchiso
@@ -112,6 +112,8 @@ _usage ()
echo " includes all specified packages"
echo " prepare <dir>"
echo " build all images"
+ echo " checksum <dir>"
+ echo " make a checksum.md5 for self-test"
echo " iso <dir> <image name>"
echo " build an iso image from the working dir"
exit ${1}
@@ -134,6 +136,8 @@ _show_config () {
;;
prepare)
;;
+ checksum)
+ ;;
iso)
_msg_info " Image name: ${img_name}"
_msg_info " Disk label: ${iso_label}"
@@ -286,6 +290,16 @@ _mkfs () {
_umount_fs "${work_dir}/mnt/${_src}"
}
+command_checksum () {
+ _show_config checksum
+
+ _msg_info "Creating checksum file for self-test"
+ cd "${work_dir}/iso/${install_dir}"
+ find -type f ! -name checksum.md5 -print0 | xargs -0 md5sum > checksum.md5
+ cd ${OLDPWD}
+ _msg_info "Done!"
+}
+
# Create an ISO9660 filesystem from "iso" directory.
command_iso () {
if [[ ! -f "${work_dir}/iso/isolinux/isolinux.bin" ]]; then
@@ -428,6 +442,9 @@ case "${command_name}" in
prepare)
command_prepare
;;
+ checksum)
+ command_checksum
+ ;;
iso)
if [[ $# -lt 3 ]]; then
_msg_error "No image specified" 0