rootfs build updated

This commit is contained in:
wt
2024-08-19 18:00:45 +07:00
parent 2e228c1991
commit d7b46cbc67
20 changed files with 1638 additions and 38 deletions
+143 -30
View File
@@ -1,28 +1,44 @@
#!/bin/sh
#--------------------------------- Logo ---------------------------------------------------------------------
# ####### ## ## ## ####### ## ####### | ## ## ## ## ## ## ## ## |
# ## ## #### #### ## ## ## ## | ## ## ## ## ## ## ## ## |
# ## ## ## ## ## ## ## ## | ## ## ## ## ## ## ## |
# ## ## ## ## ## ## ## ## ## | ## ## ### ## ## ## ## |
# ####### ## ## ## ####### ## ####### | ## ## #### ## ## ## ## |
# ## ## ## ## ## ## ## | ## ## ## #### ## ## ## |
# ## ## ## ## ## ## ## | ## ## ## ### ## ## ## ## |
# ## ## ## ## ## ## ## | ## ## ## ## ## ## ## ## |
# ####### ## ## ## ## ####### ####### | ####### ## ## ## ######## ## ## |
#------------------------------------------------------------------------------------------------------------
# Script to build linux install media image
version=0.0.1
version=0.0.1 # script version
# TolaMironcenko is licensed under MIT
#--- import rolors ---
. ./colors.sh
#---------------------
#--- import funcs ----
. ./funcs.sh
#---------------------
#------------ config ------------------
root=$(pwd)
disk="sdz"
distro_name="Simple"
distro_desc="Simple linux distro"
distro_codename="zero_zero_one"
hyperv_support="false"
out=$root/out
build=$root/build
kernel=""
busybox=""
sourcesfilename=sources.txt
initramfsfile=$root/initramfs/initramfs.txt
initramfspath=$build/initramfs
rootfsfile=$root/rootfs/rootfs.txt
rootfspath=$build/rootfs
root=$(pwd) # root build directory
disk="sdz" # disk to write install image
distro_name="Simple" # distro name
distro_desc="Simple linux distro" # distro desctiption
distro_codename="zero_zero_one" # distro codename
hyperv_support="false" # hyperv support for kernel image
out=$root/out # output directory
build=$root/build # build directory
sourcesfilename=sources.txt # sources file for downloading
initramfsfile=$root/initramfs/initramfs.txt # file to created directories for initramfs
initramfspath=$build/initramfs # initramfs build directory
rootfsfile=$root/rootfs/rootfs.txt # file to created directories for rootfs
rootfspath=$build/rootfs # rootfs build directory
fulllogfile=/dev/null # file for full build logs
makeflags=-j16 # makeflags
#--------------------------------------
#-------- check root ------------------
@@ -32,9 +48,10 @@ if [ $(id -u) -ne 0 ]; then
fi
#--------------------------------------
mkdir $out
mkdir $root/.log
mkdir $out &> $fulllogfile
mkdir $root/.log &> $fulllogfile
#------------ Download needed sources from sources.txt ------------------
download_sources() {
printf "$UGREEN** Downloading sources\n$RESET"
cat $sourcesfilename
@@ -42,16 +59,59 @@ download_sources() {
wget --input-file=$sourcesfilename --continue --directory-prefix=$root/downloads
check $? "Download sources"
}
#------------------------------------------------------------------------
#--------------- Building Linux Kernel ---------------------
kernel() {
printf "$UGREEN** Building Linux Kernel\n$RESET"
rm -r $build/kernel &> $fulllogfile
mkdir -p $build/kernel &> $fulllogfile
cd $build/kernel
printf "$UGREEN** Extracting Linux Kernel\n$RESET"
tar -xvf $root/downloads/linux-*.tar.xz &> $fulllogfile
check $? "Extract Linux Kernel"
cd linux-*
printf "$UGREEN** Configuring Linux Kernel\n$RESET"
make defconfig &> $fulllogfile
check $? "Configure Linux Kernel"
printf "$UGREEN** Building Linux Kernel\n$RESET"
make $makeflags &> $fulllogfile
check $? "Build Linux Kernel"
ls -lh arch/x86/boot/bzImage
} # kernel
#-----------------------------------------------------------
#----------- Build and Install kernel modules --------------
kernel_modules() {
printf "$UGREEN** Building Linux Kernel modules\n$RESET"
cd $build/kernel/linux-*
make modules &> fulllogfile
check $? "Build Linux Kernel modules"
printf "$UGREEN** Installing Linux Kernel modules into rootfs path\n$RESET"
mkdir -pv $rootfspath/usr/lib &> fulllogfile
cd $rootfspath
ln -sv usr/lib lib &> $fulllogfile
cd $root/build/kernel/linux-*
make INSTALL_MOD_PATH=$rootfspath modules_install &> $fulllogfile
check $? "Install Linux Kernel modules"
} # kernel_modules
#-----------------------------------------------------------
#------------------ Building initramfs.img ------------------------
initramfs() {
printf "$UGREEN** Building initramfs\n$RESET"
rm -r $initramfspath;
#--------- Creating directories and files -------------------
rm -r $initramfspath &> $fulllogfile
mkdir -p $initramfspath;
cd $initramfspath;
mkdir -p $(cat $initramfsfile);
cp $root/initramfs/init.in $initramfspath/init
chmod 755 $initramfspath/init
rm -r $build/busybox
#------------------------------------------------------------
#------------ Building initramfs busybox and copy to initramfs directory --------------------
rm -r $build/busybox &> $fulllogfile
mkdir -p $build/busybox
cd $build/busybox
tar -xjf $root/downloads/busybox-1.36.1.tar.bz2
@@ -63,28 +123,81 @@ initramfs() {
make CROSS_COMPILE=x86_64-buildroot-linux-uclibc- oldconfig &> $root/.log/busybox-configure.log
check $? "Configure busybox all logs in .log"
printf "$UGREEN** Building busybox\n$RESET"
make CROSS_COMPILE=x86_64-buildroot-linux-uclibc- -j16 &> $root/.log/busybox-build.log
make CROSS_COMPILE=x86_64-buildroot-linux-uclibc- $makeflags &> $root/.log/busybox-build.log
check $? "Build busybox all logs in .log"
cp busybox $initramfspath/bin
cd $initramfspath/bin
for i in $(./busybox --list); do ln -s busybox $i; done
cd ..
#--------------------------------------------------------------------------------------------
#--------------------- Creating initramfs.img image ------------
find . | cpio -H newc -o | gzip > ../initramfs.img
check $? "Build initramfs.img image"
cd $root
}
#---------------------------------------------------------------
} # initramfs
#------------------------------------------------------------------
#----------- Building rootfs ----------------------
rootfs() {
rm -rv $rootfspath
mkdir -pv $rootfspath
printf "$UGREEN** Building rootfs\n$RESET"
rm -rv $rootfspath &> $fulllogfile
mkdir -pv $rootfspath &> $fulllogfile
cd $rootfspath
mkdir -pv $(cat $rootfsfile)
}
mkdir -pv $(cat $rootfsfile) &> $fulllogfile
ln -sv usr/lib lib &> $fulllogfile
ln -sv usr/lib lib64 &> $fulllogfile
ln -sv usr/bin bin &> $fulllogfile
ln -sv usr/bin sbin &> $fulllogfile
cd usr
ln -sv bin sbin &> $fulllogfile
ln -sv lib lib64 &> $fulllogfile
cp -rv $root/rootfs/etc/* $rootfspath/etc/ &> $fulllogfile
cp -rv $root/rootfs/usr/* $rootfspath/usr/ &> $fulllogfile
rm -rv $build/busybox &> $fulllogfile
mkdir -v $build/busybox &> $fulllogfile
cd $build/busybox
tar -xvjf $root/downloads/busybox-*.tar.bz2 &> $fulllogfile
cd busybox-*
cp -v $root/busybox/busybox-rootfs-config .config
printf "$UGREEN** Configuring busybox\n$RESET"
make oldconfig &> $root/.log/busybox-configure.log
check $? "Configure busybox all logs in .log"
printf "$UGREEN** Building busybox\n$RESET"
make $makeflags &> $root/.log/busybox-build.log
check $? "Build busybox all logs in .log"
cp -v busybox $rootfspath/usr/bin
cd $rootfspath/usr/bin
for i in $(./busybox --list); do ln -s busybox $i; done
chmod 640 $rootfspath/etc/shadow $rootfspath/etc/inittab
chmod 755 $rootfspath/etc/init.d/* $rootfspath/usr/share/udhcpc/default.script
chmod 644 $rootfspath/etc/{passwd,group,hostname,hosts,fstab,shells,issue} $rootfspath/etc/network/interfaces
check $? "Build rootfs"
} # rootfs
#--------------------------------------------------
#---------- Cleaning build and out directory ---------
clean() {
rm -rv $out
rm -rv $build
}
printf "$UGREEN** Cleaning build and out directories\n$RESET"
rm -rv $out &> $fulllogfile
rm -rv $build &> $fulllogfile
printf "$UGREEN** SUCCESS: Cleaning build and out directories\n$RESET"
} # clean
#-----------------------------------------------------
if [ "$1" = "clean" ]; then
clean
exit 0
fi
clean
# download_sources
initramfs
# kernel
# kernel_modules
# initramfs
rootfs
File diff suppressed because it is too large Load Diff
+16 -8
View File
@@ -1,9 +1,10 @@
#!/bin/sh
#reset
#--- reset colors ---
RESET="\033[0m"
#--------------------
#regularcolrs
#--------- regularcolrs ---------
GREEN="\033[0;32m" #GREEN
BLUE="\033[0;34m" #BLUE
YELLOW="\033[1;33m" #YELLOW
@@ -12,8 +13,9 @@ BLACK="\033[0;30m" #BLACK
PURPLE="\033[0;35m" #PURPLE
CYAN="\033[0;36m" #CYAN
WHITE="\033[0;37m" #WHITE
#--------------------------------
#bold
#-------- bold ------------------
BBLACK="\033[1;30m" #BLACK
BRED="\033[1;31m" #RED
BGREEN="\033[1;32m" #GREEN
@@ -22,8 +24,9 @@ BBLUE="\033[1;34m" #BLUE
BPURPLE="\033[1;35m" #PURPLE
BCYAN="\033[1;36m" #CYAN
BWHITE="\033[1;37m" #WHITE
#--------------------------------
#Underline
#-------- Underline -------------
UBLACK="\033[4;30m" #BLACK
URED="\033[4;31m" #RED
UGREEN="\033[4;32m" #GREEN
@@ -32,8 +35,9 @@ UBLUE="\033[4;34m" #BLUE
UPURPLE="\033[4;35m" #PURPLE
UCYAN="\033[4;36m" #CYAN
UWHITE="\033[4;37m" #WHITE
#--------------------------------
#Background
#--------- Background -----------
ON_BLACK="\033[40m" #BLACK
ON_RED="\033[41m" #RED
ON_GREEN="\033[42m" #GREEN
@@ -42,8 +46,9 @@ ON_BLUE="\033[44m" #BLUE
ON_PURPLE="\033[45m" #PURPLE
ON_CYAN="\033[46m" #CYAN
ON_WHITE="\033[47m" #WHITE
#--------------------------------
#HighIntensity
#------ HighIntensity -----------
IBLACK="\033[0;90m" #BLACK
IRED="\033[0;91m" #RED
IGREEN="\033[0;92m" #GREEN
@@ -52,8 +57,9 @@ IBLUE="\033[0;94m" #BLUE
IPURPLE="\033[0;95m" #PURPLE
ICYAN="\033[0;96m" #CYAN
IWHITE="\033[0;97m" #WHITE
#--------------------------------
#BoldHighIntensity
#------ BoldHighIntensity -------
BIBLACK="\033[1;90m" #BLACK
BIRED="\033[1;91m" #RED
BIGREEN="\033[1;92m" #GREEN
@@ -62,8 +68,9 @@ BIBLUE="\033[1;94m" #BLUE
BIPURPLE="\033[1;95m" #PURPLE
BICYAN="\033[1;96m" #CYAN
BIWHITE="\033[1;97m" #WHITE
#--------------------------------
#HighIntensitybackgrounds
#--- HighIntensitybackgrounds ---
ON_IBLACK="\033[0;100m" #BLACK
ON_IRED="\033[0;101m" #RED
ON_IGREEN="\033[0;102m" #GREEN
@@ -72,3 +79,4 @@ ON_IBLUE="\033[0;104m" #BLUE
ON_IPURPLE="\033[0;105m" #PURPLE
ON_ICYAN="\033[0;106m" #CYAN
ON_IWHITE="\033[0;107m" #WHITE
#--------------------------------
+4
View File
@@ -1,7 +1,10 @@
#!/bin/sh
#--- Import colors ---
. ./colors.sh
#---------------------
#------- Check errors func -----------------
check() {
if [ $1 -ne 0 ]; then
printf "$URED** ERROR: $2\n$RESET"
@@ -9,3 +12,4 @@ check() {
fi
printf "$UGREEN** SUCCESS: $2\n$RESET"
}
#-------------------------------------------
+1
View File
@@ -0,0 +1 @@
# disk mountpoint filesystem options 0 0/1
+1
View File
@@ -0,0 +1 @@
root:x:0:root
+1
View File
@@ -0,0 +1 @@
simple
+3
View File
@@ -0,0 +1,3 @@
127.0.0.1 localhost
::1 localhost
127.0.1.1 simple.localdomain simple
+82
View File
@@ -0,0 +1,82 @@
#!/bin/sh
#--- reset colors ---
RESET="\033[0m"
#--------------------
#--------- regularcolrs ---------
GREEN="\033[0;32m" #GREEN
BLUE="\033[0;34m" #BLUE
YELLOW="\033[1;33m" #YELLOW
RED="\033[0;31m" #RED
BLACK="\033[0;30m" #BLACK
PURPLE="\033[0;35m" #PURPLE
CYAN="\033[0;36m" #CYAN
WHITE="\033[0;37m" #WHITE
#--------------------------------
#-------- bold ------------------
BBLACK="\033[1;30m" #BLACK
BRED="\033[1;31m" #RED
BGREEN="\033[1;32m" #GREEN
BYELLOW="\033[1;33m" #YELLOW
BBLUE="\033[1;34m" #BLUE
BPURPLE="\033[1;35m" #PURPLE
BCYAN="\033[1;36m" #CYAN
BWHITE="\033[1;37m" #WHITE
#--------------------------------
#-------- Underline -------------
UBLACK="\033[4;30m" #BLACK
URED="\033[4;31m" #RED
UGREEN="\033[4;32m" #GREEN
UYELLOW="\033[4;33m" #YELLOW
UBLUE="\033[4;34m" #BLUE
UPURPLE="\033[4;35m" #PURPLE
UCYAN="\033[4;36m" #CYAN
UWHITE="\033[4;37m" #WHITE
#--------------------------------
#--------- Background -----------
ON_BLACK="\033[40m" #BLACK
ON_RED="\033[41m" #RED
ON_GREEN="\033[42m" #GREEN
ON_YELLOW="\033[43m" #YELLOW
ON_BLUE="\033[44m" #BLUE
ON_PURPLE="\033[45m" #PURPLE
ON_CYAN="\033[46m" #CYAN
ON_WHITE="\033[47m" #WHITE
#--------------------------------
#------ HighIntensity -----------
IBLACK="\033[0;90m" #BLACK
IRED="\033[0;91m" #RED
IGREEN="\033[0;92m" #GREEN
IYELLOW="\033[0;93m" #YELLOW
IBLUE="\033[0;94m" #BLUE
IPURPLE="\033[0;95m" #PURPLE
ICYAN="\033[0;96m" #CYAN
IWHITE="\033[0;97m" #WHITE
#--------------------------------
#------ BoldHighIntensity -------
BIBLACK="\033[1;90m" #BLACK
BIRED="\033[1;91m" #RED
BIGREEN="\033[1;92m" #GREEN
BIYELLOW="\033[1;93m" #YELLOW
BIBLUE="\033[1;94m" #BLUE
BIPURPLE="\033[1;95m" #PURPLE
BICYAN="\033[1;96m" #CYAN
BIWHITE="\033[1;97m" #WHITE
#--------------------------------
#--- HighIntensitybackgrounds ---
ON_IBLACK="\033[0;100m" #BLACK
ON_IRED="\033[0;101m" #RED
ON_IGREEN="\033[0;102m" #GREEN
ON_IYELLOW="\033[0;103m" #YELLOW
ON_IBLUE="\033[0;104m" #BLUE
ON_IPURPLE="\033[0;105m" #PURPLE
ON_ICYAN="\033[0;106m" #CYAN
ON_IWHITE="\033[0;107m" #WHITE
#--------------------------------
+44
View File
@@ -0,0 +1,44 @@
#!/bin/sh
#--- import colors ---
. /etc/init.d/colors.sh
#---------------------
#---------------------- rc function to poweron or poweroff ------------
rc() {
if [ -d /etc/rc.d ] && [ $0 == "/etc/init.d/rcK" ]; then
for i in $(ls -r /etc/rc.d); do
/etc/rc.d/$i stop
done
return 1
fi
for i in /etc/rc.d/??*; do
[ ! -f "$i" ] && continue
case "$i" in
*.sh)
(
trap - INT QUIT TSTP
set start
. $i
)
;;
*)
$i start
;;
esac
done
sleep 1
# clear
return 1
}
#----------------------------------------------------------------------
#---------- check status function -----------
check() {
if [ $1 -ne 0 ]; then
printf "$URED** ERROR: $2\n$RESET"
return
fi
printf "$UGREEN** SUCCESS: $2\n$RESET"
}
#--------------------------------------------
+26
View File
@@ -0,0 +1,26 @@
#!/bin/sh
. /etc/init.d/colors.sh
case "$1" in
start)
printf "$UYELLOW Starting networking\n$RESET"
/sbin/ifup -a &> /dev/null
check $? "networking"
echo $! > /var/run/networking.pid
;;
stop)
printf "$UYELLOW Stopping netowrking\n$RESET"
/sbin/ifdown -a
check $? "Stop networking"
rm /var/run/networking.pid
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo "$0 init script usage: $0 {start|stop|restart|reload}"
return 1
esac
return $?
+1
View File
@@ -0,0 +1 @@
rcS
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
. /etc/init.d/init-funcs
rc
+9
View File
@@ -0,0 +1,9 @@
::sysinit:/etc/init.d/rcS
::ctrlaltdel:/sbin/reboot
::shutdown:/etc/init.d/rcK
tty1::respawn:/sbin/getty 38400 tty1
tty2::askfirst:/sbin/getty 38400 tty2
tty3::askfirst:/sbin/getty 38400 tty3
tty4::askfirst:/sbin/getty 38400 tty4
+1
View File
@@ -0,0 +1 @@
\h \r (\l)
+4
View File
@@ -0,0 +1,4 @@
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
+1
View File
@@ -0,0 +1 @@
root:x:0:0:root:/root:/bin/sh
+1
View File
@@ -0,0 +1 @@
root:F.fHA5x2Q.xNY:19797::::::
+2
View File
@@ -0,0 +1,2 @@
/bin/sh
/bin/ash
+64
View File
@@ -0,0 +1,64 @@
#!/bin/sh
. /etc/init.d/colors.sh
[ -z "$1" ] && printf "$URED** ERROR: should be called from udhcpc\n$RESET" && exit 1
RESOLF_CONF="/etc/resolv.conf"
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"
# return 0 if root is mounted on a network filesystem
root_if_nfs() {
grep -qe '^/dev/root.*\(nfs\|smbfs\|ncp\|coda\) .*' /proc/mounts
}
have_bin_ip=0
if [ -x /bin/ip ]; then
have_bin_ip=1
fi
case "$1" in
deconfig)
if ! rootfs_is_nfs; then
if [ $have_bin_ip -eq 1 ]; then
ip a flush dev $interface
ip l set dev $interface up
else
/sbin/ifconfig $interface 0.0.0.0
fi
fi
;;
renew|bound)
if [ $have_bin_ip -eq 1 ]; then
ip a add dev $interface local $ip/$mask $BROADCAST
else
/sbin/ifconfig $interface $ip $BROADCAST $NETMASK
fi
if [ -n "$router" ]; then
if ! root_if_nfs; then
if [ $have_bin_ip -eq 1 ]; then
while ip r del default 2>/dev/null; do
:
done
else
while route del default gw 0.0.0.0 dev $interface 2>/dev/null; do
:
done
fi
fi
metric=0
for i in $router; do
if [ $have_bin_ip -eq 1 ]; then
ip r add default via $i metric $((metric++))
else
route add default gw $i dev $interface metric $((metric++)) 2>/dev/null
fi
done
fi
echo -n > $RESOLF_CONF
[ -n "$domain" ] && echo search $domain >> $RESOLF_CONF
for i in $dns; do
echo adding dns $i
echo nameserver $i >> $RESOLF_CONF
done
;;
esac
exit 0