-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmakeiso
executable file
·97 lines (82 loc) · 3.11 KB
/
makeiso
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
#!/bin/bash
# @Author: clsty <[email protected]>
# @Title: arCNiso makeiso: auto make iso file.
# @URL: https://github.com/clsty/arCNiso
# @License: GNU GPL v3.0 License
# 初始设定
set -e # 遇错直接退出
function try { "$@" || sleep 0; }
export testiso=false
export OUTpath=OUT
function write_afs_profile {
afs_profile_path=/tmp/MKARCHISO_IMAGE_TOOL_PROFILE
# For detail see `man mksquashfs'
case $1 in
1)airootfs_image_tool_options=('-comp' 'zstd' '-Xcompression-level' '22' '-b' '1M');;
2)airootfs_image_tool_options=('-comp' 'gzip' '-Xcompression-level' '1' '-b' '1M');;
3)airootfs_image_tool_options=('-comp' 'lzo' '-Xcompression-level' '9' '-b' '1M');;
*)airootfs_image_tool_options=('-comp' 'xz' '-Xbcj' 'x86' '-b' '1M' '-Xdict-size' '1M');;
esac
# 将数组变量写入文件(一个元素一行)
printf "%s\n" ${airootfs_image_tool_options[@]} > $afs_profile_path
}
write_afs_profile 1
case $1 in
--test)
export testiso=true
export OUTpath=TEST
write_afs_profile 2
esac
# 时间测量开始
echo "开始构建。"
TIME1=$(date +%Y%m%d-%H:%M:%S)
TIME1_s=$(date +%s)
# 位置与权限校正
cd $(dirname $0)
try sudo umount ./TMP/x86_64/airootfs/*
sudo chown -R $(whoami):$(whoami) .
# 准备家目录
./makeiso-afs.sh sync
# 本地软件仓库与源就位
# 以下通过软链接到 /tmp 下,获得不含变量的路径(因为 pacman.conf 似乎不支持含变量的路径),以供后续使用。
mkdir -p /tmp/arCNiso
touch /tmp/arCNiso/touched
rm /tmp/arCNiso/* # 注意这里应当只有软链接及 touched
ln -sf $(pwd)/aur/pkgs /tmp/arCNiso/aur
ln -sf $(pwd)/pacman.d /tmp/arCNiso/pacman.d
# 构建
mkdir -p $OUTpath TMP
sudo rm -rf $OUTpath TMP
if [ -f ./patchedmkarchiso/mkarchiso ]; then
echo "已找到 patchedmkarchiso 目录下的 mkarchiso,将使用修改后的 mkarchiso。"
# 一定要 cd 到这里面来,因为打了补丁之后 mkarchiso 会引用 db.{cer,key,crt},显然当直接提到这些文件(而没有给路径)时,它应当位于 working directory。当然,在补丁里把这些路径都给出来也可以,但麻烦。
cd ./patchedmkarchiso/
sudo ./mkarchiso -v -w ../TMP -o ../$OUTpath ../
cd ../
else
echo "未找到 patchedmkarchiso 目录下的 mkarchiso,将使用原版 mkarchiso。"
sudo mkarchiso -v -w TMP -o $OUTpath ./
fi
sudo rm -rf TMP
sudo chown -R $(whoami):$(whoami) ./$OUTpath
mv $(find $OUTpath -name "*.iso") $OUTpath/arCNiso.iso
# 清理临时文件(夹)
./makeiso-afs.sh clean
# 输出信息
export name=$(basename $(find $OUTpath -name "*.iso"))
export size=$(du -a -B MB $OUTpath/*.iso | cut -f1 -d" ")
case $testiso in
false)export sha256sum=$(sha256sum $OUTpath/*.iso | cut -f1 -d" ");;
esac
echo -e "文件名:${name}\n大小:${size}\nsha256sum:${sha256sum}" >result.log
cat result.log
echo -e "文件名:${name}\n\n大小:${size}\n\nsha256sum:${sha256sum}" >result.md
# 时间测量结束
TIME2=$(date +%Y%m%d-%H:%M:%S)
TIME2_s=$(date +%s)
TIMEpass=$(($TIME2_s - $TIME1_s))
echo "构建结束。"
echo "开始于 $TIME1 -- 经过 $TIMEpass 秒 --> 结束于 $TIME2"
case $testiso in
true)./testiso TEST;;
esac