Moved the stable 'glibc-busybox' scripts from the experimental folder to the root script folder. Removed the 'experimental' folder because the DNS resolving issue has been fixed. Added website information about the '03-Apr-2016' release.
This commit is contained in:
parent
b097308669
commit
0441e69d0c
10
src/.config
10
src/.config
@ -2,11 +2,17 @@
|
|||||||
#
|
#
|
||||||
# http://kernel.org
|
# http://kernel.org
|
||||||
#
|
#
|
||||||
KERNEL_SOURCE_URL=https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.1.6.tar.xz
|
KERNEL_SOURCE_URL=https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.6.tar.xz
|
||||||
|
|
||||||
|
# You can find the latest GNU libc source bundles here:
|
||||||
|
#
|
||||||
|
# http://gnu.org/software/libc
|
||||||
|
#
|
||||||
|
GLIBC_SOURCE_URL=http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.bz2
|
||||||
|
|
||||||
# You can find the latest BusyBox source bundles here:
|
# You can find the latest BusyBox source bundles here:
|
||||||
#
|
#
|
||||||
# http://busybox.net
|
# http://busybox.net
|
||||||
#
|
#
|
||||||
BUSYBOX_SOURCE_URL=http://busybox.net/downloads/busybox-1.23.2.tar.bz2
|
BUSYBOX_SOURCE_URL=http://busybox.net/downloads/busybox-1.24.2.tar.bz2
|
||||||
|
|
||||||
|
0
src/experimental/glibc-busybox/00_prepare.sh → src/00_prepare.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/00_prepare.sh → src/00_prepare.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/01_get_kernel.sh → src/01_get_kernel.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/01_get_kernel.sh → src/01_get_kernel.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/02_build_kernel.sh → src/02_build_kernel.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/02_build_kernel.sh → src/02_build_kernel.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/03_get_glibc.sh → src/03_get_glibc.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/03_get_glibc.sh → src/03_get_glibc.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/04_build_glibc.sh → src/04_build_glibc.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/04_build_glibc.sh → src/04_build_glibc.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/05_prepare_glibc.sh → src/05_prepare_glibc.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/05_prepare_glibc.sh → src/05_prepare_glibc.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/06_get_busybox.sh → src/06_get_busybox.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/06_get_busybox.sh → src/06_get_busybox.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/07_build_busybox.sh → src/07_build_busybox.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/07_build_busybox.sh → src/07_build_busybox.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/08_generate_rootfs.sh → src/08_generate_rootfs.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/08_generate_rootfs.sh → src/08_generate_rootfs.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/09_pack_rootfs.sh → src/09_pack_rootfs.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/09_pack_rootfs.sh → src/09_pack_rootfs.sh
Executable file → Normal file
@ -1,8 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
rm -rf work
|
|
||||||
mkdir work
|
|
||||||
|
|
||||||
# -p stops errors if the directory already exists
|
|
||||||
mkdir -p source
|
|
||||||
|
|
0
src/experimental/glibc-busybox/10_generate_iso.sh → src/10_generate_iso.sh
Executable file → Normal file
0
src/experimental/glibc-busybox/10_generate_iso.sh → src/10_generate_iso.sh
Executable file → Normal file
@ -1,24 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Grab everything after the '=' character
|
|
||||||
DOWNLOAD_URL=$(grep -i KERNEL_SOURCE_URL .config | cut -f2 -d'=')
|
|
||||||
|
|
||||||
# Grab everything after the last '/' character
|
|
||||||
ARCHIVE_FILE=${DOWNLOAD_URL##*/}
|
|
||||||
|
|
||||||
cd source
|
|
||||||
|
|
||||||
# Downloading kernel file
|
|
||||||
# -c option allows the download to resume
|
|
||||||
wget -c $DOWNLOAD_URL
|
|
||||||
|
|
||||||
# Delete folder with previously extracted kernel
|
|
||||||
rm -rf ../work/kernel
|
|
||||||
mkdir ../work/kernel
|
|
||||||
|
|
||||||
# Extract kernel to folder 'work/kernel'
|
|
||||||
# Full path will be something like 'work/kernel/linux-3.16.1'
|
|
||||||
tar -xvf $ARCHIVE_FILE -C ../work/kernel
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work/kernel
|
|
||||||
|
|
||||||
# Change to the first directory ls finds, e.g. 'linux-3.18.6'
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
# Cleans up the kernel sources, including configuration files
|
|
||||||
make mrproper
|
|
||||||
|
|
||||||
# Create a default configuration file for the kernel
|
|
||||||
make defconfig
|
|
||||||
|
|
||||||
# Changes the name of the system
|
|
||||||
sed -i "s/.*CONFIG_DEFAULT_HOSTNAME.*/CONFIG_DEFAULT_HOSTNAME=\"minimal\"/" .config
|
|
||||||
|
|
||||||
# Compile the kernel with optimization for "parallel jobs" = "number of processors"
|
|
||||||
# Good explanation of the different kernels
|
|
||||||
# http://unix.stackexchange.com/questions/5518/what-is-the-difference-between-the-following-kernel-makefile-terms-vmlinux-vmlinux
|
|
||||||
make bzImage -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
cd ../../..
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Grab everything after the '=' character
|
|
||||||
DOWNLOAD_URL=$(grep -i BUSYBOX_SOURCE_URL .config | cut -f2 -d'=')
|
|
||||||
|
|
||||||
# Grab everything after the last '/' character
|
|
||||||
ARCHIVE_FILE=${DOWNLOAD_URL##*/}
|
|
||||||
|
|
||||||
cd source
|
|
||||||
|
|
||||||
# Downloading busybox source
|
|
||||||
# -c option allows the download to resume
|
|
||||||
wget -c $DOWNLOAD_URL
|
|
||||||
|
|
||||||
# Delete folder with previously extracted busybox
|
|
||||||
rm -rf ../work/busybox
|
|
||||||
mkdir ../work/busybox
|
|
||||||
|
|
||||||
# Extract busybox to folder 'busybox'
|
|
||||||
# Full path will be something like 'work/busybox/busybox-1.23.1'
|
|
||||||
tar -xvf $ARCHIVE_FILE -C ../work/busybox
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work/busybox
|
|
||||||
|
|
||||||
# Change to the first directory ls finds, e.g. 'busybox-1.23.1'
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
# Remove previously generated artefacts
|
|
||||||
make clean
|
|
||||||
|
|
||||||
# Create a default configuration file
|
|
||||||
make defconfig
|
|
||||||
|
|
||||||
# Change the configuration, so that busybox is statically compiled
|
|
||||||
# You could do this manually with 'make menuconfig'
|
|
||||||
sed -i "s/.*CONFIG_STATIC.*/CONFIG_STATIC=y/" .config
|
|
||||||
|
|
||||||
# Busybox has "RPC networking" enabled in default configuration file.
|
|
||||||
# In glibc > 2.14 such support was removed by default.
|
|
||||||
# http://lists.busybox.net/pipermail/buildroot/2012-June/055173.html
|
|
||||||
# It causes failures on glibc toolchains without RPC support.
|
|
||||||
sed -e 's/.*CONFIG_FEATURE_HAVE_RPC.*/CONFIG_FEATURE_HAVE_RPC=n/' -i .config
|
|
||||||
sed -e 's/.*CONFIG_FEATURE_INETD_RPC.*/CONFIG_FEATURE_INETD_RPC=n/' -i .config
|
|
||||||
|
|
||||||
# Compile busybox with optimization for "parallel jobs" = "number of processors"
|
|
||||||
make busybox -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
# Create the symlinks for busybox
|
|
||||||
# It uses the file 'busybox.links' for this
|
|
||||||
make install
|
|
||||||
|
|
||||||
cd ../../..
|
|
||||||
|
|
@ -1,116 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work
|
|
||||||
|
|
||||||
rm -rf rootfs
|
|
||||||
|
|
||||||
cd busybox
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
# Copy all BusyBox generated stuff to the location of our "initramfs" folder.
|
|
||||||
cp -R _install ../../rootfs
|
|
||||||
cd ../../rootfs
|
|
||||||
|
|
||||||
# Remove "linuxrc" which is used when we boot in "RAM disk" mode.
|
|
||||||
rm -f linuxrc
|
|
||||||
|
|
||||||
# Create root FS folders
|
|
||||||
mkdir dev
|
|
||||||
mkdir etc
|
|
||||||
mkdir proc
|
|
||||||
mkdir root
|
|
||||||
mkdir src
|
|
||||||
mkdir sys
|
|
||||||
mkdir tmp
|
|
||||||
|
|
||||||
# "1" means that only the owner of a file/directory (or root) can remove it.
|
|
||||||
chmod 1777 tmp
|
|
||||||
|
|
||||||
cd etc
|
|
||||||
|
|
||||||
# The script "/etc/bootscript.sh" is automatically executed as part of the
|
|
||||||
# "init" proess. We suppress most kernel messages, mount all crytical file
|
|
||||||
# systems, loop through all available network devices and we configure them
|
|
||||||
# through DHCP.
|
|
||||||
cat > bootscript.sh << EOF
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
dmesg -n 1
|
|
||||||
mount -t devtmpfs none /dev
|
|
||||||
mount -t proc none /proc
|
|
||||||
mount -t sysfs none /sys
|
|
||||||
|
|
||||||
for DEVICE in /sys/class/net/* ; do
|
|
||||||
ip link set \${DEVICE##*/} up
|
|
||||||
[ \${DEVICE##*/} != lo ] && udhcpc -b -i \${DEVICE##*/} -s /etc/rc.dhcp
|
|
||||||
done
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x bootscript.sh
|
|
||||||
|
|
||||||
# The script "/etc/rc.dhcp" is automatically invoked for each network device.
|
|
||||||
cat > rc.dhcp << EOF
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
ip addr add \$ip/\$mask dev \$interface
|
|
||||||
|
|
||||||
if [ "\$router" ]; then
|
|
||||||
ip route add default via \$router dev \$interface
|
|
||||||
fi
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x rc.dhcp
|
|
||||||
|
|
||||||
# The file "/etc/welcome.txt" is displayed on every boot of the system in each
|
|
||||||
# available terminal.
|
|
||||||
cat > welcome.txt << EOF
|
|
||||||
|
|
||||||
#####################################
|
|
||||||
# #
|
|
||||||
# Welcome to "Minimal Linux Live" #
|
|
||||||
# #
|
|
||||||
#####################################
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# The file "/etc/inittab" contains the configuration which defines how the
|
|
||||||
# system will be initialized. Check the following URL for more details:
|
|
||||||
# http://git.busybox.net/busybox/tree/examples/inittab
|
|
||||||
cat > inittab << EOF
|
|
||||||
::sysinit:/etc/bootscript.sh
|
|
||||||
::restart:/sbin/init
|
|
||||||
::ctrlaltdel:/sbin/reboot
|
|
||||||
::once:cat /etc/welcome.txt
|
|
||||||
::respawn:/bin/cttyhack /bin/sh
|
|
||||||
tty2::once:cat /etc/welcome.txt
|
|
||||||
tty2::respawn:/bin/sh
|
|
||||||
tty3::once:cat /etc/welcome.txt
|
|
||||||
tty3::respawn:/bin/sh
|
|
||||||
tty4::once:cat /etc/welcome.txt
|
|
||||||
tty4::respawn:/bin/sh
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
# The "/init" script passes the execution to "/sbin/init" which in turn looks
|
|
||||||
# for the configuration file "/etc/inittab".
|
|
||||||
cat > init << EOF
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
exec /sbin/init
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x init
|
|
||||||
|
|
||||||
# Copy all source files to "/src". Note that the scripts won't work there.
|
|
||||||
cp ../../*.sh src
|
|
||||||
cp ../../.config src
|
|
||||||
chmod +r src/*.sh
|
|
||||||
chmod +r src/.config
|
|
||||||
|
|
||||||
cd ../..
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work
|
|
||||||
|
|
||||||
# Remove the old initramfs archive if it exists.
|
|
||||||
rm -f rootfs.cpio.gz
|
|
||||||
|
|
||||||
cd rootfs
|
|
||||||
|
|
||||||
# Suggested update by John Jolly.
|
|
||||||
#
|
|
||||||
# find . | cpio -R root:root -H newc -o | gzip > ../rootfs.cpio.gz
|
|
||||||
#
|
|
||||||
# This produces a root fs with files and directories all owned by user 0, group 0.
|
|
||||||
# Note: test this change as soon as possible!
|
|
||||||
#
|
|
||||||
# Packs the current folder structure in "cpio.gz" archive.
|
|
||||||
find . | cpio -H newc -o | gzip > ../rootfs.cpio.gz
|
|
||||||
|
|
||||||
cd ../..
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
rm -f minimal_linux_live.iso
|
|
||||||
|
|
||||||
cd work/kernel
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
# Edit Makefile to look for genisoimage instead of mkisofs. This was added as a
|
|
||||||
# workaround for some "Debian" and "Arch Linux" distributions. In general this
|
|
||||||
# fix should be harmless.
|
|
||||||
sed -i 's/mkisofs/genisoimage/g' arch/x86/boot/Makefile
|
|
||||||
|
|
||||||
# Generate the ISO image with optimization for "parallel jobs" = "number of processors"
|
|
||||||
make isoimage FDINITRD=../../rootfs.cpio.gz -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
cp arch/x86/boot/image.iso ../../../minimal_linux_live.iso
|
|
||||||
|
|
||||||
cd ../../..
|
|
||||||
|
|
@ -1,10 +1,14 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
sh 0_prepare.sh
|
sh 00_prepare.sh
|
||||||
sh 1_get_kernel.sh
|
sh 01_get_kernel.sh
|
||||||
sh 2_build_kernel.sh
|
sh 02_build_kernel.sh
|
||||||
sh 3_get_busybox.sh
|
sh 03_get_glibc.sh
|
||||||
sh 4_build_busybox.sh
|
sh 04_build_glibc.sh
|
||||||
sh 5_generate_rootfs.sh
|
sh 05_prepare_glibc.sh
|
||||||
sh 6_pack_rootfs.sh
|
sh 06_get_busybox.sh
|
||||||
sh 7_generate_iso.sh
|
sh 07_build_busybox.sh
|
||||||
|
sh 08_generate_rootfs.sh
|
||||||
|
sh 09_pack_rootfs.sh
|
||||||
|
sh 10_generate_iso.sh
|
||||||
|
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
# You can find the latest Linux kernel source bundles here:
|
|
||||||
#
|
|
||||||
# http://kernel.org
|
|
||||||
#
|
|
||||||
KERNEL_SOURCE_URL=https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.6.tar.xz
|
|
||||||
|
|
||||||
# You can find the latest GNU libc source bundles here:
|
|
||||||
#
|
|
||||||
# http://gnu.org/software/libc
|
|
||||||
#
|
|
||||||
GLIBC_SOURCE_URL=http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.bz2
|
|
||||||
|
|
||||||
# You can find the latest BusyBox source bundles here:
|
|
||||||
#
|
|
||||||
# http://busybox.net
|
|
||||||
#
|
|
||||||
BUSYBOX_SOURCE_URL=http://busybox.net/downloads/busybox-1.24.2.tar.bz2
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
sh 00_prepare.sh
|
|
||||||
sh 01_get_kernel.sh
|
|
||||||
sh 02_build_kernel.sh
|
|
||||||
sh 03_get_glibc.sh
|
|
||||||
sh 04_build_glibc.sh
|
|
||||||
sh 05_prepare_glibc.sh
|
|
||||||
sh 06_get_busybox.sh
|
|
||||||
sh 07_build_busybox.sh
|
|
||||||
sh 08_generate_rootfs.sh
|
|
||||||
sh 09_pack_rootfs.sh
|
|
||||||
sh 10_generate_iso.sh
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
qemu-system-i386 -m 64M -cdrom minimal_linux_live.iso
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
qemu-system-x86_64 -m 64M -cdrom minimal_linux_live.iso
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
|||||||
# You can find the latest Linux kernel source bundles here:
|
|
||||||
#
|
|
||||||
# http://kernel.org
|
|
||||||
#
|
|
||||||
KERNEL_SOURCE_URL=https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.1.6.tar.xz
|
|
||||||
|
|
||||||
# You can find the latest ToyBox source bundles here:
|
|
||||||
#
|
|
||||||
# http://landley.net/toybox
|
|
||||||
#
|
|
||||||
TOYBOX_SOURCE_URL=http://landley.net/toybox/downloads/toybox-0.6.0.tar.gz
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
rm -rf work
|
|
||||||
mkdir work
|
|
||||||
|
|
||||||
# -p stops errors if the directory already exists.
|
|
||||||
mkdir -p source
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Grab everything after the '=' character.
|
|
||||||
DOWNLOAD_URL=$(grep -i KERNEL_SOURCE_URL .config | cut -f2 -d'=')
|
|
||||||
|
|
||||||
# Grab everything after the last '/' character.
|
|
||||||
ARCHIVE_FILE=${DOWNLOAD_URL##*/}
|
|
||||||
|
|
||||||
cd source
|
|
||||||
|
|
||||||
# Downloading kernel file.
|
|
||||||
# -c option allows the download to resume.
|
|
||||||
wget -c $DOWNLOAD_URL
|
|
||||||
|
|
||||||
# Delete folder with previously extracted kernel.
|
|
||||||
rm -rf ../work/kernel
|
|
||||||
mkdir ../work/kernel
|
|
||||||
|
|
||||||
# Extract kernel to folder 'work/kernel'.
|
|
||||||
# Full path will be something like 'work/kernel/linux-4.1.6'.
|
|
||||||
tar -xvf $ARCHIVE_FILE -C ../work/kernel
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work/kernel
|
|
||||||
|
|
||||||
# Change to the first directory ls finds, e.g. 'linux-3.18.6'.
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
# Cleans up the kernel sources, including configuration files.
|
|
||||||
make mrproper
|
|
||||||
|
|
||||||
# Create a default configuration file for the kernel.
|
|
||||||
make defconfig
|
|
||||||
|
|
||||||
# Changes the name of the system.
|
|
||||||
sed -i "s/.*CONFIG_DEFAULT_HOSTNAME.*/CONFIG_DEFAULT_HOSTNAME=\"minimal\"/" .config
|
|
||||||
|
|
||||||
# Compile the kernel with optimization for "parallel jobs" = "number of processors".
|
|
||||||
# Good explanation of the different kernels:
|
|
||||||
# http://unix.stackexchange.com/questions/5518/what-is-the-difference-between-the-following-kernel-makefile-terms-vmlinux-vmlinux
|
|
||||||
make bzImage -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
cd ../../..
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Grab everything after the '=' character.
|
|
||||||
DOWNLOAD_URL=$(grep -i TOYBOX_SOURCE_URL .config | cut -f2 -d'=')
|
|
||||||
|
|
||||||
# Grab everything after the last '/' character.
|
|
||||||
ARCHIVE_FILE=${DOWNLOAD_URL##*/}
|
|
||||||
|
|
||||||
cd source
|
|
||||||
|
|
||||||
# Downloading ToyBox source.
|
|
||||||
# -c option allows the download to resume.
|
|
||||||
wget -c $DOWNLOAD_URL
|
|
||||||
|
|
||||||
# Delete folder with previously extracted ToyBox.
|
|
||||||
rm -rf ../work/toybox
|
|
||||||
mkdir ../work/toybox
|
|
||||||
|
|
||||||
# Extract toybox to folder 'toybox'.
|
|
||||||
# Full path will be something like 'work/toybox/toybox-0.6.0'.
|
|
||||||
tar -xvf $ARCHIVE_FILE -C ../work/toybox
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work/toybox
|
|
||||||
|
|
||||||
# Change to the first directory ls finds, e.g. 'toybox-0.6.0'
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
# Remove previously generated artefacts.
|
|
||||||
make distclean
|
|
||||||
|
|
||||||
# Create a configuration file with all possible selections.
|
|
||||||
make allyesconfig
|
|
||||||
|
|
||||||
# Static linking
|
|
||||||
export LDFLAGS="--static"
|
|
||||||
|
|
||||||
# Compile ToyBox with optimization for "parallel jobs" = "number of processors".
|
|
||||||
make toybox -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
# We no longer need flags for static linking.
|
|
||||||
unset LDFLAGS
|
|
||||||
|
|
||||||
rm -rf rootfs
|
|
||||||
mkdir rootfs
|
|
||||||
|
|
||||||
# Directory where ToyBox binary and symlink will be instaled.
|
|
||||||
export PREFIX=rootfs
|
|
||||||
|
|
||||||
# Create the symlinks for toybox in single folder.
|
|
||||||
make install_flat
|
|
||||||
|
|
||||||
# We no longer need this environment variable.
|
|
||||||
unset PREFIX
|
|
||||||
|
|
||||||
cd ../../..
|
|
||||||
|
|
@ -1,70 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work
|
|
||||||
|
|
||||||
rm -rf rootfs
|
|
||||||
mkdir rootfs
|
|
||||||
|
|
||||||
cd toybox
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
# Copy all toybox generated stuff to the location of our "initramfs/bin" folder.
|
|
||||||
cp -R rootfs ../../rootfs/bin
|
|
||||||
cd ../../rootfs
|
|
||||||
|
|
||||||
# Create root FS folders
|
|
||||||
mkdir dev
|
|
||||||
mkdir etc
|
|
||||||
mkdir proc
|
|
||||||
mkdir root
|
|
||||||
mkdir src
|
|
||||||
mkdir sys
|
|
||||||
mkdir tmp
|
|
||||||
|
|
||||||
# "1" means that only the owner of a file/directory (or root) can remove it.
|
|
||||||
chmod 1777 tmp
|
|
||||||
|
|
||||||
cd etc
|
|
||||||
|
|
||||||
# The file "/etc/welcome.txt" is displayed on every boot.
|
|
||||||
cat > welcome.txt << EOF
|
|
||||||
|
|
||||||
#####################################
|
|
||||||
# #
|
|
||||||
# Welcome to "Minimal Linux Live" #
|
|
||||||
# #
|
|
||||||
#####################################
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
# For now we have simple console.
|
|
||||||
cat > init << EOF
|
|
||||||
#!/bin/sh
|
|
||||||
dmesg -n 1
|
|
||||||
|
|
||||||
mount -t devtmpfs none /dev
|
|
||||||
mount -t proc none /proc
|
|
||||||
mount -t sysfs none /sys
|
|
||||||
|
|
||||||
ifconfig eth0 up
|
|
||||||
dhcp -i eth0
|
|
||||||
|
|
||||||
cat /etc/welcome.txt
|
|
||||||
|
|
||||||
sh
|
|
||||||
|
|
||||||
poweroff
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +rx init
|
|
||||||
|
|
||||||
# Copy all source files to "/src". Note that the scripts won't work there.
|
|
||||||
cp ../../*.sh src
|
|
||||||
cp ../../.config src
|
|
||||||
chmod +r src/*.sh
|
|
||||||
chmod +r src/.config
|
|
||||||
|
|
||||||
cd ../..
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work
|
|
||||||
|
|
||||||
# Remove the old initramfs archive if it exists.
|
|
||||||
rm -f rootfs.cpio.gz
|
|
||||||
|
|
||||||
cd rootfs
|
|
||||||
|
|
||||||
# Packs the current folder structure in "cpio.gz" archive.
|
|
||||||
find . | cpio -H newc -o | gzip > ../rootfs.cpio.gz
|
|
||||||
|
|
||||||
cd ../..
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
rm -f minimal_linux_live.iso
|
|
||||||
|
|
||||||
cd work/kernel
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
# Edit Makefile to look for genisoimage instead of mkisofs. This was added as a
|
|
||||||
# workaround for some "Debian" and "Arch Linux" distributions. In general this
|
|
||||||
# fix should be harmless.
|
|
||||||
sed -i 's/mkisofs/genisoimage/g' arch/x86/boot/Makefile
|
|
||||||
|
|
||||||
# Generate the ISO image with optimization for "parallel jobs" = "number of processors"
|
|
||||||
make isoimage FDINITRD=../../rootfs.cpio.gz -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
cp arch/x86/boot/image.iso ../../../minimal_linux_live.iso
|
|
||||||
|
|
||||||
cd ../../..
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
sh 0_prepare.sh
|
|
||||||
sh 1_get_kernel.sh
|
|
||||||
sh 2_build_kernel.sh
|
|
||||||
sh 3_get_toybox.sh
|
|
||||||
sh 4_build_toybox.sh
|
|
||||||
sh 5_generate_rootfs.sh
|
|
||||||
sh 6_pack_rootfs.sh
|
|
||||||
sh 7_generate_iso.sh
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
qemu-system-i386 -cdrom minimal_linux_live.iso
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
qemu-system-x86_64 -cdrom minimal_linux_live.iso
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
|||||||
# You can find the latest Linux kernel source bundles here:
|
|
||||||
#
|
|
||||||
# http://kernel.org
|
|
||||||
#
|
|
||||||
KERNEL_SOURCE_URL=https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.1.6.tar.xz
|
|
||||||
|
|
||||||
# You can find the latest Musl source bundles here:
|
|
||||||
#
|
|
||||||
# http://musl-libc.org
|
|
||||||
#
|
|
||||||
MUSL_SOURCE_URL=http://musl-libc.org/releases/musl-1.1.11.tar.gz
|
|
||||||
|
|
||||||
# You can find the latest BusyBox source bundles here:
|
|
||||||
#
|
|
||||||
# http://busybox.net
|
|
||||||
#
|
|
||||||
BUSYBOX_SOURCE_URL=http://busybox.net/downloads/busybox-1.23.2.tar.bz2
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
rm -rf work
|
|
||||||
mkdir work
|
|
||||||
|
|
||||||
# -p stops errors if the directory already exists
|
|
||||||
mkdir -p source
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Grab everything after the '=' character
|
|
||||||
DOWNLOAD_URL=$(grep -i KERNEL_SOURCE_URL .config | cut -f2 -d'=')
|
|
||||||
|
|
||||||
# Grab everything after the last '/' character
|
|
||||||
ARCHIVE_FILE=${DOWNLOAD_URL##*/}
|
|
||||||
|
|
||||||
cd source
|
|
||||||
|
|
||||||
# Downloading kernel file
|
|
||||||
# -c option allows the download to resume
|
|
||||||
wget -c $DOWNLOAD_URL
|
|
||||||
|
|
||||||
# Delete folder with previously extracted kernel
|
|
||||||
rm -rf ../work/kernel
|
|
||||||
mkdir ../work/kernel
|
|
||||||
|
|
||||||
# Extract kernel to folder 'work/kernel'
|
|
||||||
# Full path will be something like 'work/kernel/linux-3.16.1'
|
|
||||||
tar -xvf $ARCHIVE_FILE -C ../work/kernel
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work/kernel
|
|
||||||
|
|
||||||
# Change to the first directory ls finds, e.g. 'linux-3.18.6'
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
# Cleans up the kernel sources, including configuration files
|
|
||||||
make mrproper
|
|
||||||
|
|
||||||
# Create a default configuration file for the kernel
|
|
||||||
make defconfig
|
|
||||||
|
|
||||||
# Changes the name of the system
|
|
||||||
sed -i "s/.*CONFIG_DEFAULT_HOSTNAME.*/CONFIG_DEFAULT_HOSTNAME=\"minimal\"/" .config
|
|
||||||
|
|
||||||
# Compile the kernel with optimization for "parallel jobs" = "number of processors"
|
|
||||||
# Good explanation of the different kernels
|
|
||||||
# http://unix.stackexchange.com/questions/5518/what-is-the-difference-between-the-following-kernel-makefile-terms-vmlinux-vmlinux
|
|
||||||
make bzImage -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
# We need the kernel headers later, so we install them now in ./usr (this is not /usr)
|
|
||||||
make headers_install -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
cd ../../..
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Grab everything after the '=' character
|
|
||||||
DOWNLOAD_URL=$(grep -i MUSL_SOURCE_URL .config | cut -f2 -d'=')
|
|
||||||
|
|
||||||
# Grab everything after the last '/' character
|
|
||||||
ARCHIVE_FILE=${DOWNLOAD_URL##*/}
|
|
||||||
|
|
||||||
cd source
|
|
||||||
|
|
||||||
# Downloading musl file
|
|
||||||
# -c option allows the download to resume
|
|
||||||
wget -c $DOWNLOAD_URL
|
|
||||||
|
|
||||||
# Delete folder with previously extracted musl
|
|
||||||
rm -rf ../work/musl
|
|
||||||
mkdir ../work/musl
|
|
||||||
|
|
||||||
# Extract musl to folder 'work/musl'
|
|
||||||
# Full path will be something like 'work/musl/musl-1.1.11'
|
|
||||||
tar -xvf $ARCHIVE_FILE -C ../work/musl
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work/musl
|
|
||||||
|
|
||||||
# Change to the first directory ls finds, e.g. 'musl-1.1.11'
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
make distclean
|
|
||||||
|
|
||||||
mkdir musl-installed
|
|
||||||
./configure --prefix=$(pwd)/musl-installed
|
|
||||||
|
|
||||||
make -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
make install -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
cd ../../..
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work/kernel
|
|
||||||
cd $(ls -d *)
|
|
||||||
WORK_KERNEL_DIR=$(pwd)
|
|
||||||
cd ../../..
|
|
||||||
|
|
||||||
cd work/musl
|
|
||||||
|
|
||||||
# Change to the first directory ls finds, e.g. 'musl-1.1.11'
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
cd musl-installed/bin
|
|
||||||
|
|
||||||
unlink musl-ar 2>/dev/null
|
|
||||||
ln -s `which ar` musl-ar
|
|
||||||
|
|
||||||
unlink musl-strip 2>/dev/null
|
|
||||||
ln -s `which strip` musl-strip
|
|
||||||
|
|
||||||
cd ../include
|
|
||||||
|
|
||||||
# Copy all kernel headers to musl's 'include' folder
|
|
||||||
cp -rf $WORK_KERNEL_DIR/usr/include/* .
|
|
||||||
|
|
||||||
# Make sure some C structs are not defined in kernel headers if thgey are already defined in musl
|
|
||||||
sed -i "s/^\#if.__UAPI_DEF_IN6_ADDR$/#if !defined(_NETINET_IN_H) \&\& defined(__UAPI_DEF_IN6_ADDR)/" ./linux/in6.h
|
|
||||||
sed -i "s/^\#if.__UAPI_DEF_SOCKADDR_IN6$/#if !defined(_NETINET_IN_H) \&\& defined(__UAPI_DEF_SOCKADDR_IN6)/" ./linux/in6.h
|
|
||||||
sed -i "s/^\#if.__UAPI_DEF_IPV6_MREQ$/#if !defined(_NETINET_IN_H) \&\& defined(__UAPI_DEF_IPV6_MREQ)/" ./linux/in6.h
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Grab everything after the '=' character
|
|
||||||
DOWNLOAD_URL=$(grep -i BUSYBOX_SOURCE_URL .config | cut -f2 -d'=')
|
|
||||||
|
|
||||||
# Grab everything after the last '/' character
|
|
||||||
ARCHIVE_FILE=${DOWNLOAD_URL##*/}
|
|
||||||
|
|
||||||
cd source
|
|
||||||
|
|
||||||
# Downloading busybox source
|
|
||||||
# -c option allows the download to resume
|
|
||||||
wget -c $DOWNLOAD_URL
|
|
||||||
|
|
||||||
# Delete folder with previously extracted busybox
|
|
||||||
rm -rf ../work/busybox
|
|
||||||
mkdir ../work/busybox
|
|
||||||
|
|
||||||
# Extract busybox to folder 'busybox'
|
|
||||||
# Full path will be something like 'work/busybox/busybox-1.23.1'
|
|
||||||
tar -xvf $ARCHIVE_FILE -C ../work/busybox
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work/musl
|
|
||||||
cd $(ls -d *)
|
|
||||||
cd musl-installed
|
|
||||||
cd bin
|
|
||||||
MUSL_BIN_DIR=$(pwd)
|
|
||||||
cd ../../../../..
|
|
||||||
|
|
||||||
cd work/busybox
|
|
||||||
|
|
||||||
# Change to the first directory ls finds, e.g. 'busybox-1.23.1'
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
PATH_BACKUP=$PATH
|
|
||||||
PATH=$MUSL_BIN_DIR:$PATH
|
|
||||||
|
|
||||||
# Remove previously generated artifacts
|
|
||||||
make distclean
|
|
||||||
|
|
||||||
# Create a default configuration file
|
|
||||||
make defconfig
|
|
||||||
|
|
||||||
# Change the configuration, so that busybox is statically compiled
|
|
||||||
# You could do this manually with 'make menuconfig'
|
|
||||||
sed -i "s/.*CONFIG_STATIC.*/CONFIG_STATIC=y/" .config
|
|
||||||
sed -i "s/.*CONFIG_CROSS_COMPILER_PREFIX.*/CONFIG_CROSS_COMPILER_PREFIX=\"musl-\"/" .config
|
|
||||||
sed -i "s/.*CONFIG_IFPLUGD.*/CONFIG_IFPLUGD=n/" .config
|
|
||||||
sed -i "s/.*CONFIG_INETD.*/CONFIG_INETD=n/" .config
|
|
||||||
|
|
||||||
# Compile busybox with optimization for "parallel jobs" = "number of processors"
|
|
||||||
make busybox -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
# Create the symlinks for busybox
|
|
||||||
# It uses the file 'busybox.links' for this
|
|
||||||
make install
|
|
||||||
|
|
||||||
PATH=$PATH_BACKUP
|
|
||||||
|
|
||||||
cd ../../..
|
|
||||||
|
|
@ -1,123 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work
|
|
||||||
|
|
||||||
rm -rf rootfs
|
|
||||||
|
|
||||||
cd busybox
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
# Copy all BusyBox generated stuff to the location of our "initramfs" folder.
|
|
||||||
cp -R _install ../../rootfs
|
|
||||||
cd ../../rootfs
|
|
||||||
|
|
||||||
# Remove "linuxrc" which is used when we boot in "RAM disk" mode.
|
|
||||||
rm -f linuxrc
|
|
||||||
|
|
||||||
# Create root FS folders
|
|
||||||
mkdir dev
|
|
||||||
mkdir etc
|
|
||||||
mkdir proc
|
|
||||||
mkdir root
|
|
||||||
mkdir src
|
|
||||||
mkdir sys
|
|
||||||
mkdir tmp
|
|
||||||
|
|
||||||
# "1" means that only the owner of a file/directory (or root) can remove it.
|
|
||||||
chmod 1777 tmp
|
|
||||||
|
|
||||||
cd etc
|
|
||||||
|
|
||||||
# The script "/etc/bootscript.sh" is automatically executed as part of the
|
|
||||||
# "init" proess. We suppress most kernel messages, mount all crytical file
|
|
||||||
# systems, loop through all available network devices and we configure them
|
|
||||||
# through DHCP.
|
|
||||||
cat > bootscript.sh << EOF
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
dmesg -n 1
|
|
||||||
mount -t devtmpfs none /dev
|
|
||||||
mount -t proc none /proc
|
|
||||||
mount -t sysfs none /sys
|
|
||||||
|
|
||||||
for DEVICE in /sys/class/net/* ; do
|
|
||||||
ip link set \${DEVICE##*/} up
|
|
||||||
[ \${DEVICE##*/} != lo ] && udhcpc -b -i \${DEVICE##*/} -s /etc/rc.dhcp
|
|
||||||
done
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x bootscript.sh
|
|
||||||
|
|
||||||
# The script "/etc/rc.dhcp" is automatically invoked for each network device.
|
|
||||||
cat > rc.dhcp << EOF
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
ip addr add \$ip/\$mask dev \$interface
|
|
||||||
|
|
||||||
if [ "\$router" ]; then
|
|
||||||
ip route add default via \$router dev \$interface
|
|
||||||
fi
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x rc.dhcp
|
|
||||||
|
|
||||||
# DNS resolving is done by using Google's public DNS servers
|
|
||||||
cat > resolv.conf << EOF
|
|
||||||
nameserver 8.8.8.8
|
|
||||||
nameserver 8.8.4.4
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# The file "/etc/welcome.txt" is displayed on every boot of the system in each
|
|
||||||
# available terminal.
|
|
||||||
cat > welcome.txt << EOF
|
|
||||||
|
|
||||||
#####################################
|
|
||||||
# #
|
|
||||||
# Welcome to "Minimal Linux Live" #
|
|
||||||
# #
|
|
||||||
#####################################
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# The file "/etc/inittab" contains the configuration which defines how the
|
|
||||||
# system will be initialized. Check the following URL for more details:
|
|
||||||
# http://git.busybox.net/busybox/tree/examples/inittab
|
|
||||||
cat > inittab << EOF
|
|
||||||
::sysinit:/etc/bootscript.sh
|
|
||||||
::restart:/sbin/init
|
|
||||||
::ctrlaltdel:/sbin/reboot
|
|
||||||
::once:cat /etc/welcome.txt
|
|
||||||
::respawn:/bin/cttyhack /bin/sh
|
|
||||||
tty2::once:cat /etc/welcome.txt
|
|
||||||
tty2::respawn:/bin/sh
|
|
||||||
tty3::once:cat /etc/welcome.txt
|
|
||||||
tty3::respawn:/bin/sh
|
|
||||||
tty4::once:cat /etc/welcome.txt
|
|
||||||
tty4::respawn:/bin/sh
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
# The "/init" script passes the execution to "/sbin/init" which in turn looks
|
|
||||||
# for the configuration file "/etc/inittab".
|
|
||||||
cat > init << EOF
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
exec /sbin/init
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x init
|
|
||||||
|
|
||||||
# Copy all source files to "/src". Note that the scripts won't work there.
|
|
||||||
cp ../../*.sh src
|
|
||||||
cp ../../.config src
|
|
||||||
chmod +r src/*.sh
|
|
||||||
chmod +r src/.config
|
|
||||||
|
|
||||||
cd ../..
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work
|
|
||||||
|
|
||||||
# Remove the old initramfs archive if it exists.
|
|
||||||
rm -f rootfs.cpio.gz
|
|
||||||
|
|
||||||
cd rootfs
|
|
||||||
|
|
||||||
# Packs the current folder structure in "cpio.gz" archive.
|
|
||||||
find . | cpio -R root:root -H newc -o | gzip > ../rootfs.cpio.gz
|
|
||||||
|
|
||||||
cd ../..
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work/kernel
|
|
||||||
cd $(ls -d *)
|
|
||||||
WORK_KERNEL_DIR=$(pwd)
|
|
||||||
cd ../../..
|
|
||||||
|
|
||||||
rm -f minimal_linux_live.iso
|
|
||||||
rm -rf work/isoimage
|
|
||||||
|
|
||||||
# This is the root folder of the ISO image
|
|
||||||
mkdir work/isoimage
|
|
||||||
cd work/isoimage
|
|
||||||
|
|
||||||
# Search and copy the files 'isolinux.bin' and 'ldlinux.c32'
|
|
||||||
for i in lib lib64 share end ; do
|
|
||||||
if [ -f /usr/$i/syslinux/isolinux.bin ]; then
|
|
||||||
cp /usr/$i/syslinux/isolinux.bin .
|
|
||||||
if [ -f /usr/$i/syslinux/ldlinux.c32 ]; then
|
|
||||||
cp /usr/$i/syslinux/ldlinux.c32 .
|
|
||||||
fi;
|
|
||||||
break;
|
|
||||||
fi;
|
|
||||||
if [ $i = end ]; then exit 1; fi;
|
|
||||||
done
|
|
||||||
|
|
||||||
# Now we copy the kernel
|
|
||||||
cp $WORK_KERNEL_DIR/arch/x86/boot/bzImage ./kernel.bz
|
|
||||||
|
|
||||||
# Now we copy the root file system
|
|
||||||
cp ../rootfs.cpio.gz ./rootfs.gz
|
|
||||||
|
|
||||||
# Copy all source files to "/src". Note that the scripts won't work there.
|
|
||||||
mkdir src
|
|
||||||
cp ../../*.sh src
|
|
||||||
cp ../../.config src
|
|
||||||
chmod +rx src/*.sh
|
|
||||||
chmod +r src/.config
|
|
||||||
|
|
||||||
# Create ISOLINUX configuration file
|
|
||||||
echo 'default kernel.bz initrd=rootfs.gz' > ./isolinux.cfg
|
|
||||||
|
|
||||||
# Now we generate the ISO image file
|
|
||||||
genisoimage -J -r -o ../minimal_linux_live.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./
|
|
||||||
|
|
||||||
# This allows the ISO image to be bootable if it is burned on USB flash drive
|
|
||||||
isohybrid ../minimal_linux_live.iso 2>/dev/null || true
|
|
||||||
|
|
||||||
# Copy the ISO image to the root project folder
|
|
||||||
cp ../minimal_linux_live.iso ../../
|
|
||||||
|
|
||||||
cd ../..
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
sh 00_prepare.sh
|
|
||||||
sh 01_get_kernel.sh
|
|
||||||
sh 02_build_kernel.sh
|
|
||||||
sh 03_get_musl.sh
|
|
||||||
sh 04_build_musl.sh
|
|
||||||
sh 05_prepare_musl.sh
|
|
||||||
sh 06_get_busybox.sh
|
|
||||||
sh 07_build_busybox.sh
|
|
||||||
sh 08_generate_rootfs.sh
|
|
||||||
sh 09_pack_rootfs.sh
|
|
||||||
sh 10_generate_iso.sh
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
qemu-system-i386 -cdrom minimal_linux_live.iso
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
qemu-system-x86_64 -cdrom minimal_linux_live.iso
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
|||||||
# You can find the latest Linux kernel source bundles here:
|
|
||||||
#
|
|
||||||
# http://kernel.org
|
|
||||||
#
|
|
||||||
KERNEL_SOURCE_URL=https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.1.6.tar.xz
|
|
||||||
|
|
||||||
# You can find the latest Musl source bundles here:
|
|
||||||
#
|
|
||||||
# http://musl-libc.org
|
|
||||||
#
|
|
||||||
MUSL_SOURCE_URL=http://musl-libc.org/releases/musl-1.1.11.tar.gz
|
|
||||||
|
|
||||||
# You can find the latest ToyBox source bundles here:
|
|
||||||
#
|
|
||||||
# http://landley.net/toybox
|
|
||||||
#
|
|
||||||
TOYBOX_SOURCE_URL=http://landley.net/toybox/downloads/toybox-0.6.0.tar.gz
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
rm -rf work
|
|
||||||
mkdir work
|
|
||||||
|
|
||||||
# -p stops errors if the directory already exists.
|
|
||||||
mkdir -p source
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Grab everything after the '=' character.
|
|
||||||
DOWNLOAD_URL=$(grep -i KERNEL_SOURCE_URL .config | cut -f2 -d'=')
|
|
||||||
|
|
||||||
# Grab everything after the last '/' character.
|
|
||||||
ARCHIVE_FILE=${DOWNLOAD_URL##*/}
|
|
||||||
|
|
||||||
cd source
|
|
||||||
|
|
||||||
# Downloading kernel file.
|
|
||||||
# -c option allows the download to resume.
|
|
||||||
wget -c $DOWNLOAD_URL
|
|
||||||
|
|
||||||
# Delete folder with previously extracted kernel.
|
|
||||||
rm -rf ../work/kernel
|
|
||||||
mkdir ../work/kernel
|
|
||||||
|
|
||||||
# Extract kernel to folder 'work/kernel'.
|
|
||||||
# Full path will be something like 'work/kernel/linux-4.1.6'.
|
|
||||||
tar -xvf $ARCHIVE_FILE -C ../work/kernel
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work/kernel
|
|
||||||
|
|
||||||
# Change to the first directory ls finds, e.g. 'linux-3.18.6'.
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
# Cleans up the kernel sources, including configuration files.
|
|
||||||
make mrproper
|
|
||||||
|
|
||||||
# Create a default configuration file for the kernel.
|
|
||||||
make defconfig
|
|
||||||
|
|
||||||
# Changes the name of the system.
|
|
||||||
sed -i "s/.*CONFIG_DEFAULT_HOSTNAME.*/CONFIG_DEFAULT_HOSTNAME=\"minimal\"/" .config
|
|
||||||
|
|
||||||
# Compile the kernel with optimization for "parallel jobs" = "number of processors".
|
|
||||||
# Good explanation of the different kernels:
|
|
||||||
# http://unix.stackexchange.com/questions/5518/what-is-the-difference-between-the-following-kernel-makefile-terms-vmlinux-vmlinux
|
|
||||||
make bzImage -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
cd ../../..
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Grab everything after the '=' character
|
|
||||||
DOWNLOAD_URL=$(grep -i MUSL_SOURCE_URL .config | cut -f2 -d'=')
|
|
||||||
|
|
||||||
# Grab everything after the last '/' character
|
|
||||||
ARCHIVE_FILE=${DOWNLOAD_URL##*/}
|
|
||||||
|
|
||||||
cd source
|
|
||||||
|
|
||||||
# Downloading musl file
|
|
||||||
# -c option allows the download to resume
|
|
||||||
wget -c $DOWNLOAD_URL
|
|
||||||
|
|
||||||
# Delete folder with previously extracted musl
|
|
||||||
rm -rf ../work/musl
|
|
||||||
mkdir ../work/musl
|
|
||||||
|
|
||||||
# Extract musl to folder 'work/musl'
|
|
||||||
# Full path will be something like 'work/musl/musl-1.1.11'
|
|
||||||
tar -xvf $ARCHIVE_FILE -C ../work/musl
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work/musl
|
|
||||||
|
|
||||||
# Change to the first directory ls finds, e.g. 'musl-1.1.11'
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
make distclean
|
|
||||||
|
|
||||||
mkdir musl-installed
|
|
||||||
./configure --prefix=$(pwd)/musl-installed
|
|
||||||
|
|
||||||
make -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
make install -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
cd ../../..
|
|
||||||
|
|
@ -1,65 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work/kernel
|
|
||||||
cd $(ls -d *)
|
|
||||||
WORK_KERNEL_DIR=$(pwd)
|
|
||||||
cd ../../..
|
|
||||||
|
|
||||||
cd work/musl
|
|
||||||
|
|
||||||
# Change to the first directory ls finds, e.g. 'musl-1.1.11'
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
cd musl-installed/bin
|
|
||||||
|
|
||||||
unlink musl-cc
|
|
||||||
ln -s musl-gcc musl-cc
|
|
||||||
|
|
||||||
unlink musl-ar
|
|
||||||
ln -s `which ar` musl-ar
|
|
||||||
|
|
||||||
unlink musl-strip
|
|
||||||
ln -s `which strip` musl-strip
|
|
||||||
|
|
||||||
cd ../include
|
|
||||||
|
|
||||||
#
|
|
||||||
# Should work with headers from the newly downloaded kernel
|
|
||||||
# but it diesn't work. Damn!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
#
|
|
||||||
#unlink linux
|
|
||||||
#ln -s $WORK_KERNEL_DIR/include/linux linux
|
|
||||||
#
|
|
||||||
#unlink mtd
|
|
||||||
#ln -s $WORK_KERNEL_DIR/include/linux/mtd mtd
|
|
||||||
#
|
|
||||||
#unlink asm
|
|
||||||
#ln -s $WORK_KERNEL_DIR/include/uapi/asm-generic asm
|
|
||||||
#
|
|
||||||
#unlink asm-generic
|
|
||||||
#ln -s $WORK_KERNEL_DIR/include/uapi/asm-generic asm-generic
|
|
||||||
#
|
|
||||||
#unlink uapi
|
|
||||||
#ln -s $WORK_KERNEL_DIR/include/uapi uapi
|
|
||||||
#
|
|
||||||
#unlink uapi
|
|
||||||
#ln -s $WORK_KERNEL_DIR/include/uapi uapi
|
|
||||||
|
|
||||||
unlink linux
|
|
||||||
ln -s /usr/include/linux linux
|
|
||||||
|
|
||||||
unlink mtd
|
|
||||||
ln -s /usr/include/mtd mtd
|
|
||||||
|
|
||||||
if [ -d /usr/include/asm ]
|
|
||||||
then
|
|
||||||
unlink asm
|
|
||||||
ln -s /usr/include/asm asm
|
|
||||||
else
|
|
||||||
unlink asm
|
|
||||||
ln -s /usr/include/asm-generic asm
|
|
||||||
fi
|
|
||||||
|
|
||||||
unlink asm-generic
|
|
||||||
ln -s /usr/include/asm-generic asm-generic
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Grab everything after the '=' character.
|
|
||||||
DOWNLOAD_URL=$(grep -i TOYBOX_SOURCE_URL .config | cut -f2 -d'=')
|
|
||||||
|
|
||||||
# Grab everything after the last '/' character.
|
|
||||||
ARCHIVE_FILE=${DOWNLOAD_URL##*/}
|
|
||||||
|
|
||||||
cd source
|
|
||||||
|
|
||||||
# Downloading ToyBox source.
|
|
||||||
# -c option allows the download to resume.
|
|
||||||
wget -c $DOWNLOAD_URL
|
|
||||||
|
|
||||||
# Delete folder with previously extracted ToyBox.
|
|
||||||
rm -rf ../work/toybox
|
|
||||||
mkdir ../work/toybox
|
|
||||||
|
|
||||||
# Extract toybox to folder 'toybox'.
|
|
||||||
# Full path will be something like 'work/toybox/toybox-0.6.0'.
|
|
||||||
tar -xvf $ARCHIVE_FILE -C ../work/toybox
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work/musl
|
|
||||||
cd $(ls -d *)
|
|
||||||
cd musl-installed
|
|
||||||
cd bin
|
|
||||||
MUSL_BIN_DIR=$(pwd)
|
|
||||||
cd ../../../../..
|
|
||||||
cd work/toybox
|
|
||||||
|
|
||||||
# Change to the first directory ls finds, e.g. 'toybox-0.6.0'
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
PATH_BACKUP=$PATH
|
|
||||||
PATH=$MUSL_BIN_DIR:$PATH
|
|
||||||
|
|
||||||
# Remove previously generated artefacts.
|
|
||||||
make distclean
|
|
||||||
|
|
||||||
# Create a configuration file with all possible selections.
|
|
||||||
#make allyesconfig
|
|
||||||
make defconfig
|
|
||||||
|
|
||||||
sed -i "s/.*CONFIG_DHCP.is.*/CONFIG_DHCP=y/" .config
|
|
||||||
|
|
||||||
# Static linking and cross compiling.
|
|
||||||
export CFLAGS="-std=c99"
|
|
||||||
export LDFLAGS="--static"
|
|
||||||
export CROSS_COMPILE="musl-"
|
|
||||||
|
|
||||||
# Compile ToyBox with optimization for "parallel jobs" = "number of processors".
|
|
||||||
make toybox -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
# We no longer need flags for static linking and cross compiling.
|
|
||||||
unset CFLAGS
|
|
||||||
unset LDFLAGS
|
|
||||||
unset CROSS_COMPILE
|
|
||||||
|
|
||||||
rm -rf rootfs
|
|
||||||
mkdir rootfs
|
|
||||||
|
|
||||||
# Directory where ToyBox binary and symlink will be instaled.
|
|
||||||
export PREFIX=rootfs
|
|
||||||
|
|
||||||
# Create the symlinks for toybox in single folder.
|
|
||||||
make install_flat
|
|
||||||
|
|
||||||
# We no longer need this environment variable.
|
|
||||||
unset PREFIX
|
|
||||||
|
|
||||||
PATH=$PATH_BACKUP
|
|
||||||
|
|
||||||
cd ../../..
|
|
||||||
|
|
@ -1,70 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work
|
|
||||||
|
|
||||||
rm -rf rootfs
|
|
||||||
mkdir rootfs
|
|
||||||
|
|
||||||
cd toybox
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
# Copy all toybox generated stuff to the location of our "initramfs/bin" folder.
|
|
||||||
cp -R rootfs ../../rootfs/bin
|
|
||||||
cd ../../rootfs
|
|
||||||
|
|
||||||
# Create root FS folders
|
|
||||||
mkdir dev
|
|
||||||
mkdir etc
|
|
||||||
mkdir proc
|
|
||||||
mkdir root
|
|
||||||
mkdir src
|
|
||||||
mkdir sys
|
|
||||||
mkdir tmp
|
|
||||||
|
|
||||||
# "1" means that only the owner of a file/directory (or root) can remove it.
|
|
||||||
chmod 1777 tmp
|
|
||||||
|
|
||||||
cd etc
|
|
||||||
|
|
||||||
# The file "/etc/welcome.txt" is displayed on every boot.
|
|
||||||
cat > welcome.txt << EOF
|
|
||||||
|
|
||||||
#####################################
|
|
||||||
# #
|
|
||||||
# Welcome to "Minimal Linux Live" #
|
|
||||||
# #
|
|
||||||
#####################################
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
# For now we have simple console.
|
|
||||||
cat > init << EOF
|
|
||||||
#!/bin/sh
|
|
||||||
dmesg -n 1
|
|
||||||
|
|
||||||
mount -t devtmpfs none /dev
|
|
||||||
mount -t proc none /proc
|
|
||||||
mount -t sysfs none /sys
|
|
||||||
|
|
||||||
ifconfig eth0 up
|
|
||||||
dhcp -i eth0
|
|
||||||
|
|
||||||
cat /etc/welcome.txt
|
|
||||||
|
|
||||||
sh
|
|
||||||
|
|
||||||
poweroff
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +rx init
|
|
||||||
|
|
||||||
# Copy all source files to "/src". Note that the scripts won't work there.
|
|
||||||
cp ../../*.sh src
|
|
||||||
cp ../../.config src
|
|
||||||
chmod +r src/*.sh
|
|
||||||
chmod +r src/.config
|
|
||||||
|
|
||||||
cd ../..
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd work
|
|
||||||
|
|
||||||
# Remove the old initramfs archive if it exists.
|
|
||||||
rm -f rootfs.cpio.gz
|
|
||||||
|
|
||||||
cd rootfs
|
|
||||||
|
|
||||||
# Packs the current folder structure in "cpio.gz" archive.
|
|
||||||
find . | cpio -H newc -o | gzip > ../rootfs.cpio.gz
|
|
||||||
|
|
||||||
cd ../..
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
rm -f minimal_linux_live.iso
|
|
||||||
|
|
||||||
cd work/kernel
|
|
||||||
cd $(ls -d *)
|
|
||||||
|
|
||||||
# Edit Makefile to look for genisoimage instead of mkisofs. This was added as a
|
|
||||||
# workaround for some "Debian" and "Arch Linux" distributions. In general this
|
|
||||||
# fix should be harmless.
|
|
||||||
sed -i 's/mkisofs/genisoimage/g' arch/x86/boot/Makefile
|
|
||||||
|
|
||||||
# Generate the ISO image with optimization for "parallel jobs" = "number of processors"
|
|
||||||
make isoimage FDINITRD=../../rootfs.cpio.gz -j $(grep ^processor /proc/cpuinfo | wc -l)
|
|
||||||
|
|
||||||
cp arch/x86/boot/image.iso ../../../minimal_linux_live.iso
|
|
||||||
|
|
||||||
cd ../../..
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
sh 0_prepare.sh
|
|
||||||
sh 1_get_kernel.sh
|
|
||||||
sh 2_build_kernel.sh
|
|
||||||
sh 3_get_toybox.sh
|
|
||||||
sh 4_build_toybox.sh
|
|
||||||
sh 5_generate_rootfs.sh
|
|
||||||
sh 6_pack_rootfs.sh
|
|
||||||
sh 7_generate_iso.sh
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
qemu-system-i386 -cdrom minimal_linux_live.iso
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
qemu-system-x86_64 -cdrom minimal_linux_live.iso
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
qemu-system-i386 -cdrom minimal_linux_live.iso
|
qemu-system-i386 -m 64M -cdrom minimal_linux_live.iso
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
qemu-system-x86_64 -cdrom minimal_linux_live.iso
|
qemu-system-x86_64 -m 64M -cdrom minimal_linux_live.iso
|
||||||
|
|
||||||
|
121
www/index.html
121
www/index.html
@ -23,7 +23,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function logSwap(itemIndex, show) {
|
function logSwap(itemIndex, show) {
|
||||||
for(var i = 1; i <= 4; i++) {
|
for(var i = 1; i <= 5; i++) {
|
||||||
var showObj = document.getElementById("show" + i);
|
var showObj = document.getElementById("show" + i);
|
||||||
var hideObj = document.getElementById("hide" + i);
|
var hideObj = document.getElementById("hide" + i);
|
||||||
var textObj = document.getElementById("text" + i);
|
var textObj = document.getElementById("text" + i);
|
||||||
@ -72,9 +72,11 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="twelve columns">
|
<div class="twelve columns">
|
||||||
<strong>Minimal Linux Live</strong> is a set of Linux shell scripts which automatically build minimal Live
|
<strong>Minimal Linux Live</strong> is a set of Linux shell scripts which automatically build minimalistic Live
|
||||||
Linux OS based on <a target="_blank" href="http://kernel.org">Linux kernel</a>
|
Linux OS with basic network support via DHCP. The generated operating system is based on
|
||||||
and <a target="_blank" href="http://busybox.net">BusyBox</a>. All necessary source codes are automatically
|
<a target="_blank" href="http://kernel.org">Linux kernel</a>,
|
||||||
|
<a target="_blank" href="http://gnu.org/software/libc">GNU C library</a> and
|
||||||
|
<a target="_blank" href="http://busybox.net">BusyBox</a>. All necessary source codes are automatically
|
||||||
downloaded and all build operations are fully encapsulated in the scripts.
|
downloaded and all build operations are fully encapsulated in the scripts.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -91,7 +93,8 @@
|
|||||||
Get the latest scripts from the <a href="#" onclick="javascript:menuSwap(5); return false;">download</a> section.
|
Get the latest scripts from the <a href="#" onclick="javascript:menuSwap(5); return false;">download</a> section.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Extract the scripts to some folder.
|
Extract the scripts to some folder. Note that even though the scripts are small in size, you need ~2GB free disk space for the
|
||||||
|
actual build process.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Just for convenience, make sure that all scripts are executable (<code>chmod +x *.sh</code>). If you decide to skip this step you
|
Just for convenience, make sure that all scripts are executable (<code>chmod +x *.sh</code>). If you decide to skip this step you
|
||||||
@ -140,59 +143,82 @@
|
|||||||
you have researched your problem in advance before you send me your question.
|
you have researched your problem in advance before you send me your question.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
When the scripts finish their job you will find newly created <code>minimal_linux_live.iso</code> in the same folder where you
|
When the scripts finish their job you will find newly generated <code>minimal_linux_live.iso</code> in the same folder where you
|
||||||
executed the scripts. You can burn the ISO image file on CD/DVD, install it on USB flash drive via
|
executed the scripts. You can burn the ISO image file on CD/DVD, install it on USB flash drive via
|
||||||
<a target="_blank" href="http://www.pendrivelinux.com">Universal USB Installer</a>,
|
<a target="_blank" href="http://www.pendrivelinux.com">Universal USB Installer</a>,
|
||||||
or run it directly via PC emulator like <a target="_blank" href="http://virtualbox.org">VirtualBox</a>.
|
or run it directly via PC emulator like <a target="_blank" href="http://virtualbox.org">VirtualBox</a>. Minimal Linux Live
|
||||||
|
requires at least 64MB RAM, otherwise the boot process most probably will hang.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="twelve columns">
|
<div class="twelve columns">
|
||||||
The produced ISO image file contains Linux kernel compiled with default options, BusyBox compiled with default options and very simple
|
The generated ISO image file contains Linux kernel compiled with default options, GNU C library compiled with default options,
|
||||||
initramfs. This means that you don't get Windows support out of the box, nor you get any fancy desktop environment. All you
|
BusyBox compiled with default options and quite simple initramfs. This means that you don't get Windows support out of the box,
|
||||||
get is a simple shell console which supports all BusyBox applets and... well, that's all. This is why it's called "minimal".
|
nor you get any fancy desktop environment. All you get is a simple shell console which supports all BusyBox applets and... well,
|
||||||
|
that's all. This is why it's called "minimal".
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="font-size: 10%;"> </div>
|
<div style="font-size: 10%;"> </div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="twelve columns">
|
<div class="twelve columns">
|
||||||
The good news is that even though the OS is small and simple, the build scripts are also very small and very simple. You can
|
The good news is that the build scripts are very small in size and simple to understand. You can easily learn from the scripts
|
||||||
quite easily learn from the scripts and later modify them to include more stuff (I encourage you to do so). After you learn
|
and later modify them to include more stuff (I encourage you to do so). After you learn the basics you will have all the necessary
|
||||||
the basics you will have all the necessary tools and skills to create your own fully functional Linux based operating system!
|
tools and skills to create your own fully functional Linux based operating system. Entirely from scratch!
|
||||||
Entirely from scratch! Isn't it great?! :)
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="font-size: 10%;"> </div>
|
<div style="font-size: 10%;"> </div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="twelve columns">
|
<div class="twelve columns">
|
||||||
The <a href="#" onclick="javascript:menuSwap(4); return false;">tutorial</a> provides more details about the inner structure
|
The <a href="#" onclick="javascript:menuSwap(4); return false;">tutorial</a> provides more details about the inner structure
|
||||||
of the scripts and the overall build process. I encourage you to go through this document when you have the time.
|
of the scripts and the overall build process. I encourage you to go through this document when you have the time. The same tutorial
|
||||||
|
document is automatically included in the generated ISO image, so you can always refer to it.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="font-size: 10%;"> </div>
|
<div style="font-size: 10%;"> </div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="twelve columns">
|
<div class="twelve columns">
|
||||||
Below you can find several screenshots which show what the environment looks like when you boot your newly generated
|
Below you can find several screenshots which show what the environment looks like when you boot your newly generated
|
||||||
Minimal Linux Live OS.
|
Minimal Linux Live OS.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="font-size: 10%;"> </div>
|
<div style="font-size: 10%;"> </div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="four columns">
|
<div class="six columns">
|
||||||
<a href="./images/screen1.png" target="_blank" title="Minimal Linux Live - screenshot 1">
|
<a href="./images/screen1.png" target="_blank" title="Minimal Linux Live - screenshot 1">
|
||||||
<img alt="Minimal Linux Live" id="screenshot1" width="100%" height="100%" border="0" src="./images/screen1.png" />
|
<img alt="Minimal Linux Live" id="screenshot1" width="100%" height="100%" border="0" src="./images/screen1.png" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="four columns">
|
<div class="six columns">
|
||||||
<a href="./images/screen2.png" target="_blank" title="Minimal Linux Live - screenshot 2">
|
<a href="./images/screen2.png" target="_blank" title="Minimal Linux Live - screenshot 2">
|
||||||
<img alt="Minimal Linux Live" id="screenshot1" width="100%" height="100%" border="0" src="./images/screen2.png" />
|
<img alt="Minimal Linux Live" id="screenshot2" width="100%" height="100%" border="0" src="./images/screen2.png" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="four columns">
|
</div class="row">
|
||||||
|
<div style="font-size: 10%;"> </div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="six columns">
|
||||||
<a href="./images/screen3.png" target="_blank" title="Minimal Linux Live - screenshot 3">
|
<a href="./images/screen3.png" target="_blank" title="Minimal Linux Live - screenshot 3">
|
||||||
<img alt="Minimal Linux Live" id="screenshot1" width="100%" height="100%" border="0" src="./images/screen3.png" />
|
<img alt="Minimal Linux Live" id="screenshot3" width="100%" height="100%" border="0" src="./images/screen3.png" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="six columns">
|
||||||
|
<a href="./images/screen4.png" target="_blank" title="Minimal Linux Live - screenshot 4">
|
||||||
|
<img alt="Minimal Linux Live" id="screenshot4" width="100%" height="100%" border="0" src="./images/screen4.png" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div class="row">
|
||||||
|
<div style="font-size: 10%;"> </div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="six columns">
|
||||||
|
<a href="./images/screen5.png" target="_blank" title="Minimal Linux Live - screenshot 5">
|
||||||
|
<img alt="Minimal Linux Live" id="screenshot5" width="100%" height="100%" border="0" src="./images/screen5.png" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="six columns">
|
||||||
|
<a href="./images/screen6.png" target="_blank" title="Minimal Linux Live - screenshot 6">
|
||||||
|
<img alt="Minimal Linux Live" id="screenshot6" width="100%" height="100%" border="0" src="./images/screen6.png" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -205,15 +231,52 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="twelve columns">
|
<div class="twelve columns">
|
||||||
<div id="show4" style="display:none;">
|
<div id="show5" style="display:none;">
|
||||||
|
<strong>03-Apr-2016</strong>
|
||||||
|
<a href="#" onclick="javascript:logSwap(5, true); return false;">show</a>
|
||||||
|
</div>
|
||||||
|
<div id="hide5" style="display:block;">
|
||||||
|
<strong>03-Apr-2016</strong>
|
||||||
|
<a href="#" onclick="javascript:logSwap(5, false); return false;">hide</a>
|
||||||
|
</div>
|
||||||
|
<div id="text5" style="display:block;">
|
||||||
|
<ul>
|
||||||
|
<div style="font-size: 10%;"> </div>
|
||||||
|
<li>
|
||||||
|
<strong>Minimal Linux Live</strong> is now based on <strong>Linux kernel 4.4.6</strong>, <strong>GNU C library 2.23</strong>
|
||||||
|
and <strong>BusyBox 1.24.2</strong>. The generated ISO image file is ~4MB larger due to glibc overhead and requires more RAM
|
||||||
|
(64MB is enough).
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
The build architecture has been revised and now the only core dependency to the host OS is the actual C compiler along with
|
||||||
|
the related binary utils. Kernel headers and main C library (which used to be implicit dependencies) are now automatically
|
||||||
|
generated and used as part of the overall build process.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
The DNS resolving issue has been fixed and the network/internet related BusyBox applets (ping, wget, etc.) now work fine.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
The ISO image generation process is now in a separate script file, completely detached from the kernel build infrastructure.
|
||||||
|
This allows the Mnimal Linux Live users to modify the ISO image file/directory structure before the actual ISO generation.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
The internal script comments have been revised and now they are more descriptive than before.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
The experimental folder has been removed.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div style="font-size: 10%;"> </div>
|
||||||
|
<div id="show4" style="display:block;">
|
||||||
<strong>14-Sep-2015</strong>
|
<strong>14-Sep-2015</strong>
|
||||||
<a href="#" onclick="javascript:logSwap(4, true); return false;">show</a>
|
<a href="#" onclick="javascript:logSwap(4, true); return false;">show</a>
|
||||||
</div>
|
</div>
|
||||||
<div id="hide4" style="display:block;">
|
<div id="hide4" style="display:none;">
|
||||||
<strong>14-Sep-2015</strong>
|
<strong>14-Sep-2015</strong>
|
||||||
<a href="#" onclick="javascript:logSwap(4, false); return false;">hide</a>
|
<a href="#" onclick="javascript:logSwap(4, false); return false;">hide</a>
|
||||||
</div>
|
</div>
|
||||||
<div id="text4" style="display:block;">
|
<div id="text4" style="display:none;">
|
||||||
<ul>
|
<ul>
|
||||||
<div style="font-size: 10%;"> </div>
|
<div style="font-size: 10%;"> </div>
|
||||||
<li>
|
<li>
|
||||||
@ -381,17 +444,17 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="twelve columns">
|
<div class="twelve columns">
|
||||||
The latest stable scripts (14-Sep-2015) can be downloaded as ZIP archive
|
The latest stable scripts (03-Apr-2016) can be downloaded as ZIP archive
|
||||||
<a href="./download/minimal_linux_live_14-Sep-2015_src.zip" title="Minimal Linux Live - shell scripts">here</a>.
|
<a href="./download/minimal_linux_live_03-Apr-2016_src.zip" title="Minimal Linux Live - shell scripts">here</a>.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="font-size: 10%;"> </div>
|
<div style="font-size: 10%;"> </div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="twelve columns">
|
<div class="twelve columns">
|
||||||
Pre-built ISO image files generated with the latest stable scripts are available for
|
Pre-built ISO image files generated with the latest stable scripts are available for
|
||||||
<a href="./download/minimal_linux_live_14-Sep-2015_32-bit.iso" title="Minimal Linux Live - ISO image file for 32-bit CPUs">32-bit</a>
|
<a href="./download/minimal_linux_live_03-Apr-2016_32-bit.iso" title="Minimal Linux Live - ISO image file for 32-bit CPUs">32-bit</a>
|
||||||
and
|
and
|
||||||
<a href="./download/minimal_linux_live_14-Sep-2015_64-bit.iso" title="Minimal Linux Live - ISO image file for 64-bit CPUs">64-bit</a>
|
<a href="./download/minimal_linux_live_03-Apr-2016_64-bit.iso" title="Minimal Linux Live - ISO image file for 64-bit CPUs">64-bit</a>
|
||||||
CPUs.
|
CPUs.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -419,7 +482,7 @@
|
|||||||
<div style="font-size: 10%;"> </div>
|
<div style="font-size: 10%;"> </div>
|
||||||
<div class="row" style="text-align: center;">
|
<div class="row" style="text-align: center;">
|
||||||
<div class="twelve columns">
|
<div class="twelve columns">
|
||||||
Copyright © 2014 - 2015
|
Copyright © 2014 - 2016
|
||||||
<span class="separator">|</span>
|
<span class="separator">|</span>
|
||||||
<a href="/" title="Minimal Linux Live">Minimal Linux Live</a>
|
<a href="/" title="Minimal Linux Live">Minimal Linux Live</a>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user