-
Notifications
You must be signed in to change notification settings - Fork 28
/
wizard.sh
executable file
·286 lines (253 loc) · 7.41 KB
/
wizard.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
#!/usr/bin/env bash
set -e
nobuild=false
while getopts 'xn' arg; do
case "${arg}" in
n) nobuild=true ;;
x) set -x ;;
esac
done
function enable_plymouth () {
local yn
echo -n "Plymouthを有効化しますか? (y/N) : "
read yn
case ${yn} in
y | Y | yes | Yes | YES ) plymouth=true ;;
n | N | no | No | NO ) plymouth=false ;;
* ) 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 ": "
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 ;;
esac
}
function set_comp_option () {
# lzmaには詳細なオプションはありません。
if [[ ! ${comp_type} = "lzma" ]]; then
local yn
local details
echo -n "圧縮の詳細を設定しますか? (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}; then
:
else
return 0
fi
local gzip
local lzo
local lz4
local xz
local zstd
comp_option=""
function gzip () {
local comp_level
function comp_level () {
local level
echo -n "gzipの圧縮レベルを入力してください。 (1~22) : "
read level
if [[ ${level} -lt 23 && ${level} -ge 4 ]]; then
comp_option="-Xcompression-level ${level}"
else
comp_level
fi
}
local window_size
function window_size () {
local window
echo -n "gzipのウィンドウサイズを入力してください。 (1~15) : "
read window
if [[ ${window} -lt 16 && ${window} -ge 4 ]]; then
comp_option="${comp_option} -Xwindow-size ${window}"
else
window_size
fi
}
}
function lz4 () {
local yn
echo -n "高圧縮モードを有効化しますか? (y/N) : "
read yn
case ${yn} in
y | Y | yes | Yes | YES ) comp_option="-Xhc" ;;
n | N | no | No | NO ) : ;;
* ) lz4 ;;
esac
}
function zstd () {
local level
echo -n "zstdの圧縮レベルを入力してください。 (1~22) : "
read level
if [[ ${level} -lt 23 && ${level} -ge 4 ]]; then
comp_option="-Xcompression-level ${level}"
else
zstd
fi
}
function lzo () {
echo "現在lzoは詳細プションのウィザードがサポートされていません。" >&2
}
function xz () {
echo "現在xzは詳細プションのウィザードがサポートされていません。" >&2
}
case ${comp_type} in
gzip ) gzip ;;
zstd ) zstd ;;
lz4 ) lz4 ;;
lzo ) lzo ;;
xz ) xz ;;
* ) : ;;
esac
fi
}
function set_password () {
echo -n "パスワードを入力してください : "
read -s password
echo
echo -n "もう一度入力してください : "
read -s confirm
if [[ ! $password = $confirm ]]; then
echo
echo "同じパスワードが入力されませんでした。"
set_password
elif [[ -z $password || -z $confirm ]]; then
echo
echo "パスワードを入力してください。"
set_password
fi
unset confirm
}
function select_kernel () {
set +e
local do_you_want_to_select_kernel
function do_you_want_to_select_kernel () {
set +e
local yn
echo -n "通常以外のLinuxカーネルを使用しますか? (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;;
esac
}
local what_kernel
function what_kernel () {
echo "使用するカーネルを以下の番号から選択してください "
echo
echo "1: linux-lts"
echo "2: linux-zen"
echo "3: linux-ck"
echo "4: linux-rt"
echo "5: linux-lqx"
echo "6: linux-rt-lts"
echo -n ": "
read yn
case ${yn} in
1) kernel="lts" ;;
2) kernel="zen" ;;
3) kernel="ck" ;;
4) kernel="rt" ;;
5) kernel="lqx" ;;
6) kernel="rt-lts" ;;
lts) kernel="lts" ;;
zen) kernel="zen" ;;
ck) kernel="ck" ;;
rt) kernel="rt" ;;
rt-lts) kernel="rt-lts"
lqx) kernel="lqx" ;;
*) what_kernel ;;
esac
}
do_you_want_to_select_kernel
exit_code=$?
if [[ ${exit_code} = 0 ]]; then
what_kernel
fi
set -e
}
# 最終的なbuild.shのオプションを生成
function generate_argument () {
if [[ ${plymouth} = true ]]; then
argument="${argument} -b"
fi
if [[ -n ${comp_type} ]]; then
argument="${argument} -c ${comp_type}"
fi
if [[ -n ${kernel} ]]; then
argument="${argument} -k ${kernel}"
fi
if [[ -n ${password} ]]; then
argument="${argument} -p ${password}"
fi
}
# 上の質問の関数を実行
function ask () {
enable_plymouth
select_kernel
select_comp_type
set_comp_option
set_password
lastcheck
}
# 将来的なビルド用の確認(このスクリプトは将来的には自動でcloneしビルドすることを目指しています。)
function lastcheck () {
echo "以下の設定でビルドを開始します。"
echo
echo " Plymouth : ${plymouth}"
echo " kernel : ${kernel}"
echo " Compression method : ${comp_type}"
echo "Compression options : ${comp_option}"
echo " Password : ${password}"
echo
echo -n "この設定で続行します。よろしいですか? (y/N) : "
local yn
read yn
case ${yn} in
y | Y | yes | Yes | YES ) : ;;
n | N | no | No | NO ) ask ;;
* ) lastcheck ;;
esac
}
function start_build () {
# build.shの引数を表示(デバッグ用)
# echo ${argument}
sudo ./build.sh ${argument}
make cleanup
}
# 関数を実行
ask
generate_argument
if ${nobuild}; then
echo "${argument}"
else
start_build
fi