summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>2011-08-12 00:10:44 -0300
committerGerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>2011-08-15 01:07:31 -0300
commit90cfe3ce2ce35382595223bf8d264fee63e86df5 (patch)
treea487b8010b3f96b857cb3c222f5ba6591841096e
parent12e9d32435c0d3c40168c3fea1b6092825227497 (diff)
downloadarchiso32-90cfe3ce2ce35382595223bf8d264fee63e86df5.tar.xz
[archiso] Add checksum= boot param
Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
-rw-r--r--README4
-rw-r--r--archiso/hooks/archiso26
-rwxr-xr-xarchiso/mkarchiso17
-rwxr-xr-xconfigs/baseline/build.sh1
-rwxr-xr-xconfigs/releng/build.sh2
5 files changed, 50 insertions, 0 deletions
diff --git a/README b/README
index ff1832e..97b5f77 100644
--- a/README
+++ b/README
@@ -31,6 +31,10 @@ INDEX
* copytoram= If set to "y" or just "copytoram" without arguments,
all SquashFS are copied to "RAM".
Default: (unset)
+* checksum= If set to "y" or just "checksum" without arguments,
+ performs a self-test of all files inside ${install_dir},
+ and continue booting if ok.
+ Default: (unset)
* cowspace_size= Set the size of tmpfs /cowspace. This space is used for
Copy-On-Write files of dm-snapshot.
(directory not visible outside initramfs)
diff --git a/archiso/hooks/archiso b/archiso/hooks/archiso
index 66dbafd..c973ffc 100644
--- a/archiso/hooks/archiso
+++ b/archiso/hooks/archiso
@@ -77,6 +77,16 @@ _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%"
@@ -135,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 12d8936..6826441 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
diff --git a/configs/baseline/build.sh b/configs/baseline/build.sh
index 2f28913..a3775c0 100755
--- a/configs/baseline/build.sh
+++ b/configs/baseline/build.sh
@@ -78,6 +78,7 @@ make_prepare() {
# Build ISO
make_iso() {
+ mkarchiso ${verbose} checksum "${work_dir}"
mkarchiso ${verbose} -D "${install_dir}" -L "${iso_label}" iso "${work_dir}" "${name}-${version}-${arch}.iso"
}
diff --git a/configs/releng/build.sh b/configs/releng/build.sh
index e75edb7..ab7aae7 100755
--- a/configs/releng/build.sh
+++ b/configs/releng/build.sh
@@ -163,6 +163,7 @@ make_prepare() {
# args: $1 (core | netinstall)
make_iso() {
local _iso_type=${1}
+ mkarchiso ${verbose} checksum "${work_dir}"
mkarchiso ${verbose} -D "${install_dir}" -L "${iso_label}" iso "${work_dir}" "${name}-${version}-${_iso_type}-${arch}.iso"
}
@@ -206,6 +207,7 @@ make_dual() {
sed "s|%ARCHISO_LABEL%|${iso_label}|g;
s|%INSTALL_DIR%|${install_dir}|g" ${_cfg} > ${work_dir}/dual/iso/${install_dir}/boot/syslinux/${_cfg##*/}
done
+ mkarchiso ${verbose} checksum "${work_dir}/dual"
mkarchiso ${verbose} -D "${install_dir}" -L "${iso_label}" iso "${work_dir}/dual" "${name}-${version}-${_iso_type}-dual.iso"
: > ${work_dir}/dual/build.${FUNCNAME}_${_iso_type}
fi