7 while getopts 'xn' arg; do
15 script_path="$(readlink -f ${0%/*})"
18 function check_files () {
19 if [[ ! -f "${script_path}/build.sh" ]]; then
20 echo "${script_path}/build.shが見つかりませんでした。" >&2
23 if [[ ! -f "${script_path}/keyring.sh" ]]; then
24 echo "${script_path}/keyring.shが見つかりませんでした。" >&2
30 function install_dependencies () {
35 function checkpkg () {
36 if [[ $(pacman -Q "${1}" 2> /dev/null | awk '{print $1}') = "${1}" ]]; then
37 if [[ $(pacman -Q "${1}" 2> /dev/null | awk '{print $2}') = $(pacman -Sp --print-format '%v' "${1}") ]]; then
47 dependence=("git" "make" "arch-install-scripts" "squashfs-tools" "libisoburn" "dosfstools" "lynx" "archiso")
49 echo "依存関係を確認しています..."
50 for pkg in ${dependence[@]}; do
51 if [[ $(checkpkg ${pkg}) = false ]]; then
52 install=(${install[@]} ${pkg})
56 if [[ -n "${install[@]}" ]]; then
58 sudo pacman -S --needed ${install[@]}
64 function run_add_key_script () {
66 echo -n "AlterLinuxの鍵を追加しますか? (y/N) : "
69 y | Y | yes | Yes | YES ) sudo "${script_path}/keyring.sh" --alter-add ;;
70 n | N | no | No | NO ) return 0 ;;
71 * ) run_add_key_script ;;
76 function remove_dependencies () {
77 if [[ -n "${install[@]}" ]]; then
78 sudo pacman -Rsn ${install[@]}
83 function enable_plymouth () {
85 echo -n "Plymouthを有効化しますか? (y/N) : "
88 y | Y | yes | Yes | YES ) plymouth=true ;;
89 n | N | no | No | NO ) plymouth=false ;;
90 * ) enable_plymouth ;;
95 function enable_japanese () {
97 echo -n "日本語を有効化しますか? (y/N) : "
100 y | Y | yes | Yes | YES ) japanese=true ;;
101 n | N | no | No | NO ) japanese=false ;;
102 * ) enable_japanese ;;
107 function select_comp_type () {
111 echo -n "圧縮方式を設定しますか? (y/N) : "
114 y | Y | yes | Yes | YES ) details=true ;;
115 n | N | no | No | NO ) details=false ;;
116 * ) select_comp_type; return 0 ;;
119 function ask_comp_type () {
120 echo "圧縮方式を以下の番号から選択してください "
133 1 ) comp_type="gzip" ;;
134 2 ) comp_type="lzma" ;;
135 3 ) comp_type="lzo" ;;
136 4 ) comp_type="lz4" ;;
137 5 ) comp_type="xz" ;;
138 6 ) comp_type="zstd" ;;
139 gzip ) comp_type="gzip" ;;
140 lzma ) comp_type="lzma" ;;
141 lzo ) comp_type="lzo" ;;
142 lz4 ) comp_type="lz4" ;;
143 xz ) comp_type="xz" ;;
144 zstd ) comp_type="zstd" ;;
149 if [[ ${details} = true ]]; then
157 function set_comp_option () {
159 # lzmaには詳細なオプションはありません。
160 if [[ ! ${comp_type} = "lzma" ]]; then
163 echo -n "圧縮の詳細を設定しますか? (y/N) : "
166 y | Y | yes | Yes | YES ) details=true ;;
167 n | N | no | No | NO ) details=false ;;
168 * ) set_comp_option; return 0 ;;
170 if [[ ${details} = true ]]; then
185 function comp_level () {
187 echo -n "gzipの圧縮レベルを入力してください。 (1~22) : "
189 if [[ ${level} -lt 23 && ${level} -ge 4 ]]; then
190 comp_option="-Xcompression-level ${level}"
196 function window_size () {
198 echo -n "gzipのウィンドウサイズを入力してください。 (1~15) : "
200 if [[ ${window} -lt 16 && ${window} -ge 4 ]]; then
201 comp_option="${comp_option} -Xwindow-size ${window}"
211 echo -n "高圧縮モードを有効化しますか? (y/N) : "
214 y | Y | yes | Yes | YES ) comp_option="-Xhc" ;;
215 n | N | no | No | NO ) : ;;
222 echo -n "zstdの圧縮レベルを入力してください。 (1~22) : "
224 if [[ ${level} -lt 23 && ${level} -ge 4 ]]; then
225 comp_option="-Xcompression-level ${level}"
232 echo "現在lzoは詳細プションのウィザードがサポートされていません。" >&2
236 echo "現在xzは詳細プションのウィザードがサポートされていません。" >&2
251 function set_username () {
254 echo -n "デフォルトではないユーザー名を設定しますか? (y/N) : "
257 y | Y | yes | Yes | YES ) details=true ;;
258 n | N | no | No | NO ) details=false ;;
259 * ) set_username; return 0 ;;
262 function ask_username () {
263 echo -n "ユーザー名を入力してください : "
265 if [[ -z ${username} ]]; then
270 if [[ ${details} = true ]]; then
278 function set_password () {
281 echo -n "デフォルトではないパスワードを設定しますか? (y/N) : "
284 y | Y | yes | Yes | YES ) details=true ;;
285 n | N | no | No | NO ) details=false ;;
286 * ) set_password; return 0 ;;
289 function ask_password () {
290 echo -n "パスワードを入力してください : "
293 echo -n "もう一度入力してください : "
295 if [[ ! $password = $confirm ]]; then
297 echo "同じパスワードが入力されませんでした。"
299 elif [[ -z $password || -z $confirm ]]; then
301 echo "パスワードを入力してください。"
308 if [[ ${details} = true ]]; then
316 function select_kernel () {
318 local do_you_want_to_select_kernel
320 function do_you_want_to_select_kernel () {
323 echo -n "デフォルト(zen)以外のカーネルを使用しますか? (y/N) : "
326 y | Y | yes | Yes | YES ) return 0 ;;
327 n | N | no | No | NO ) return 1 ;;
328 * ) do_you_want_to_select_kernel; return 0 ;;
335 function what_kernel () {
336 echo "使用するカーネルを以下の番号から選択してください "
343 echo "6: linux-rt-lts"
345 echo "8: linux-xanmod"
346 echo "9: linux-xanmod-lts"
357 6 ) kernel="rt-lts" ;;
359 8 ) kernel="xanmod" ;;
360 9 ) kernel="xanmod-lts" ;;
361 linux ) kernel="kernel" ;;
362 linux-lts ) kernel="lts" ;;
363 linux-zen ) kernel="zen" ;;
364 linux-ck ) kernel="ck" ;;
365 linux-rt ) kernel="rt" ;;
366 linux-rt-lts ) kernel="rt-lts" ;;
367 linux-lqx ) kernel="lqx" ;;
368 linux-xanmod ) kernel="xanmod" ;;
369 linux-xanmod-lts ) kernel="xanmod-lts" ;;
371 core ) kernel="core" ;;
372 lts ) kernel="lts" ;;
373 zen ) kernel="zen" ;;
376 rt-lts ) kernel="rt-lts" ;;
377 lqx ) kernel="lqx" ;;
378 xanmod ) kernel="xanmod" ;;
379 xanmod-lts ) kernel="xanmod-lts" ;;
384 do_you_want_to_select_kernel
386 if [[ ${exit_code} = 0 ]]; then
394 function select_channel () {
397 echo -n "デフォルト(xfce)以外のチャンネルを使用しますか? (y/N) : "
400 y | Y | yes | Yes | YES ) details=true ;;
401 n | N | no | No | NO ) details=false ;;
402 * ) select_channel; return 0 ;;
405 function ask_channel () {
408 echo "チャンネルを以下の番号から選択してください "
417 1 ) channel="xfce" ;;
418 2 ) channel="plasma" ;;
419 xfce ) channel="xfce" ;;
420 plasma ) channel="plasma" ;;
421 * ) select_channel ;;
425 if [[ ${details} = true ]]; then
433 function set_out_dir {
434 echo "イメージファイルの作成先を入力して下さい。"
435 echo "デフォルトは ${script_path}/out です。"
438 if [[ -z "${out_dir}" ]]; then
441 if [[ ! -d "${out_dir}" ]]; then
442 echo "存在しているディレクトリを指定して下さい"
445 elif [[ "${out_dir}" = / ]] || [[ "${out_dir}" = /home ]]; then
446 echo "そのディレクトリは使用できません。"
449 elif [[ -n "$(ls ${out_dir})" ]]; then
450 echo "ディレクトリは空ではありません。"
458 # 最終的なbuild.shのオプションを生成
459 function generate_argument () {
460 if [[ ${japanese} = true ]]; then
461 argument="${argument} -j"
463 if [[ ${plymouth} = true ]]; then
464 argument="${argument} -b"
466 if [[ -n ${comp_type} ]]; then
467 argument="${argument} -c ${comp_type}"
469 if [[ -n ${kernel} ]]; then
470 argument="${argument} -k ${kernel}"
472 if [[ -n "${username}" ]]; then
473 argument="${argument} -u '${username}'"
475 if [[ -n ${password} ]]; then
476 argument="${argument} -p '${password}'"
478 if [[ -n ${out_dir} ]]; then
479 argument="${argument} -o '${out_dir}'"
481 argument="${argument} ${channel}"
499 function lastcheck () {
500 echo "以下の設定でビルドを開始します。"
502 [[ -n "${japanese}" ]] && echo " Japanese : ${japanese}"
503 [[ -n "${plymouth}" ]] && echo " Plymouth : ${plymouth}"
504 [[ -n "${kernel}" ]] && echo " kernel : ${kernel}"
505 [[ -n "${comp_type}" ]] && echo " Compression method : ${comp_type}"
506 [[ -n "${comp_option}" ]] && echo "Compression options : ${comp_option}"
507 [[ -n "${username}" ]] && echo " Username : ${username}"
508 [[ -n "${password}" ]] && echo " Password : ${password}"
509 [[ -n "${channel}" ]] && echo " Channel : ${channel}"
511 echo -n "この設定で続行します。よろしいですか? (y/N) : "
515 y | Y | yes | Yes | YES ) : ;;
516 n | N | no | No | NO ) ask ;;
521 function start_build () {
522 if [[ ${nobuild} = true ]]; then
525 # build.shの引数を表示(デバッグ用)
527 sudo ./build.sh ${argument}