[arch-releng] [PATCH 3/3] [configs/releng] Support configurable build options via command line

Gerardo Exequiel Pozzi vmlinuz386 at yahoo.com.ar
Sun Aug 21 19:08:09 EDT 2011


usage ./build.sh [options] command <command options>

 General options:
    -N <iso_name>      Set an iso filename (prefix)
                        Default: archlinux
    -V <iso_version>   Set an iso version (in filename)
                        Default: 2011.08.18
    -L <iso_label>     Set an iso label (disk label)
                        Default: ARCH_201108
    -D <install_dir>   Set an install_dir (directory inside iso)
                        Default: arch
    -w <work_dir>      Set the working directory
                        Default: work
    -o <out_dir>       Set the output directory
                        Default: out
    -v                 Enable verbose output
    -h                 This help message

 Commands:
   build <mode> <type>
      Build selected .iso by <mode> and <type>
   purge <mode>
      Clean working directory except iso/ directory of build <mode>
   clean <mode>
      Clean working directory and .iso file in output directory of build <mode>

 Command options:
         <mode> Valid values 'single' or 'dual'
         <type> Valid values 'netinstall', 'core' or 'all'

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386 at yahoo.com.ar>
---
 README                  |   15 ++--
 configs/releng/build.sh |  239 ++++++++++++++++++++++++++++++++++-------------
 2 files changed, 183 insertions(+), 71 deletions(-)

diff --git a/README b/README
index 97b5f77..88b3243 100644
--- a/README
+++ b/README
@@ -240,23 +240,24 @@ Note: These steps should be done with 64 bits support.
 * Enter 32 bits chroot enviroment then build core and netinstall single images.
 
   [chroot32] # linux32 mkarchroot -r bash /tmp/chroot32
-  [chroot32] # mknod /dev/loop1032 b 7 1032 #assumed loop.max_part=0 (by default)
+  [chroot32] # mknod /dev/loop1032 b 7 1032  # assumed loop.max_part=0 (by default)
   [chroot32] # cp -r /usr/share/archiso/configs/releng /tmp
   [chroot32] # cd /tmp/releng
-  [chroot32] # ./build.sh all_iso_single
-  [chroot32] # ./build.sh purge_single #optional
+  [chroot32] # ./build.sh build single all
+  [chroot32] # ./build.sh purge single       # optional step
 
 * Enter 64 bits chroot enviroment then build core and netinstall single images.
 
   [chroot64] # mkarchroot -r bash /tmp/chroot64
-  [chroot64] # mknod /dev/loop1064 b 7 1064 #assumed loop.max_part=0 (by default)
+  [chroot64] # mknod /dev/loop1064 b 7 1064  # assumed loop.max_part=0 (by default)
   [chroot64] # cp -r /usr/share/archiso/configs/releng /tmp
   [chroot64] # cd /tmp/releng
-  [chroot64] # ./build.sh all_iso_single
-  [chroot64] # ./build.sh purge_single #optional
+  [chroot64] # ./build.sh build single all
+  [chroot64] # ./build.sh purge single       # optional step
 
 * Build core and netinstall dual images from any of the chroot enviroments.
 
   [host64] # mkarchroot -r bash /tmp/chroot64
   [chroot64] # cd /tmp/releng
-  [chroot64] # ./build.sh all_iso_dual
+  [chroot64] # ./build.sh build dual all
+  [chroot64] # ./build.sh purge dual         # optional step
diff --git a/configs/releng/build.sh b/configs/releng/build.sh
index cfcd2a1..7d84bce 100755
--- a/configs/releng/build.sh
+++ b/configs/releng/build.sh
@@ -9,7 +9,7 @@ install_dir=arch
 arch=$(uname -m)
 work_dir=work
 out_dir=out
-verbose="n"
+verbose=""
 
 script_path=$(readlink -f ${0%/*})
 
@@ -215,13 +215,82 @@ make_dual() {
     fi
 }
 
+purge_single ()
+{
+    if [[ -d ${work_dir} ]]; then
+        find ${work_dir} -mindepth 1 -maxdepth 1 \
+            ! -path ${work_dir}/iso -prune \
+            | xargs rm -rf
+    fi
+}
+
+purge_dual ()
+{
+    if [[ -d ${work_dir}/dual ]]; then
+        find ${work_dir}/dual -mindepth 1 -maxdepth 1 \
+            ! -path ${work_dir}/dual/iso -prune \
+            | xargs rm -rf
+    fi
+}
+
+clean_single ()
+{
+    rm -rf ${work_dir}
+    rm -f ${out_dir}/${iso_name}-${iso_version}-*-${arch}.iso
+}
 
+clean_dual ()
+{
+    rm -rf ${work_dir}/dual
+    rm -f ${out_dir}/${iso_name}-${iso_version}-*-dual.iso
+}
+
+make_common_single() {
+    make_basefs
+    make_packages
+    make_customize_root_image
+    make_setup_mkinitcpio
+    make_boot
+    make_syslinux
+    make_isolinux
+    make_lib_modules
+    make_usr_share
+    make_aitab $1
+    make_prepare $1
+    make_iso $1
+}
 
 _usage ()
 {
-    echo "usage ${0##*/} net_iso_single | core_iso_single | all_iso_single | purge_single | clean_single"
-    echo "               net_iso_dual   | core_iso_dual   | all_iso_dual   | purge_dual   | clean_dual"
+    echo "usage ${0} [options] command <command options>"
+    echo
+    echo " General options:"
+    echo "    -N <iso_name>      Set an iso filename (prefix)"
+    echo "                        Default: ${iso_name}"
+    echo "    -V <iso_version>   Set an iso version (in filename)"
+    echo "                        Default: ${iso_version}"
+    echo "    -L <iso_label>     Set an iso label (disk label)"
+    echo "                        Default: ${iso_label}"
+    echo "    -D <install_dir>   Set an install_dir (directory inside iso)"
+    echo "                        Default: ${install_dir}"
+    echo "    -w <work_dir>      Set the working directory"
+    echo "                        Default: ${work_dir}"
+    echo "    -o <out_dir>       Set the output directory"
+    echo "                        Default: ${out_dir}"
+    echo "    -v                 Enable verbose output"
+    echo "    -h                 This help message"
     echo
+    echo " Commands:"
+    echo "   build <mode> <type>"
+    echo "      Build selected .iso by <mode> and <type>"
+    echo "   purge <mode>"
+    echo "      Clean working directory except iso/ directory of build <mode>"
+    echo "   clean <mode>"
+    echo "      Clean working directory and .iso file in output directory of build <mode>"
+    echo
+    echo " Command options:"
+    echo "         <mode> Valid values 'single' or 'dual'"
+    echo "         <type> Valid values 'netinstall', 'core' or 'all'"
     exit ${1}
 }
 
@@ -230,81 +299,123 @@ if [[ ${EUID} -ne 0 ]]; then
     _usage 1
 fi
 
+while getopts 'N:V:L:D:w:o:vh' arg; do
+    case "${arg}" in
+        N) iso_name="${OPTARG}" ;;
+        V) iso_version="${OPTARG}" ;;
+        L) iso_label="${OPTARG}" ;;
+        D) install_dir="${OPTARG}" ;;
+        w) work_dir="${OPTARG}" ;;
+        o) out_dir="${OPTARG}" ;;
+        v) verbose="-v" ;;
+        h|?) _usage 0 ;;
+        *)
+            _msg_error "Invalid argument '${arg}'" 0
+            _usage 1
+            ;;
+    esac
+done
+
+shift $((OPTIND - 1))
+
 if [[ $# -lt 1 ]]; then
     echo "No command specified"
     _usage 1
 fi
 command_name="${1}"
 
-if [[ ${verbose} == "y" ]]; then
-    verbose="-v"
-else
-    verbose=""
+if [[ $# -lt 2 ]]; then
+    echo "No command mode specified"
+    _usage 1
 fi
+command_mode="${2}"
 
-if [[ ${command_name} =~ single ]]; then
-    work_dir=${work_dir}/${arch}
+if [[ ${command_name} == "build" ]]; then
+    if [[ $# -lt 3 ]]; then
+        echo "No build type specified"
+        _usage 1
+    fi
+command_type="${3}"
 fi
 
-make_common_single() {
-    make_basefs
-    make_packages
-    make_customize_root_image
-    make_setup_mkinitcpio
-    make_boot
-    make_syslinux
-    make_isolinux
-    make_lib_modules
-    make_usr_share
-    make_aitab $1
-    make_prepare $1
-    make_iso $1
-}
+if [[ ${command_mode} == "single" ]]; then
+    work_dir=${work_dir}/${arch}
+fi
 
 case "${command_name}" in
-    net_iso_single)
-        make_common_single netinstall
-        ;;
-    core_iso_single)
-        make_core_repo
-        make_common_single core
-        ;;
-    all_iso_single)
-        make_common_single netinstall
-        make_core_repo
-        make_common_single core
-        ;;
-    net_iso_dual)
-        make_dual netinstall
-        ;;
-    core_iso_dual)
-        make_dual core
-        ;;
-    all_iso_dual)
-        make_dual netinstall
-        make_dual core
-        ;;
-    purge_single)
-        if [[ -d ${work_dir} ]]; then
-            find ${work_dir} -mindepth 1 -maxdepth 1 \
-                ! -path ${work_dir}/iso -prune \
-                | xargs rm -rf
-        fi
-        ;;
-    purge_dual)
-        if [[ -d ${work_dir}/dual ]]; then
-            find ${work_dir}/dual -mindepth 1 -maxdepth 1 \
-                ! -path ${work_dir}/dual/iso -prune \
-                | xargs rm -rf
-        fi
+    build)
+        case "${command_mode}" in
+            single)
+                case "${command_type}" in
+                    netinstall)
+                        make_common_single netinstall
+                        ;;
+                    core)
+                        make_core_repo
+                        make_common_single core
+                        ;;
+                    all)
+                        make_common_single netinstall
+                        make_core_repo
+                        make_common_single core
+                        ;;
+                    *)
+                        echo "Invalid build type '${command_type}'"
+                        _usage 1
+                        ;;
+                esac
+                ;;
+            dual)
+                case "${command_type}" in
+                    netinstall)
+                        make_dual netinstall
+                        ;;
+                    core)
+                        make_dual core
+                        ;;
+                    all)
+                        make_dual netinstall
+                        make_dual core
+                        ;;
+                    *)
+                        echo "Invalid build type '${command_type}'"
+                        _usage 1
+                        ;;
+                esac
+                ;;
+            *)
+                echo "Invalid build mode '${command_mode}'"
+                _usage 1
+                ;;
+        esac
         ;;
-    clean_single)
-        rm -rf ${work_dir}
-        rm -f ${out_dir}/${iso_name}-${iso_version}-*-${arch}.iso
+    purge)
+        case "${command_mode}" in
+            single)
+                purge_single
+                ;;
+            dual)
+                purge_dual
+                ;;
+            *)
+                echo "Invalid purge mode '${command_mode}'"
+                _usage 1
+                ;;
+        esac
         ;;
-    clean_dual)
-        rm -rf ${work_dir}/dual
-        rm -f ${out_dir}/${iso_name}-${iso_version}-*-dual.iso
+    clean)
+        case "${command_mode}" in
+            single)
+                clean_single
+                ;;
+            dual)
+                clean_dual
+                ;;
+            *)
+                echo "Invalid clean mode '${command_mode}'"
+                _usage 1
+                ;;
+        esac
         ;;
     *)
         echo "Invalid command name '${command_name}'"
-- 
1.7.6



More information about the arch-releng mailing list