OSDN Git Service

[add] : i686 packages
[alterlinux/alterlinux.git] / wizard.sh
index 312eb9c..ae6a1ec 100755 (executable)
--- a/wizard.sh
+++ b/wizard.sh
@@ -2,9 +2,223 @@
 
 set -e
 
+nobuild=false
+
+script_path="$(readlink -f ${0%/*})"
+
+build_arch=$(uname -m)
+
+machine_arch=$(uname -m)
+
+# Pacman configuration file used only when checking packages.
+pacman_conf="${script_path}/system/pacman-${machine_arch}.conf"
+
+# 言語(en or jp)
+#lang="jp"
+lang="en"
+skip_set_lang=false
+
+
+dependence=(
+    "alterlinux-keyring"
+#   "archiso"
+    "arch-install-scripts"
+    "curl"
+    "dosfstools"
+    "edk2-shell"
+    "git"
+    "libburn"
+    "libisofs"
+    "lz4"
+    "lzo"
+    "make"
+    "squashfs-tools"
+    "libisoburn"
+ #  "lynx"
+    "xz"
+    "zlib"
+    "zstd"
+)
+
+
+# メッセージを表示する
+# msg [日本語] [英語]
+function msg() {
+    if [[ ${lang} = "jp" ]]; then
+        echo "${1}"
+    else
+        echo "${2}"
+    fi
+}
+function msg_error() {
+    if [[ ${lang} = "jp" ]]; then
+        echo "${1}" >&2
+    else
+        echo "${1}" >&2
+    fi
+}
+function msg_n() {
+    if [[ ${lang} = "jp" ]]; then
+        echo -n "${1}"
+    else
+        echo -n "${2}"
+    fi
+}
+
+while getopts 'a:xnje' arg; do
+    case "${arg}" in
+        n)
+            nobuild=true
+            msg \
+                "シミュレーションモードを有効化しました" "Enabled simulation mode"
+            ;;
+        x)
+            set -x 
+            msg "デバッグモードを有効化しました" "Debug mode enabled"
+            ;;
+        e)
+            lang="en"
+            echo "English is set"
+            skip_set_lang=true
+            ;;
+        j)
+            lang="jp"
+            echo "日本語が設定されました"
+            skip_set_lang=true
+            ;;
+        a)
+            build_arch="${OPTARG}"
+            ;;
+    esac
+done
+
+function set_language () {
+    if [[ ${skip_set_lang} = false ]]; then
+        echo "このウィザードでどちらの言語を使用しますか?"
+        echo "この質問はウィザード内のみの設定であり、ビルドへの影響はありません。"
+        echo
+        echo "Which language would you like to use for this wizard?"
+        echo "This question is a wizard-only setting and does not affect the build."
+        echo
+        echo "1: 英語 English"
+        echo "2: 日本語 Japanese"
+        echo
+        echo -n ": "
+        read lang
+
+        case ${lang} in
+            1 ) lang=en ;;
+            2 ) lang=jp ;;
+            "英語" ) lang=en ;;
+            "日本語" ) lang=jp ;;
+            "English" ) lang=en ;;
+            "Japanese" ) lang=jp ;;
+            * ) set_language ;;
+        esac
+    fi
+}
+
+function check_files () {
+    local file
+    local _chkfile
+    local i
+    local error
+
+    error=false
+    _chkfile() {
+        if [[ ! -f "${1}" ]]; then
+            msg_error "${1}が見つかりませんでした。" "${1} was not found."
+            error=true
+        fi
+    }
+
+    file=(
+        "build.sh"
+        "keyring.sh"
+        "system/pacman-i686.conf"
+        "system/pacman-x86_64.conf"
+    )
+
+    for i in ${file[@]}; do
+        _chkfile "${script_path}/${i}"
+    done
+    if [[ "${error}" = true ]]; then
+        exit 1
+    fi
+}
+
+
+function install_dependencies () {
+    local checkpkg
+    local pkg
+    local installed_pkg
+    local installed_ver
+    local check_pkg
+
+    msg "データベースの更新をしています..." "Updating package datebase..."
+    sudo pacman -Sy --config "${pacman_conf}"
+    installed_pkg=($(pacman -Q | awk '{print $1}'))
+    installed_ver=($(pacman -Q | awk '{print $2}'))
+
+    check_pkg() {
+        local i
+        for i in $(seq 0 $(( ${#installed_pkg[@]} - 1 ))); do
+            if [[ ${installed_pkg[${i}]} = ${1} ]]; then
+                if [[ ${installed_ver[${i}]} = $(pacman -Sp --print-format '%v' --config ${pacman_conf} ${1}) ]]; then
+                    echo -n "true"
+                    return 0
+                else
+                    echo -n "false"
+                    return 0
+                fi
+            fi
+        done
+        echo -n "false"
+        return 0
+    }
+
+    for pkg in ${dependence[@]}; do
+        msg "依存パッケージ ${pkg} を確認しています..." "Checking dependency package ${pkg} ..."
+        if [[ $(check_pkg ${pkg}) = false ]]; then
+            install=(${install[@]} ${pkg})
+        fi
+    done
+    if [[ -n "${install}" ]]; then
+        sudo pacman -Sy
+        sudo pacman -S --needed --config ${pacman_conf} ${install[@]}
+    fi
+    echo
+}
+
+
+function run_add_key_script () {
+    local yn
+    msg_n "AlterLinuxの鍵を追加しますか?(y/N): " "Are you sure you want to add the AlterLinux key? (y/N):"
+    read yn
+    if ${nobuild}; then
+        msg \
+            "${yn}が入力されました。シミュレーションモードが有効化されているためスキップします。" \
+            "You have entered ${yn}. Simulation mode is enabled and will be skipped."
+    else
+        case ${yn} in
+            y | Y | yes | Yes | YES ) sudo "${script_path}/keyring.sh" --alter-add   ;;
+            n | N | no  | No  | NO  ) return 0                                       ;;
+            *                       ) run_add_key_script                             ;;
+        esac
+    fi
+}
+
+
+function remove_dependencies () {
+    if [[ -n "${install}" ]]; then
+        sudo pacman -Rsn --config ${pacman_conf} ${install[@]}
+    fi
+}
+
+
 function enable_plymouth () {
     local yn
-    echo -n "Plymouthを有効化しますか? (y/N) : "
+    msg_n "Plymouthを有効化しますか?[no](y/N) : " "Do you want to enable Plymouth? [no] (y/N) : "
     read yn
     case ${yn} in
         y | Y | yes | Yes | YES ) plymouth=true   ;;
@@ -13,56 +227,76 @@ function enable_plymouth () {
     esac
 }
 
-function select_comp_type () {
-    local yn
-    echo "圧縮方式を以下の番号から選択してください "
-    echo
-    echo "1: gzip"
-    echo "2: lzma"
-    echo "3: lzo"
-    echo "4: lz4"
-    echo "5: xz"
-    echo "6: zstd"
-    echo -n ": "
 
+function enable_japanese () {
+    local yn
+    msg_n "日本語を有効化しますか?[no](y/N) : " "Do you want to activate Japanese? [no] (y/N) : "
     read yn
-
     case ${yn} in
-           1) comp_type="gzip" ;;
-           2) comp_type="lzma" ;;
-           3) comp_type="lzo"  ;;
-           4) comp_type="lz4"  ;;
-           5) comp_type="xz"   ;;
-           6) comp_type="zstd" ;;
-        gzip) comp_type="gzip" ;;
-        lzma) comp_type="lzma" ;;
-        lzo ) comp_type="lzo"  ;;
-        lz4 ) comp_type="lz4"  ;;
-        xz  ) comp_type="xz"   ;;
-        zstd) comp_type="zstd" ;;
-        *) select_comp_type ;;
+        y | Y | yes | Yes | YES ) japanese=true   ;;
+        n | N | no  | No  | NO  ) japanese=false  ;;
+        *                       ) enable_japanese ;;
     esac
 }
 
-function set_comp_option () {
 
-    # lzmaには詳細なオプションはありません。
-    if [[ ! ${comp_type} = "lzma" ]]; then
-        local yn
-        local details
-        echo -n "圧縮の詳細を設定しますか? (y/N) : "
+function select_comp_type () {
+    local yn
+    local details
+    local ask_comp_type
+    msg_n "圧縮方式を設定しますか?[zstd](y/N) : " "Do you want to set the compression method?[zstd](y/N)"
+    read yn
+    case ${yn} in
+        y | Y | yes | Yes | YES ) details=true               ;;
+        n | N | no  | No  | NO  ) details=false              ;;
+        *                       ) select_comp_type; return 0 ;;
+    esac
+
+    function ask_comp_type () {
+        msg \
+            "圧縮方式を以下の番号から選択してください " \
+            "Please select the compression method from the following numbers"
+        echo
+        echo "1: gzip"
+        echo "2: lzma"
+        echo "3: lzo"
+        echo "4: lz4"
+        echo "5: xz"
+        echo "6: zstd (default)"
+        echo -n ": "
+
         read yn
+
         case ${yn} in
-            y | Y | yes | Yes | YES ) details=true    ;;
-            n | N | no  | No  | NO  ) details=false   ;;
-            *                       ) set_comp_option ; return 0;;
+            1    ) comp_type="gzip" ;;
+            2    ) comp_type="lzma" ;;
+            3    ) comp_type="lzo"  ;;
+            4    ) comp_type="lz4"  ;;
+            5    ) comp_type="xz"   ;;
+            6    ) comp_type="zstd" ;;
+            gzip ) comp_type="gzip" ;;
+            lzma ) comp_type="lzma" ;;
+            lzo  ) comp_type="lzo"  ;;
+            lz4  ) comp_type="lz4"  ;;
+            xz   ) comp_type="xz"   ;;
+            zstd ) comp_type="zstd" ;;
+            *    ) ask_comp_type    ;;
         esac
-        if ${details}; then
-            :
-        else
-            return 0
-        fi
+    }
 
+    if [[ ${details} = true ]]; then
+        ask_comp_type
+    else
+        comp_type="zstd"
+    fi
+
+    return 0
+}
+
+
+function set_comp_option () {
+    local ask_comp_option
+    ask_comp_option() {
         local gzip
         local lzo
         local lz4
@@ -74,7 +308,7 @@ function set_comp_option () {
             local comp_level
             function comp_level () {
                 local level
-                echo -n "gzipの圧縮レベルを入力してください。 (1~22) : "
+                msg_n "gzipの圧縮レベルを入力してください。 (1~22) : " "Enter the gzip compression level.  (1~22) : "
                 read level
                 if [[ ${level} -lt 23 && ${level} -ge 4 ]]; then
                     comp_option="-Xcompression-level ${level}"
@@ -85,7 +319,10 @@ function set_comp_option () {
             local window_size
             function window_size () {
                 local window
-                echo -n "gzipのウィンドウサイズを入力してください。 (1~15) : "
+                msg_n \
+                    "gzipのウィンドウサイズを入力してください。 (1~15) : " \
+                    "Please enter the gzip window size. (1~15) : "
+
                 read window
                 if [[ ${window} -lt 16 && ${window} -ge 4 ]]; then
                     comp_option="${comp_option} -Xwindow-size ${window}"
@@ -98,7 +335,9 @@ function set_comp_option () {
 
         function lz4 () {
             local yn
-            echo -n "高圧縮モードを有効化しますか? (y/N) : "
+            msg_n \
+                "高圧縮モードを有効化しますか? (y/N) : " \
+                "Do you want to enable high compression mode? (y/N) : "
             read yn
             case ${yn} in
                 y | Y | yes | Yes | YES ) comp_option="-Xhc" ;;
@@ -109,7 +348,9 @@ function set_comp_option () {
 
         function zstd () {
             local level
-            echo -n "zstdの圧縮レベルを入力してください。 (1~22) : "
+            msg_n \
+                "zstdの圧縮レベルを入力してください。 (1~22) : " \
+                "Enter the zstd compression level. (1~22) : "
             read level
             if [[ ${level} -lt 23 && ${level} -ge 4 ]]; then
                 comp_option="-Xcompression-level ${level}"
@@ -119,11 +360,15 @@ function set_comp_option () {
         }
 
         function lzo () {
-            echo "現在lzoは詳細プションのウィザードがサポートされていません。" >&2
+            msg_error \
+                "現在lzoの詳細設定ウィザードがサポートされていません。" \
+                "The lzo Advanced Wizard is not currently supported."
         }
 
         function xz () {
-            echo "現在xzは詳細プションのウィザードがサポートされていません。" >&2
+            msg_error \
+            "現在xzの詳細設定のウィザードがサポートされていません。" \
+            "The xz Advanced Wizard is not currently supported."
         }
 
         case ${comp_type} in
@@ -134,27 +379,100 @@ function set_comp_option () {
             xz   ) xz   ;;
             *    ) :    ;;
         esac
+    }
+
+    # lzmaには詳細なオプションはありません。
+    if [[ ! ${comp_type} = "lzma" ]]; then
+        local yn
+        local details
+        msg_n \
+            "圧縮の詳細を設定しますか? (y/N) : " \
+            "Do you want to set the compression details? (y/N) : "
+        read yn
+        case ${yn} in
+            y | Y | yes | Yes | YES ) details=true              ;;
+            n | N | no  | No  | NO  ) details=false             ;;
+            *                       ) set_comp_option; return 0 ;;
+        esac
+        if [[ ${details} = true ]]; then
+            ask_comp_option
+            return 0
+        else
+            return 0
+        fi
+    fi
+}
+
+
+function set_username () {
+    local details
+    local ask_comp_type
+    msg_n \
+        "デフォルトではないユーザー名を設定しますか? (y/N) : " \
+        "Would you like to set a non-default username? (y/N) : "
+    read yn
+    case ${yn} in
+        y | Y | yes | Yes | YES ) details=true           ;;
+        n | N | no  | No  | NO  ) details=false          ;;
+        *                       ) set_username; return 0 ;;
+    esac
+
+    function ask_username () {
+        msg_n "ユーザー名を入力してください : " "Please enter your username : "
+        read username
+        if [[ -z ${username} ]]; then
+            ask_username
+        fi
+    }
+
+    if [[ ${details} = true ]]; then
+        ask_username
     fi
+
+    return 0
 }
 
+
 function set_password () {
-    echo -n "パスワードを入力してください : "
-    read -s password
-    echo
-    echo -n "もう一度入力してください : "
-    read -s confirm
-    if [[ ! $password = $confirm ]]; then
+    local details
+    local ask_comp_type
+    msg_n \
+        "デフォルトではないパスワードを設定しますか? (y/N) : " \
+        "Do you want to set a non-default password? (y/N) : "
+    read yn
+    case ${yn} in
+        y | Y | yes | Yes | YES ) details=true           ;;
+        n | N | no  | No  | NO  ) details=false          ;;
+        *                       ) set_password; return 0 ;;
+    esac
+
+    function ask_password () {
+        msg_n "パスワードを入力してください。" "Please enter your password."
+        read -s password
         echo
-        echo "同じパスワードが入力されませんでした。"
-        set_password
-    elif [[ -z $password || -z $confirm ]]; then
+        msg_n "Type it again : "
+        read -s confirm
+        if [[ ! $password = $confirm ]]; then
+            echo
+            msg_error "同じパスワードが入力されませんでした。" "You did not enter the same password."
+            ask_password
+        elif [[ -z $password || -z $confirm ]]; then
+            echo
+            msg_error "パスワードを入力してください。" "Please enter your password."
+            ask_password
+        fi
         echo
-        echo "パスワードを入力してください。"
-        set_password
+        unset confirm
+    }
+
+    if [[ ${details} = true ]]; then
+        ask_password
     fi
-    unset confirm
+
+    return 0
 }
 
+
 function select_kernel () {
     set +e
     local do_you_want_to_select_kernel
@@ -162,12 +480,14 @@ function select_kernel () {
     function do_you_want_to_select_kernel () {
         set +e
         local yn
-        echo -n "通常以外のLinuxカーネルを使用しますか? (y/N) : "
+        msg_n \
+            "デフォルト(zen)以外のカーネルを使用しますか? (y/N) : " \
+            "Do you want to use a kernel other than the default (zen)? (y/N) : "
         read yn
         case ${yn} in
-            y | Y | yes | Yes | YES ) return 0    ;;
-            n | N | no  | No  | NO  ) return 1    ;;
-            *                       ) do_you_want_to_select_kernel ; return;;
+            y | Y | yes | Yes | YES ) return 0                               ;;
+            n | N | no  | No  | NO  ) return 1                               ;;
+            *                       ) do_you_want_to_select_kernel; return 0 ;;
         esac
 
     }
@@ -175,30 +495,53 @@ function select_kernel () {
     local what_kernel
 
     function what_kernel () {
-        echo "使用するカーネルを以下の番号から選択してください "
+        msg \
+            "使用するカーネルを以下の番号から選択してください" \
+            "Please select the kernel to use from the following numbers"
+
+
+        #カーネルの一覧を取得
+        kernel_list=($(cat ${script_path}/system/kernel_list-${build_arch} | grep -h -v ^'#'))
+
+        #選択肢の生成
+        local count=1
+        local i
         echo
-        echo "1: linux-lts"
-        echo "2: linux-zen"
-        echo "3: linux-ck"
-        echo "4: linux-rt"
-        echo "5: linux-lqx"
-        echo -n ": "
+        for i in ${kernel_list[@]}; do
+            echo "${count}: linux-${i}"
+            count=$(( count + 1 ))
+        done
 
-        read yn
+        # 質問する
+        echo -n ": "
+        local answer
+        read answer
 
-        case ${yn} in
-            1) kernel="lts" ;;
-            2) kernel="zen" ;;
-            3) kernel="ck"  ;;
-            4) kernel="rt"  ;;
-            5) kernel="lqx" ;;
-            lts) kernel="lts" ;;
-            zen) kernel="zen" ;;
-            ck) kernel="ck"  ;;
-            rt) kernel="rt"  ;;
-            lqx) kernel="lqx" ;;
-            *) what_kernel ;;
-        esac
+        # 回答を解析する
+        # 数字かどうか判定する
+        set +e
+        expr "${answer}" + 1 >/dev/null 2>&1
+        if [[ ${?} -lt 2 ]]; then
+            set -e
+            # 数字である
+            answer=$(( answer - 1 ))
+            if [[ -z "${kernel_list[${answer}]}" ]]; then
+                what_kernel
+                return 0
+            else
+                kernel="${kernel_list[${answer}]}"
+            fi
+        else
+            set -e
+            # 数字ではない
+            # 配列に含まれるかどうか判定
+            if [[ ! $(printf '%s\n' "${kernel_list[@]}" | grep -qx "${answer#linux-}"; echo -n ${?} ) -eq 0 ]]; then
+                ask_channel
+                return 0
+            else
+                kernel="${answer#linux-}"
+            fi
+        fi
     }
 
     do_you_want_to_select_kernel
@@ -210,8 +553,167 @@ function select_kernel () {
 }
 
 
+# チャンネルの指定
+function select_channel () {
+    local ask_channel
+
+    msg_n \
+        "デフォルト(xfce)以外のチャンネルを使用しますか? (y/N) : " \
+        "Do you want to use a channel other than the default (xfce)? (y/N) : "
+
+    read yn
+    case ${yn} in
+        y | Y | yes | Yes | YES ) details=true             ;;
+        n | N | no  | No  | NO  ) details=false            ;;
+        *                       ) select_channel; return 0 ;;
+    esac
+
+    function ask_channel () {
+        local i
+        local count
+        local _channel
+        local channel_list
+        local description
+
+        # チャンネルの一覧を生成
+        for i in $(ls -l "${script_path}"/channels/ | awk '$1 ~ /d/ {print $9 }'); do
+            if [[ -n $(ls "${script_path}"/channels/${i}) ]] && [[ ! ${i} = "share" ]]; then
+                if [[ -n $(cat ${script_path}/channels/${i}/architecture | grep -h -v ^'#' | grep -x "${build_arch}") ]]; then
+                    channel_list=(${channel_list[@]} ${i})
+                fi
+            fi
+        done
+        msg "チャンネルを以下の番号から選択してください。" "Select a channel from the numbers below."
+        count=1
+        for _channel in ${channel_list[@]}; do
+            if [[ -f "${script_path}/channels/${_channel}/description.txt" ]]; then
+                description=$(cat "${script_path}/channels/${_channel}/description.txt")
+            else
+                if [[ "${lang}"  = "jp" ]]; then
+                    description="このチャンネルにはdescription.txtがありません。"
+                else
+                    description="This channel does not have a description.txt."
+                fi
+            fi
+            if [[ $(echo "${_channel}" | sed 's/^.*\.\([^\.]*\)$/\1/') = "add" ]]; then
+                echo -ne "${count}    $(echo ${_channel} | sed 's/\.[^\.]*$//')"
+                for i in $( seq 1 $(( 23 - ${#_channel} )) ); do
+                    echo -ne " "
+                done
+            else
+                echo -ne "${count}    ${_channel}"
+                for i in $( seq 1 $(( 19 - ${#_channel} )) ); do
+                    echo -ne " "
+                done
+            fi
+            echo -ne "${description}\n"
+            count=$(( count + 1 ))
+        done
+        echo -n ":"
+        read channel
+
+        # 数字かどうか判定する
+        set +e
+        expr "${channel}" + 1 >/dev/null 2>&1
+        if [[ ${?} -lt 2 ]]; then
+            set -e
+            # 数字である
+            channel=$(( channel - 1 ))
+            if [[ -z "${channel_list[${channel}]}" ]]; then
+                ask_channel
+                return 0
+            else
+                channel="${channel_list[${channel}]}"
+            fi
+        else
+            set -e
+            # 数字ではない
+            if [[ ! $(printf '%s\n' "${channel_list[@]}" | grep -qx "${channel}.add"; echo -n ${?} ) -eq 0 ]]; then
+                if [[ ! $(printf '%s\n' "${channel_list[@]}" | grep -qx "${channel}"; echo -n ${?} ) -eq 0 ]]; then
+                    ask_channel
+                    return 0
+                fi
+            fi
+        fi
+    }
+
+    if [[ ${details} = true ]]; then
+        ask_channel
+    fi
+    # echo ${channel}
+    return 0
+}
+
+
+# イメージファイルの所有者
+function set_iso_owner () {
+    local owner
+    local user_check
+    function user_check () {
+    if [[ $(getent passwd $1 > /dev/null ; printf $?) = 0 ]]; then
+        if [[ -z $1 ]]; then
+            echo -n "false"
+        fi
+        echo -n "true"
+    else
+        echo -n "false"
+    fi
+    }
+
+    msg_n "イメージファイルの所有者を入力してください。: " "Enter the owner of the image file.: "
+    read owner
+    if [[ $(user_check ${owner}) = false ]]; then
+        echo "ユーザーが存在しません。"
+        set_iso_owner
+        return 0
+    elif  [[ -z "${owner}" ]]; then
+        echo "ユーザー名を入力して下さい。"
+        set_iso_owner
+        return 0
+    elif [[ "${owner}" = root ]]; then
+        echo "所有者の変更を行いません。"
+        return 0
+    fi
+}
+
+
+# イメージファイルの作成先
+function set_out_dir () {
+    msg "イメージファイルの作成先を入力して下さい。" "Enter the destination to create the image file."
+    msg "デフォルトは ${script_path}/out です。" "The default is ${script_path}/out."
+    echo -n ": "
+    read out_dir
+    if [[ -z "${out_dir}" ]]; then
+        out_dir=out
+    else
+        if [[ ! -d "${out_dir}" ]]; then
+            msg_error \
+                "存在しているディレクトリを指定して下さい。" \
+                "Please specify the existing directory."
+            set_out_dir
+            return 0
+        elif [[ "${out_dir}" = / ]] || [[ "${out_dir}" = /home ]]; then
+            msg_error \
+                "そのディレクトリは使用できません。" \
+                "The directory is unavailable."
+            set_out_dir
+            return 0
+        elif [[ -n "$(ls ${out_dir})" ]]; then
+            msg_error \
+                "ディレクトリは空ではありません。" \
+                "The directory is not empty."
+            set_out_dir
+            return 0
+        fi
+    fi
+}
+
+
 # 最終的なbuild.shのオプションを生成
 function generate_argument () {
+    if [[ ${japanese} = true ]]; then
+        argument="${argument} -j"
+    fi
     if [[ ${plymouth} = true ]]; then
         argument="${argument} -b"
     fi
@@ -221,32 +723,49 @@ function generate_argument () {
     if [[ -n ${kernel} ]]; then
         argument="${argument} -k ${kernel}"
     fi
+    if [[ -n "${username}" ]]; then
+        argument="${argument} -u '${username}'"
+    fi
     if [[ -n ${password} ]]; then
-        argument="${argument} -p ${password}"
+        argument="${argument} -p '${password}'"
+    fi
+    if [[ -n ${out_dir} ]]; then
+        argument="${argument} -o '${out_dir}'"
     fi
+    argument="--noconfirm -a '${build_arch}' ${argument} ${channel}"
 }
 
 # 上の質問の関数を実行
 function ask () {
+    enable_japanese
     enable_plymouth
     select_kernel
     select_comp_type
     set_comp_option
+    set_username
     set_password
+    select_channel
+    set_iso_owner
+    # set_out_dir
     lastcheck
 }
 
-# 将来的なビルド用の確認(このスクリプトは将来的には自動でcloneしビルドすることを目指しています。)
+# ビルド設定の確認
 function lastcheck () {
-    echo "以下の設定でビルドを開始します。"
+    msg "以下の設定でビルドを開始します。" "Start the build with the following settings."
     echo
-    echo "           Plymouth : ${plymouth}"
-    echo "             kernel : ${kernel}"
-    echo " Compression method : ${comp_type}"
-    echo "Compression options : ${comp_option}"
-    echo "          Password  : ${password}"
+    [[ -n "${japanese}"    ]] && echo "           Japanese : ${japanese}"
+    [[ -n "${plymouth}"    ]] && echo "           Plymouth : ${plymouth}"
+    [[ -n "${kernel}"      ]] && echo "             kernel : ${kernel}"
+    [[ -n "${comp_type}"   ]] && echo " Compression method : ${comp_type}"
+    [[ -n "${comp_option}" ]] && echo "Compression options : ${comp_option}"
+    [[ -n "${username}"    ]] && echo "           Username : ${username}"
+    [[ -n "${password}"    ]] && echo "           Password : ${password}"
+    [[ -n "${channel}"     ]] && echo "            Channel : ${channel}"
     echo
-    echo -n "この設定で続行します。よろしいですか? (y/N) : "
+    msg_n \
+        "この設定で続行します。よろしいですか? (y/N) : " \
+        "Continue with this setting. Is it OK? (y/N) : "
     local yn
     read yn
     case ${yn} in
@@ -257,13 +776,39 @@ function lastcheck () {
 }
 
 function start_build () {
-    # build.shの引数を表示(デバッグ用)
-    # echo ${argument}
-    sudo ./build.sh ${argument}
-    make cleanup
+    if [[ ${nobuild} = true ]]; then
+        echo "${argument}"
+    else
+        # build.shの引数を表示(デバッグ用)
+        # echo ${argument}
+        sudo ./build.sh ${argument}
+        sudo rm -rf work/
+    fi
+}
+
+
+remove_work_dir() {
+    if [[ -d "${script_path}/work/" ]]; then
+        sudo rm -rf "${script_path}/work/"
+    fi
+}
+
+
+change_iso_permission() {
+    if [[ -n "${owner}" ]]; then
+        chown -R "${owner}" "${script_path}/out/"
+        chmod -R 750 "${script_path}/out/"
+    fi
 }
 
 # 関数を実行
+set_language
+check_files
+install_dependencies
+run_add_key_script
 ask
 generate_argument
-start_build
\ No newline at end of file
+start_build
+remove_dependencies
+remove_work_dir
+change_iso_permission