[arch-releng] [PATCH] [archiso] Checksum only aitab and *.sfs (per architecture)

Gerardo Exequiel Pozzi vmlinuz386 at yahoo.com.ar
Sun Nov 27 13:23:26 EST 2011


We are currently checksuming all files inside $archisobasedir
(aitab, *sfs, kernel/initramfs and boot/syslinux related files)
this is stored in one file only. Its works good for now,
but I think we only need to checksum only aitab and *.sfs if they are needed.
Currently if you boot a dual-iso in i686, also checksum is done
for *.sfs of x86_64. Not a big issue, this just take a bit more time.
The real issue is when booting via PXE with HTTP/FTP methods,
since they download only aitab and needed *.sfs files,
can not use directly the only one file where checksums are stored.

This patch does:

(1) Do not checksum syslinux related files, anyway you are already reach initramfs stage.
(2) Do not checksum kernel/initramfs files, for the same as (1)
(3) Two checksum.${arch}.md5 for each i686 and x86_64 for only aitab and *.sfs.

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386 at yahoo.com.ar>
---
 archiso/hooks/archiso |    8 ++++----
 archiso/mkarchiso     |   24 +++++++++++++++++-------
 2 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/archiso/hooks/archiso b/archiso/hooks/archiso
index d03914a..89bb209 100644
--- a/archiso/hooks/archiso
+++ b/archiso/hooks/archiso
@@ -122,7 +122,7 @@ _mnt_dev() {
 _verify_checksum() {
     local _status
     cd "/run/archiso/bootmnt/${archisobasedir}"
-    md5sum -c checksum.md5 > /checksum.log 2>&1
+    md5sum -c checksum.${arch}.md5 > /checksum.${arch}.log 2>&1
     _status=$?
     cd "${OLDPWD}"
     return ${_status}
@@ -177,17 +177,17 @@ archiso_mount_handler() {
     fi
 
     if [[ "${checksum}" == "y" ]]; then
-        if [[ -f "/run/archiso/bootmnt/${archisobasedir}/checksum.md5" ]]; then
+        if [[ -f "/run/archiso/bootmnt/${archisobasedir}/checksum.${arch}.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"
+                echo "see /checksum.${arch}.log for details"
                 launch_interactive_shell
             fi
         else
-            echo "ERROR: checksum=y option specified but checksum.md5 not found"
+            echo "ERROR: checksum=y option specified but checksum.${arch}.md5 not found"
             launch_interactive_shell
         fi
     fi
diff --git a/archiso/mkarchiso b/archiso/mkarchiso
index 5d77128..fed953e 100755
--- a/archiso/mkarchiso
+++ b/archiso/mkarchiso
@@ -299,13 +299,23 @@ _mkfs () {
 command_checksum () {
     _show_config checksum
 
-    if _is_directory_changed "${work_dir}/iso/${install_dir}" "${work_dir}/iso/${install_dir}/checksum.md5"; then
-        _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!"
-    fi
+    local _chk_arch
+
+    for _chk_arch in i686 x86_64; do
+        if _is_directory_changed "${work_dir}/iso/${install_dir}" "${work_dir}/iso/${install_dir}/checksum.${_chk_arch}.md5"; then
+            _msg_info "Creating checksum file for self-test (${_chk_arch})"
+            cd "${work_dir}/iso/${install_dir}"
+            if [[ -d "${_chk_arch}" ]]; then
+                md5sum aitab > checksum.${_chk_arch}.md5
+                find ${_chk_arch} -type f -print0 | xargs -0 md5sum >> checksum.${_chk_arch}.md5
+                if [[ -d "any" ]]; then
+                    find any -type f -print0 | xargs -0 md5sum >> checksum.${_chk_arch}.md5
+                fi
+            fi
+            cd ${OLDPWD}
+            _msg_info "Done!"
+        fi
+    done
 }
 
 # Create an ISO9660 filesystem from "iso" directory.
-- 
1.7.7.4



More information about the arch-releng mailing list