This repository has been archived by the owner on Dec 24, 2020. It is now read-only.
/
archlinux-builder-mini.sh
executable file
·196 lines (156 loc) · 5.39 KB
/
archlinux-builder-mini.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
#!/usr/bin/env bash
## 変数定義
function settings () {
## 作業ディレクトリ
# このディレクトリ内に設定ファイル等を作成するため空のディレクトリを指定することをおすすめします。
#~/などを指定するのはその中に大量のファイルを展開されてしまう恐れがあるためおすすめしません。
# 最後に/を入れないでください
working_directory="/tmp/archiso-helper"
## 作成後のイメージファイルのパス
# フルパスで表記してください。それぞれ${yaer}、${month}、${day}で年、月、日に置き換えることができます。
# ここの値が不正な場合、失敗するか作業ディレクトリ/outに作成されます。
image_file_path="/root/archlinux-${year}.${month}.${day}-x86_64.iso"
}
## 関数定義
# 赤(エラー時)
function red_log () {
echo -e "\033[0;31m$@\033[0;39m" >&2
if [[ -d $working_directory ]]; then
rm -rf $working_directory
fi
exit 1
}
# 青(通常のログ)
function blue_log () {
echo -e "\033[0;34m$@\033[0;39m"
}
# 黄(注意、デバッグ)
function yellow_log () {
echo -e "\033[0;33m$@\033[0;39m" >&2
}
# パッケージがインストールされているか(終了コード0ならインストールされている、1ならされていない)
function package_check () {
if [[ -n $( pacman -Q $1 | awk '{print $1}' ) ]]; then
return 0
else
return 1
fi
}
# パッケージのインストール
function install_pacman () {
pacman -Syy --noconfirm
pacman -S --noconfirm $@
}
function ans () {
case $yn in
y ) del ;;
Y ) del ;;
Yes ) del ;;
yes ) del ;;
* ) red_log "終了します。" ;;
esac
unset yn
}
## タイトル
cat <<EOF
===================================
ArchLinux ISO Auto Builder
Mail: shun819.mail@gmail.com
Twitter : @Hayao0819
===================================
EOF
## 設定
year=$(date "+%Y")
month=$(date "+%m")
day=$(date "+%d")
settings
## ネット接続確認
blue_log "インターネット接続をチェックしています。"
if [[ ! $(ping "google.com" -c 1 >> /dev/null ; echo $?) = 0 ]]; then
red_log "インターネットに接続されていません。"
else
blue_log "ネットワークに接続されています。"
fi
## Rootチェック
if [[ ! $UID = 0 ]]; then
red_log "Root権限で実行してください。"
fi
## ディストリビューションチェック
if [[ -f /etc/os-release ]]; then
source /etc/os-release
if [[ ! $ID = "arch" ]]; then
red_log "このスクリプトはArchLinux専用です。"
fi
else
red_log "/etc/os-releaseが見つかりませんでした。"
fi
## 作業ディレクトリチェック
if [[ $(pwd) = $working_directory ]]; then
red_log "作業ディレクトリにスクリプトの存在しているディレクトリを指定することはできません。"
fi
## 出力先チェック
if [[ -f $image_file_path ]]; then
printf "$image_file_pathが既に存在しています。上書きしてもよろしいですか? (y/N) : "
read yn
function del () {
rm $image_file_path
}
ans
fi
## ArchISOインストール、アップグレード
if [[ $(package_check archiso; printf $?) = 1 ]]; then
yellow_log "archisoをインストールします"
install_pacman archiso
fi
## 作業ディレクトリ作成
if [[ -d $working_directory ]]; then
printf "作業ディレクトリはすでに存在しています。削除してもよろしいですか? : "
read yn
function del () {
blue_log $log_delete_working_dir
rm -rf $working_directory
}
ans
fi
mkdir -p $working_directory
mkdir -p $working_directory/out/
chmod 755 -R $working_directory
## ArchISOプロファイルコピー
if [[ -d /usr/share/archiso/configs/releng ]]; then
blue_log "設定ファイルをコピーしています。"
cp -r /usr/share/archiso/configs/releng/* $working_directory
else
red_log "設定ファイルが見つかりませんでした"
fi
## ISO作成
blue_log "ビルドを開始します。"
cd $working_directory
$working_directory/build.sh -v
cd - > /dev/null
if [[ ! $? = 0 ]]; then
red_log "何らかのエラーでビルドが失敗しました。"
fi
## イメージファイル移動
if [[ -z $( ls $working_directory/out ) ]]; then
red_log "イメージファイルが見つかりませんでした。スクリプトを再実行してください。"
fi
mv $working_directory/out/* $image_file_path
## MD5
if [[ $(package_check md5; printf $?) = 1 ]]; then
yellow_log "MD5ファイルを生成するには、MD5パッケージをAURからインストールしてください。"
else
md5 $image_file_path > "$(basename $image_file_path).md5"
fi
## 作業ディレクトリ削除
if [[ -d $working_directory ]]; then
blue_log "作業ディレクトリを削除しています..."
rm -rf $working_directory
else
yellow_log "作業ディレクトリが見つかりませんでした。"
fi
## 作成後メッセージ
if [[ -f $image_file_path ]]; then
blue_log "イメージファイルは$image_file_pathに作成されました。"
else
red_log "イメージファイルの移動に失敗しました。イメージファイルは$working_directory/outに残っている可能性があります。"
fi