OSDN Git Service

[update] : Added zen kernel support.
[alterlinux/alterlinux.git] / wizard.sh
1 #!/usr/bin/env bash
2
3 set -e
4
5 function enable_plymouth () {
6     local yn
7     echo -n "Plymouthを有効化しますか? (y/N) : "
8     read yn
9     case ${yn} in
10         y | Y | yes | Yes | YES ) plymouth=true   ;;
11         n | N | no  | No  | NO  ) plymouth=false  ;;
12         *                       ) enable_plymouth ;;
13     esac
14 }
15
16 function select_comp_type () {
17     local yn
18     echo "圧縮方式を以下の番号から選択してください "
19     echo
20     echo "1: gzip"
21     echo "2: lzma"
22     echo "3: lzo"
23     echo "4: lz4"
24     echo "5: xz"
25     echo "6: zstd"
26     echo -n ": "
27
28     read yn
29
30     case ${yn} in
31            1) comp_type="gzip" ;;
32            2) comp_type="lzma" ;;
33            3) comp_type="lzo"  ;;
34            4) comp_type="lz4"  ;;
35            5) comp_type="xz"   ;;
36            6) comp_type="zstd" ;;
37         gzip) comp_type="gzip" ;;
38         lzma) comp_type="lzma" ;;
39         lzo ) comp_type="lzo"  ;;
40         lz4 ) comp_type="lz4"  ;;
41         xz  ) comp_type="xz"   ;;
42         zstd) comp_type="zstd" ;;
43         *) select_comp_type ;;
44     esac
45 }
46
47 function set_comp_option () {
48
49     # lzmaには詳細なオプションはありません。
50     if [[ ! ${comp_type} = "lzma" ]]; then
51         local yn
52         local details
53         echo -n "圧縮の詳細を設定しますか? (y/N) : "
54         read yn
55         case ${yn} in
56             y | Y | yes | Yes | YES ) details=true    ;;
57             n | N | no  | No  | NO  ) details=false   ;;
58             *                       ) set_comp_option ;;
59         esac
60         if ${details}; then
61             :
62         else
63             return 0
64         fi
65
66         local gzip
67         local lzo
68         local lz4
69         local xz
70         local zstd
71         comp_option=""
72
73         function gzip () {
74             local comp_level
75             function comp_level () {
76                 local level
77                 echo -n "gzipの圧縮レベルを入力してください。 (1~22) : "
78                 read level
79                 if [[ ${level} -lt 23 && ${level} -ge 4 ]]; then
80                     comp_option="-Xcompression-level ${level}"
81                 else
82                     comp_level
83                 fi
84             }
85             local window_size
86             function window_size () {
87                 local window
88                 echo -n "gzipのウィンドウサイズを入力してください。 (1~15) : "
89                 read window
90                 if [[ ${window} -lt 16 && ${window} -ge 4 ]]; then
91                     comp_option="${comp_option} -Xwindow-size ${window}"
92                 else
93                     window_size
94                 fi
95             }
96
97         }
98
99         function lz4 () {
100             local yn
101             echo -n "高圧縮モードを有効化しますか? (y/N) : "
102             read yn
103             case ${yn} in
104                 y | Y | yes | Yes | YES ) comp_option="-Xhc" ;;
105                 n | N | no  | No  | NO  ) :                  ;;
106                 *                       ) lz4                ;;
107             esac
108         }
109
110         function zstd () {
111             local level
112             echo -n "zstdの圧縮レベルを入力してください。 (1~22) : "
113             read level
114             if [[ ${level} -lt 23 && ${level} -ge 4 ]]; then
115                 comp_option="-Xcompression-level ${level}"
116             else
117                 zstd
118             fi
119         }
120
121         function lzo () {
122             echo "現在lzoは詳細プションのウィザードがサポートされていません。" >&2
123         }
124
125         function xz () {
126             echo "現在xzは詳細プションのウィザードがサポートされていません。" >&2
127         }
128
129         case ${comp_type} in
130             gzip ) gzip ;;
131             zstd ) zstd ;;
132             lz4  ) lz4  ;;
133             lzo  ) lzo  ;;
134             xz   ) xz   ;;
135             *    ) :    ;;
136         esac
137     fi
138 }
139
140 function set_password () {
141     echo -n "パスワードを入力してください : "
142     read -s password
143     echo
144     echo -n "もう一度入力してください : "
145     read -s confirm
146     if [[ ! $password = $confirm ]]; then
147         echo
148         echo "同じパスワードが入力されませんでした。"
149         set_password
150     elif [[ -z $password || -z $confirm ]]; then
151         echo
152         echo "パスワードを入力してください。"
153         set_password
154     fi
155     unset confirm
156     echo
157 }
158
159 # 最終的なbuild.shのオプションを生成
160 function generate_argument () {
161     if [[ ${plymouth} = true ]]; then
162         argument="${argument} -b"
163     fi
164     if [[ -n ${comp_type} ]]; then
165         argument="${argument} -c ${comp_type}"
166     fi
167     if [[ -n ${password} ]]; then
168         argument="${argument} -p ${password}"
169     fi
170 }
171
172 # 上の質問の関数を実行
173 function ask () {
174     enable_plymouth
175     select_comp_type
176     set_comp_option
177     set_password
178 }
179
180 # 将来的なビルド用の確認(このスクリプトは将来的には自動でcloneしビルドすることを目指しています。)
181 function lastcheck () {
182     echo "以下の設定でビルドを開始します。"
183     echo
184     echo "           Plymouth : ${plymouth}"
185     echo " Compression method : ${comp_type}"
186     echo "Compression options : ${comp_option}"
187     echo "          Password  : ${password}"
188     echo
189     echo -n "この設定で続行します。よろしいですか? (y/N) : "
190     local yn
191     read yn
192     case ${yn} in
193         y | Y | yes | Yes | YES ) :         ;;
194         n | N | no  | No  | NO  ) ask       ;;
195         *                       ) lastcheck ;;
196     esac
197 }
198
199
200 # 関数を実行
201 ask
202 lastcheck
203 generate_argument
204
205 # build.shの引数を表示(デバッグ用)
206 echo ${argument}