-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinst.sh
More file actions
281 lines (239 loc) · 7.12 KB
/
Copy pathinst.sh
File metadata and controls
281 lines (239 loc) · 7.12 KB
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
#!/bin/bash
printf "Checking for config file... "
if [ ! -f ".config_compile" ]; then
echo "Configuration file not found!"
echo "Try creating '.config_compile' config file"
exit -2
fi
echo "OK"
. .config_compile
printf "Checking configuration option file..."
if [[ ! -b ${drive_path} ]]; then
echo "Drive path ${drive_path} not found!"
exit -2
fi
if [[ ! -b ${boot_path} ]]; then
echo "Boot path ${boot_path} not found!"
exit -2
fi
if [[ -z ${cpucore} ]]; then
echo "cpucore is empty!"
exit -2
fi
if [[ -z ${system_init} ]]; then
echo "system_init is empty!"
exit -2
fi
if [[ -z ${swap_on} ]]; then
echo "swap_on is empty!"
exit -2
fi
printf "OK"
printf "\n"
echo "DrivePath: ${drive_path}"
echo "cpucore: ${cpucore}"
echo "system_init: ${system_init}"
echo "Swap on: ${swap_on}"
echo "Is your option is correct ? (enter = yes)"
read
printf "Checking System Requirement"
LC_ALL=C
PATH=/usr/bin:/bin
bail() { echo "FATAL: $1"; exit 1; }
grep --version > /dev/null 2> /dev/null || bail "grep does not work"
sed '' /dev/null || bail "sed does not work"
sort /dev/null || bail "sort does not work"
ver_check()
{
if ! type -p $2 &>/dev/null
then
echo "ERROR: Cannot find $2 ($1)"; return 1;
fi
v=$($2 --version 2>&1 | grep -E -o '[0-9]+\.[0-9\.]+[a-z]*' | head -n1)
if printf '%s\n' $3 $v | sort --version-sort --check &>/dev/null
then
printf "OK: %-9s %-6s >= $3\n" "$1" "$v"; return 0;
else
printf "ERROR: %-9s is TOO OLD ($3 or later required)\n" "$1";
return 1;
fi
}
ver_kernel()
{
kver=$(uname -r | grep -E -o '^[0-9\.]+')
if printf '%s\n' $1 $kver | sort --version-sort --check &>/dev/null
then
printf "OK: Linux Kernel $kver >= $1\n"; return 0;
else
printf "ERROR: Linux Kernel ($kver) is TOO OLD ($1 or later required)\n" "$kver";
return 1;
fi
}
# Coreutils first because --version-sort needs Coreutils >= 7.0
ver_check Coreutils sort 8.1 || bail "Coreutils too old, stop"
ver_check Bash bash 3.2
ver_check Binutils ld 2.13.1
ver_check Bison bison 2.7
ver_check Diffutils diff 2.8.1
ver_check Findutils find 4.2.31
ver_check Gawk gawk 4.0.1
ver_check GCC gcc 5.2
ver_check "GCC (C++)" g++ 5.2
ver_check Grep grep 2.5.1a
ver_check Gzip gzip 1.3.12
ver_check M4 m4 1.4.10
ver_check Make make 4.0
ver_check Patch patch 2.5.4
ver_check Perl perl 5.8.8
ver_check Python python3 3.4
ver_check Sed sed 4.1.5
ver_check Tar tar 1.22
ver_check Texinfo texi2any 5.0
ver_check Xz xz 5.0.0
ver_kernel 4.19
if mount | grep -q 'devpts on /dev/pts' && [ -e /dev/ptmx ]
then echo "OK: Linux Kernel supports UNIX 98 PTY";
else echo "ERROR: Linux Kernel does NOT support UNIX 98 PTY"; fi
alias_check() {
if $1 --version 2>&1 | grep -qi $2
then printf "OK: %-4s is $2\n" "$1";
else printf "ERROR: %-4s is NOT $2\n" "$1"; fi
}
echo "Aliases:"
alias_check awk GNU
alias_check yacc Bison
alias_check sh Bash
echo "Compiler check:"
if printf "int main(){}" | g++ -x c++ -
then echo "OK: g++ works";
else echo "ERROR: g++ does NOT work"; fi
rm -f a.out
if [ "$(nproc)" = "" ]; then
echo "ERROR: nproc is not available or it produces empty output"
else
echo "OK: nproc reports $(nproc) logical cores are available"
fi
echo "LAST WARNING: The next step will format ALL data in ${drive_path}"
echo "Only support GPT (MBR not support!)"
echo "Press ctrl+C to quit."
printf "Starting in "
for (( i=10; i>0; i-- )); do
printf "%i" $i
sleep 1.
printf "..."
done
/usr/bin/mkfs.ext4 ${drive_path}
/usr/bin/mkfs.fat -F 32 ${boot_path}
if [ ! -d "/mnt/lfs" ]; then
echo "Creating /mnt/lfs..."
mkdir -p /mnt/lfs
fi
export LFS=/mnt/lfs
export LFS_TGT=x86_64-duca-gnu
mount ${drive_path} $LFS
mount ${boot_path} $LFS/boot --mkdir
mkdir -v $LFS/sources
chmod -v a+wt $LFS/sources
if [[ ${system_init} == "systemv" ]]; then
wget https://www.linuxfromscratch.org/lfs/view/development/wget-list-sysv
wget --input-file=wget-list-sysv --continue --directory-prefix=$LFS/sources
pushd $LFS/sources
wget https://www.linuxfromscratch.org/lfs/view/development/md5sums
md5sum -c md5sums
popd
elif [[ ${system_init} == "systemd" ]]; then
wget https://www.linuxfromscratch.org/lfs/view/systemd/wget-list-systemd
wget --input-file=wget-list-systemd --continue --directory-prefix=$LFS/sources
pushd $LFS/sources
wget https://www.linuxfromscratch.org/lfs/view/systemd/md5sums
md5sum -c md5sums
popd
fi
chown root:root $LFS/sources/*
echo "Preparing System Folder"
mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin}
for i in bin lib sbin; do
ln -sv usr/$i $LFS/$i
done
case $(uname -m) in
x86_64) mkdir -pv $LFS/lib64 ;;
esac
mkdir -pv $LFS/tools
#This will use in entire build process
#Prepare for the LFS installation
pushd $LFS/sources
#binutils
if [[ ! -d binutils-2.42 ]]; then
tar xvf binutils-2.42.tar.xz
fi
cd binutils-2.42
mkdir -v build
cd build
time {
../configure --prefix=$LFS/tools \
--with-sysroot=$LFS \
--target=$LFS_TGT \
--disable-nls \
--enable-gprofng=no \
--disable-werror \
--enable-default-hash-style=gnu
&&
make -j${cpucore} &&
make install ;}
if [ $? -eq 1 ]; then
echo "Installation of binutils failed!"
exit -1
fi
cd ../..
rm -rf binutils-2.42
#gcc
if [[ ! -d gcc-13.2.0 ]]; then
tar xvf gcc-13.2.0.tar.xz
fi
cd gcc-13.2.0
tar -xf ../mpfr-4.2.1.tar.xz
mv -v mpfr-4.2.1 mpfr
tar -xf ../gmp-6.3.0.tar.xz
mv -v gmp-6.3.0 gmp
tar -xf ../mpc-1.3.1.tar.gz
mv -v mpc-1.3.1 mpc
case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
esac
mkdir -v build
cd build
if [[ ! -f .process ]]; then
touch .process
time { ../configure \
--target=$LFS_TGT \
--prefix=$LFS/tools \
--with-glibc-version=2.39 \
--with-sysroot=$LFS \
--with-newlib \
--without-headers \
--enable-default-pie \
--enable-default-ssp \
--disable-nls \
--disable-shared \
--disable-multilib \
--disable-threads \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--enable-languages=c,c++ &&
make -j${cpucore} &&
make install ; }
else
time { make -j${cpucore} && make install ; }
fi
cd ..
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include/limits.h
popd
echo "Done in installing core system !"