Merge pull request #74 from bauen1/misc-changes

Misc changes Fixes #71 (major changes in both MLL and overlay structures).
This commit is contained in:
Ivan Davidov 2017-07-06 22:22:11 +03:00 committed by GitHub
commit b31f292d67
25 changed files with 277 additions and 344 deletions

View File

@ -1,53 +0,0 @@
#!/bin/sh
echo "*** PREPARE GLIBC BEGIN ***"
SRC_DIR=$(pwd)
# Save the kernel installation directory.
KERNEL_INSTALLED=$(pwd)/work/kernel/kernel_installed
cd work/glibc
echo "Preparing glibc. This may take a while..."
rm -rf glibc_prepared
cp -r glibc_installed glibc_prepared
cd glibc_prepared
# Create custom 'usr' area and link it with some of the kernel header directories.
# BusyBox compilation process uses these linked directories. The following
# directories are affected:
#
# usr (glibc)
# |
# +--include (glibc)
# | |
# | +--asm (kernel)
# | |
# | +--asm-generic (kernel)
# | |
# | +--linux (kernel)
# | |
# | +--mtd (kernel)
# |
# +--lib (glibc)
mkdir -p usr
cd usr
ln -s ../include include
ln -s ../lib lib
cd ../include
ln -s $KERNEL_INSTALLED/include/linux linux
ln -s $KERNEL_INSTALLED/include/asm asm
ln -s $KERNEL_INSTALLED/include/asm-generic asm-generic
ln -s $KERNEL_INSTALLED/include/mtd mtd
cd $SRC_DIR
echo "*** PREPARE GLIBC END ***"

61
src/05_prepare_sysroot.sh Executable file
View File

@ -0,0 +1,61 @@
#!/bin/sh
echo "*** PREPARE SYSROOT BEGIN ***"
SRC_DIR=$(pwd)
cd work
echo "Cleaning existing sysroot. This may take a while..."
rm -rf sysroot
rm -rf sysroot.specs
echo "Preparing glibc. This may take a while..."
cp -r glibc/glibc_installed sysroot
cd sysroot
# Create custom 'usr' area and link it with some of the kernel header directories.
# BusyBox compilation process uses these linked directories. The following
# directories are affected:
#
# usr (glibc)
# |
# +--include (glibc)
# | |
# | +--asm (kernel)
# | |
# | +--asm-generic (kernel)
# | |
# | +--linux (kernel)
# | |
# | +--mtd (kernel)
# |
# +--lib (glibc)
mkdir -p usr
ln -s ../include usr/include
ln -s ../lib usr/lib
ln -s ../../kernel/kernel_installed/include/linux include/linux
ln -s ../../kernel/kernel_installed/include/asm include/asm
ln -s ../../kernel/kernel_installed/include/asm-generic include/asm-generic
ln -s ../../kernel/kernel_installed/include/mtd include/mtd
cd ..
echo "generating sysroot.specs"
SYSROOT="$PWD/sysroot"
# gcc has a "internal" path that needs to be added to find the static versions of libgcc_*
GCC_INTERNAL_PATH=$(dirname $(gcc -print-libgcc-file-name))
cat << CEOF > sysroot.specs
*link_libgcc:
-L$SYSROOT/lib -L$SYSROOT/lib64 -L$SYSROOT/usr/lib -L$SYSROOT/usr/lib64 -L$SYSROOT/usr/local/lib -L$SYSROOT/usr/local/lib64 -L$GCC_INTERNAL_PATH
CEOF
cd $SRC_DIR
echo "*** PREPARE SYSROOT END ***"

View File

@ -13,8 +13,8 @@ NUM_CORES=$(grep ^processor /proc/cpuinfo | wc -l)
# Calculate the number of 'make' jobs to be used later. # Calculate the number of 'make' jobs to be used later.
NUM_JOBS=$((NUM_CORES * JOB_FACTOR)) NUM_JOBS=$((NUM_CORES * JOB_FACTOR))
# Remember the glibc installation area. # Remember the sysroot
GLIBC_PREPARED=$(pwd)/work/glibc/glibc_prepared SYSROOT=$(pwd)/work/sysroot
cd work/busybox cd work/busybox
@ -53,10 +53,10 @@ fi
# This variable holds the full path to the glibc installation area as quoted string. # This variable holds the full path to the glibc installation area as quoted string.
# All back slashes are escaped (/ => \/) in order to keep the 'sed' command stable. # All back slashes are escaped (/ => \/) in order to keep the 'sed' command stable.
GLIBC_PREPARED_ESCAPED=$(echo \"$GLIBC_PREPARED\" | sed 's/\//\\\//g') SYSROOT_ESCAPED=$(echo \"$SYSROOT\" | sed 's/\//\\\//g')
# Now we tell BusyBox to use the glibc prepared area. # Now we tell BusyBox to use the glibc prepared area.
sed -i "s/.*CONFIG_SYSROOT.*/CONFIG_SYSROOT=$GLIBC_PREPARED_ESCAPED/" .config sed -i "s/.*CONFIG_SYSROOT.*/CONFIG_SYSROOT=$SYSROOT_ESCAPED/" .config
# Read the 'CFLAGS' property from '.config' # Read the 'CFLAGS' property from '.config'
CFLAGS="$(grep -i ^CFLAGS .config | cut -f2 -d'=')" CFLAGS="$(grep -i ^CFLAGS .config | cut -f2 -d'=')"

View File

@ -4,8 +4,8 @@ echo "*** GENERATE ROOTFS BEGIN ***"
SRC_ROOT=$(pwd) SRC_ROOT=$(pwd)
# Remember the glibc prepared folder. # Remember the sysroot
GLIBC_PREPARED=$(pwd)/work/glibc/glibc_prepared SYSROOT=$(pwd)/work/sysroot
# Remember the BysyBox install folder. # Remember the BysyBox install folder.
BUSYBOX_INSTALLED=$(pwd)/work/busybox/busybox_installed BUSYBOX_INSTALLED=$(pwd)/work/busybox/busybox_installed
@ -44,22 +44,22 @@ fi
BUSYBOX_ARCH=$(file bin/busybox | cut -d' ' -f3) BUSYBOX_ARCH=$(file bin/busybox | cut -d' ' -f3)
if [ "$BUSYBOX_ARCH" = "64-bit" ] ; then if [ "$BUSYBOX_ARCH" = "64-bit" ] ; then
mkdir lib64 mkdir lib64
cp $GLIBC_PREPARED/lib/ld-linux* lib64 cp $SYSROOT/lib/ld-linux* lib64
echo "Dynamic loader is accessed via '/lib64'." echo "Dynamic loader is accessed via '/lib64'."
else else
cp $GLIBC_PREPARED/lib/ld-linux* lib cp $SYSROOT/lib/ld-linux* lib
echo "Dynamic loader is accessed via '/lib'." echo "Dynamic loader is accessed via '/lib'."
fi fi
# Copy all necessary 'glibc' libraries to '/lib' BEGIN. # Copy all necessary 'glibc' libraries to '/lib' BEGIN.
# BusyBox has direct dependencies on these libraries. # BusyBox has direct dependencies on these libraries.
cp $GLIBC_PREPARED/lib/libm.so.6 lib cp $SYSROOT/lib/libm.so.6 lib
cp $GLIBC_PREPARED/lib/libc.so.6 lib cp $SYSROOT/lib/libc.so.6 lib
# These libraries are necessary for the DNS resolving. # These libraries are necessary for the DNS resolving.
cp $GLIBC_PREPARED/lib/libresolv.so.2 lib cp $SYSROOT/lib/libresolv.so.2 lib
cp $GLIBC_PREPARED/lib/libnss_dns.so.2 lib cp $SYSROOT/lib/libnss_dns.so.2 lib
# Copy all necessary 'glibc' libraries to '/lib' END. # Copy all necessary 'glibc' libraries to '/lib' END.

View File

@ -1,16 +1,6 @@
#!/bin/sh #!/bin/sh
time sh 00_clean.sh for script in $(ls | grep '^[0-9]*_.*.sh'); do
time sh 01_get_kernel.sh echo "$script"
time sh 02_build_kernel.sh time sh "$script"
time sh 03_get_glibc.sh done
time sh 04_build_glibc.sh
time sh 05_prepare_glibc.sh
time sh 06_get_busybox.sh
time sh 07_build_busybox.sh
time sh 08_prepare_src.sh
time sh 09_generate_rootfs.sh
time sh 10_pack_rootfs.sh
time sh 11_get_syslinux.sh
time sh 12_generate_iso.sh

View File

@ -2,10 +2,7 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
# Grab everything after the '=' character. # Grab everything after the '=' character.
#DOWNLOAD_URL=$(grep -i CLOUD_FOUNDRY_CLI_URL $MAIN_SRC_DIR/.config | cut -f2 -d'=') #DOWNLOAD_URL=$(grep -i CLOUD_FOUNDRY_CLI_URL $MAIN_SRC_DIR/.config | cut -f2 -d'=')
@ -32,11 +29,11 @@ fi
# Delete folder with previously prepared cloud foundry cli. # Delete folder with previously prepared cloud foundry cli.
echo "Removing cloud foundry cli work area. This may take a while..." echo "Removing cloud foundry cli work area. This may take a while..."
rm -rf ../../work/overlay/clofo rm -rf $WORK_DIR/overlay/clofo
mkdir ../../work/overlay/clofo mkdir $WORK_DIR/overlay/clofo
# Copy cf-cli.tgz to folder 'work/overlay/clofo'. # Copy cf-cli.tgz to folder 'work/overlay/clofo'.
cp cf-cli.tgz ../../work/overlay/clofo cp cf-cli.tgz $WORK_DIR/overlay/clofo
cd $SRC_DIR cd $SRC_DIR

View File

@ -2,17 +2,14 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
echo "Removing old cloud foundry artifacts. This may take a while..." echo "Removing old cloud foundry artifacts. This may take a while..."
rm -rf $MAIN_SRC_DIR/work/overlay/clofo/clofo_installed rm -rf $WORK_DIR/overlay/clofo/clofo_installed
mkdir -p $MAIN_SRC_DIR/work/overlay/clofo/clofo_installed/opt/clofo mkdir -p $WORK_DIR/overlay/clofo/clofo_installed/opt/clofo
mkdir -p $MAIN_SRC_DIR/work/overlay/clofo/clofo_installed/bin mkdir -p $WORK_DIR/overlay/clofo/clofo_installed/bin
cd $MAIN_SRC_DIR/work/overlay/clofo cd $WORK_DIR/overlay/clofo
cp $MAIN_SRC_DIR/source/overlay/cf-cli.tgz . cp $MAIN_SRC_DIR/source/overlay/cf-cli.tgz .
@ -20,14 +17,13 @@ tar -xvf cf-cli.tgz
rm -f LICENSE NOTICE cf-cli.tgz rm -f LICENSE NOTICE cf-cli.tgz
chmod +rx cf chmod +rx cf
cp cf $MAIN_SRC_DIR/work/overlay/clofo/clofo_installed/opt/clofo/cf cp cf $WORK_DIR/overlay/clofo/clofo_installed/opt/clofo/cf
cd $MAIN_SRC_DIR/work/overlay/clofo/clofo_installed cd $WORK_DIR/overlay/clofo/clofo_installed
ln -s ../opt/clofo/cf bin/cf ln -s ../opt/clofo/cf bin/cf
cp -r $MAIN_SRC_DIR/work/overlay/clofo/clofo_installed/* \ cp -r $WORK_DIR/overlay/clofo/clofo_installed/* $WORK_DIR/src/minimal_overlay/rootfs
$MAIN_SRC_DIR/work/src/minimal_overlay/rootfs
echo "cloud foundry cli has been installed." echo "cloud foundry cli has been installed."

View File

@ -2,10 +2,7 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
# Grab everything after the '=' character. # Grab everything after the '=' character.
DOWNLOAD_URL=$(grep -i DROPBEAR_SOURCE_URL $MAIN_SRC_DIR/.config | cut -f2 -d'=') DOWNLOAD_URL=$(grep -i DROPBEAR_SOURCE_URL $MAIN_SRC_DIR/.config | cut -f2 -d'=')
@ -33,12 +30,12 @@ fi
# Delete folder with previously extracted Dropbear. # Delete folder with previously extracted Dropbear.
echo "Removing Dropbear work area. This may take a while..." echo "Removing Dropbear work area. This may take a while..."
rm -rf ../../work/overlay/dropbear rm -rf $WORK_DIR/overlay/dropbear
mkdir ../../work/overlay/dropbear mkdir $WORK_DIR/overlay/dropbear
# Extract Dropbear to folder 'work/overlay/dropbear'. # Extract Dropbear to folder 'work/overlay/dropbear'.
# Full path will be something like 'work/overlay/dropbear/dropbear-2016.73'. # Full path will be something like 'work/overlay/dropbear/dropbear-2016.73'.
tar -xvf $ARCHIVE_FILE -C ../../work/overlay/dropbear tar -xvf $ARCHIVE_FILE -C $WORK_DIR/overlay/dropbear
cd $SRC_DIR cd $SRC_DIR

View File

@ -2,107 +2,83 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
# Read the 'JOB_FACTOR' property from '.config' cd $WORK_DIR/overlay/dropbear
JOB_FACTOR="$(grep -i ^JOB_FACTOR $MAIN_SRC_DIR/.config | cut -f2 -d'=')"
# Read the 'CFLAGS' property from '.config' DESTDIR="$PWD/dropbear_installed"
CFLAGS="$(grep -i ^CFLAGS $MAIN_SRC_DIR/.config | cut -f2 -d'=')"
# Find the number of available CPU cores.
NUM_CORES=$(grep ^processor /proc/cpuinfo | wc -l)
# Calculate the number of 'make' jobs to be used later.
NUM_JOBS=$((NUM_CORES * JOB_FACTOR))
if [ ! -d $MAIN_SRC_DIR/work/glibc/glibc_prepared ] ; then
echo "Cannot continue - Dropbear SSH depends on GLIBC. Please buld GLIBC first."
exit 1
fi
cd $MAIN_SRC_DIR/work/overlay/dropbear
# Change to the Dropbear source directory which ls finds, e.g. 'dropbear-2016.73'. # Change to the Dropbear source directory which ls finds, e.g. 'dropbear-2016.73'.
cd $(ls -d dropbear-*) cd $(ls -d dropbear-*)
echo "Preparing Dropbear work area. This may take a while..." echo "Preparing Dropbear work area. This may take a while..."
make clean -j $NUM_JOBS 2>/dev/null make -j $NUM_JOBS clean
rm -rf $DESTDIR
rm -rf ../dropbear_installed
echo "Configuring Dropbear..." echo "Configuring Dropbear..."
./configure \ ./configure \
--prefix=$MAIN_SRC_DIR/work/overlay/dropbear/dropbear_installed \ --prefix=/usr \
--disable-zlib \ --disable-zlib \
--disable-loginfunc \ --disable-loginfunc \
CFLAGS="$CFLAGS" CC="$CC" \
CFLAGS="$CFLAGS" \
LDFLAGS="$LDFLAGS"
echo "Building Dropbear..." echo "Building Dropbear..."
make -j $NUM_JOBS make -j $NUM_JOBS
echo "Installing Dropbear..." echo "Installing Dropbear..."
make install -j $NUM_JOBS make -j $NUM_JOBS install DESTDIR="$DESTDIR"
mkdir -p ../dropbear_installed/lib mkdir -p $DESTDIR/lib
# Copy all dependent GLIBC libraries. # Copy all dependent GLIBC libraries.
cp $MAIN_SRC_DIR/work/glibc/glibc_prepared/lib/libnsl.so.1 ../dropbear_installed/lib cp $SYSROOT/lib/libnsl.so.1 $DESTDIR/lib
cp $MAIN_SRC_DIR/work/glibc/glibc_prepared/lib/libnss_compat.so.2 ../dropbear_installed/lib cp $SYSROOT/lib/libnss_compat.so.2 $DESTDIR/lib
cp $MAIN_SRC_DIR/work/glibc/glibc_prepared/lib/libutil.so.1 ../dropbear_installed/lib cp $SYSROOT/lib/libutil.so.1 $DESTDIR/lib
cp $MAIN_SRC_DIR/work/glibc/glibc_prepared/lib/libcrypt.so.1 ../dropbear_installed/lib cp $SYSROOT/lib/libcrypt.so.1 $DESTDIR/lib
mkdir -p ../dropbear_installed/etc/dropbear mkdir -p $DESTDIR/etc/dropbear
# Create Dropbear SSH configuration BEGIN # Create Dropbear SSH configuration BEGIN
# Create RSA key. for key_type in rsa dss ecdsa; do
../dropbear_installed/bin/dropbearkey \ echo "generating $key_type host key"
-t rsa \ $DESTDIR/usr/bin/dropbearkey \
-f ../dropbear_installed/etc/dropbear/dropbear_rsa_host_key -t $key_type \
-f $DESTDIR/etc/dropbear/dropbear_${key_type}_host_key
# Create DSS key. done
../dropbear_installed/bin/dropbearkey \
-t dss \
-f ../dropbear_installed/etc/dropbear/dropbear_dss_host_key
# Create ECDSA key.
../dropbear_installed/bin/dropbearkey \
-t ecdsa \
-f ../dropbear_installed/etc/dropbear/dropbear_ecdsa_host_key
# Create user/group configuration files. # Create user/group configuration files.
touch ../dropbear_installed/etc/passwd touch $DESTDIR/etc/passwd
touch ../dropbear_installed/etc/group touch $DESTDIR/etc/group
# Add group 0 for root. # Add group 0 for root.
echo "root:x:0:" \ echo "root:x:0:" \
> ../dropbear_installed/etc/group > $DESTDIR/etc/group
# Add user root with password 'toor'. # Add user root with password 'toor'.
echo "root:AprZpdBUhZXss:0:0:Minimal Root,,,:/root:/bin/sh" \ echo "root:AprZpdBUhZXss:0:0:Minimal Root,,,:/root:/bin/sh" \
> ../dropbear_installed/etc/passwd > $DESTDIR/etc/passwd
# Create home folder for root user. # Create home folder for root user.
mkdir -p ../dropbear_installed/root mkdir -p $DESTDIR/root
# Create Dropbear SSH configuration END # Create Dropbear SSH configuration END
echo "Reducing Dropbear size..." echo "Reducing Dropbear size..."
strip -g \ strip -g \
../dropbear_installed/bin/* \ $DESTDIR/usr/bin/* \
../dropbear_installed/sbin/* \ $DESTDIR/usr/sbin/* \
../dropbear_installed/lib/* $DESTDIR/lib/*
cp -r \ ROOTFS=$WORK_DIR/src/minimal_overlay/rootfs
../dropbear_installed/etc \
../dropbear_installed/bin \ mkdir -p $ROOTFS/usr
../dropbear_installed/sbin \ cp -r $DESTDIR/etc $ROOTFS
../dropbear_installed/lib \ cp -r $DESTDIR/usr/bin $ROOTFS/usr
$MAIN_SRC_DIR/work/src/minimal_overlay/rootfs cp -r $DESTDIR/usr/sbin $ROOTFS/usr
cp -r $DESTDIR/lib $ROOTFS
echo "Dropbear has been installed." echo "Dropbear has been installed."

View File

@ -2,10 +2,7 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
# Grab everything after the '=' character. # Grab everything after the '=' character.
DOWNLOAD_URL=$(grep -i FELIX_SOURCE_URL $MAIN_SRC_DIR/.config | cut -f2 -d'=') DOWNLOAD_URL=$(grep -i FELIX_SOURCE_URL $MAIN_SRC_DIR/.config | cut -f2 -d'=')
@ -33,12 +30,12 @@ fi
# Delete folder with previously extracted Felix. # Delete folder with previously extracted Felix.
echo "Removing Apache Felix work area. This may take a while..." echo "Removing Apache Felix work area. This may take a while..."
rm -rf ../../work/overlay/felix rm -rf $WORK_DIR/overlay/felix
mkdir ../../work/overlay/felix mkdir $WORK_DIR/overlay/felix
# Extract Felix to folder 'work/overlay/felix'. # Extract Felix to folder 'work/overlay/felix'.
# Full path will be something like 'work/overlay/felix/felix-framework-5.4.0'. # Full path will be something like 'work/overlay/felix/felix-framework-5.4.0'.
tar -xvf $ARCHIVE_FILE -C ../../work/overlay/felix tar -xvf $ARCHIVE_FILE -C $WORK_DIR/overlay/felix
cd $SRC_DIR cd $SRC_DIR

View File

@ -2,17 +2,14 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
echo "Removing old Apache Felix artifacts. This may take a while..." echo "Removing old Apache Felix artifacts. This may take a while..."
rm -rf $MAIN_SRC_DIR/work/overlay/felix/felix_installed rm -rf $WORK_DIR/overlay/felix/felix_installed
mkdir -p $MAIN_SRC_DIR/work/overlay/felix/felix_installed/opt/felix mkdir -p $WORK_DIR/overlay/felix/felix_installed/opt/felix
mkdir -p $MAIN_SRC_DIR/work/overlay/felix/felix_installed/bin mkdir -p $WORK_DIR/overlay/felix/felix_installed/bin
cd $MAIN_SRC_DIR/work/overlay/felix cd $WORK_DIR/overlay/felix
cd $(ls -d felix-*) cd $(ls -d felix-*)
cat << CEOF > bin/felix-start.sh cat << CEOF > bin/felix-start.sh
@ -25,14 +22,14 @@ CEOF
chmod +rx bin/felix-start.sh chmod +rx bin/felix-start.sh
cp -r * $MAIN_SRC_DIR/work/overlay/felix/felix_installed/opt/felix cp -r * $WORK_DIR/overlay/felix/felix_installed/opt/felix
cd $MAIN_SRC_DIR/work/overlay/felix/felix_installed cd $WORK_DIR/overlay/felix/felix_installed
ln -s ../opt/felix/bin/felix-start.sh bin/felix-start ln -s ../opt/felix/bin/felix-start.sh bin/felix-start
cp -r $MAIN_SRC_DIR/work/overlay/felix/felix_installed/* \ cp -r $WORK_DIR/overlay/felix/felix_installed/* \
$MAIN_SRC_DIR/work/src/minimal_overlay/rootfs $WORK_DIR/src/minimal_overlay/rootfs
echo "Apache Felix has been installed." echo "Apache Felix has been installed."

View File

@ -2,26 +2,23 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
if [ ! -d $MAIN_SRC_DIR/work/glibc/glibc_prepared ] ; then if [ ! -d $SYSROOT ] ; then
echo "Cannot continue - GLIBC is missing. Please buld GLIBC first." echo "Cannot continue - GLIBC is missing. Please buld GLIBC first."
exit 1 exit 1
fi fi
echo "Preparing the overlay glibc folder. This may take a while..." echo "Preparing the overlay glibc folder. This may take a while..."
rm -rf $MAIN_SRC_DIR/work/overlay/glibc rm -rf $WORK_DIR/overlay/glibc
mkdir -p $MAIN_SRC_DIR/work/overlay/glibc/lib mkdir -p $WORK_DIR/overlay/glibc/lib
cd $MAIN_SRC_DIR/work/glibc/glibc_prepared/lib cd $SYSROOT
find . -type l -exec cp {} $MAIN_SRC_DIR/work/overlay/glibc/lib \; find . -type l -exec cp {} $WORK_DIR/overlay/glibc/lib \;
echo "All libraries have been copied." echo "All libraries have been copied."
cd $MAIN_SRC_DIR/work/overlay/glibc/lib cd $WORK_DIR/overlay/glibc/lib
for FILE_DEL in $(ls *.so) for FILE_DEL in $(ls *.so)
do do
@ -38,10 +35,8 @@ echo "Duplicate libraries have been replaced with soft links."
strip -g * strip -g *
echo "All libraries have been optimized for size." echo "All libraries have been optimized for size."
cp -r $MAIN_SRC_DIR/work/overlay/glibc/lib \ cp -r $WORK_DIR/overlay/glibc/lib $WORK_DIR/src/minimal_overlay/rootfs
$MAIN_SRC_DIR/work/src/minimal_overlay/rootfs
echo "All GNU C libraries have been installed." echo "All GNU C libraries have been installed."
cd $SRC_DIR cd $SRC_DIR

View File

@ -18,10 +18,7 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
# Read the 'JAVA_ARCHIVE' property from '.config' # Read the 'JAVA_ARCHIVE' property from '.config'
JAVA_ARCHIVE="$(grep -i ^JAVA_ARCHIVE $MAIN_SRC_DIR/.config | cut -f2 -d'=')" JAVA_ARCHIVE="$(grep -i ^JAVA_ARCHIVE $MAIN_SRC_DIR/.config | cut -f2 -d'=')"
@ -34,25 +31,25 @@ elif [ ! -f "$JAVA_ARCHIVE" ] ; then
exit 1 exit 1
fi fi
rm -rf $MAIN_SRC_DIR/work/overlay/java rm -rf $WORK_DIR/overlay/java
mkdir -p $MAIN_SRC_DIR/work/overlay/java/opt mkdir -p $WORK_DIR/overlay/java/opt
tar -xvf \ tar -xvf \
$JAVA_ARCHIVE \ $JAVA_ARCHIVE \
-C $MAIN_SRC_DIR/work/overlay/java/opt -C $WORK_DIR/overlay/java/opt
cd $MAIN_SRC_DIR/work/overlay/java/opt cd $WORK_DIR/overlay/java/opt
mv $(ls -d *) java mv $(ls -d *) java
mkdir $MAIN_SRC_DIR/work/overlay/java/bin mkdir $WORK_DIR/overlay/java/bin
for FILE in $(ls java/bin) for FILE in $(ls java/bin)
do do
ln -s ../opt/java/bin/$FILE ../bin/$FILE ln -s ../opt/java/bin/$FILE ../bin/$FILE
done done
cp -r $MAIN_SRC_DIR/work/overlay/java/* \ cp -r $WORK_DIR/overlay/java/* \
$MAIN_SRC_DIR/work/src/minimal_overlay/rootfs $WORK_DIR/src/minimal_overlay/rootfs
echo "Java has been installed." echo "Java has been installed."

View File

@ -2,10 +2,7 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
# Grab everything after the '=' character. # Grab everything after the '=' character.
DOWNLOAD_URL=$(grep -i LINKS_SOURCE_URL $MAIN_SRC_DIR/.config | cut -f2 -d'=') DOWNLOAD_URL=$(grep -i LINKS_SOURCE_URL $MAIN_SRC_DIR/.config | cut -f2 -d'=')
@ -33,12 +30,12 @@ fi
# Delete folder with previously extracted Links. # Delete folder with previously extracted Links.
echo "Removing Links work area. This may take a while..." echo "Removing Links work area. This may take a while..."
rm -rf ../../work/overlay/links rm -rf $WORK_DIR/overlay/links
mkdir ../../work/overlay/links mkdir $WORK_DIR/overlay/links
# Extract Links to folder 'work/overlay/links'. # Extract Links to folder 'work/overlay/links'.
# Full path will be something like 'work/overlay/links/links-2.12'. # Full path will be something like 'work/overlay/links/links-2.12'.
tar -xvf $ARCHIVE_FILE -C ../../work/overlay/links tar -xvf $ARCHIVE_FILE -C $WORK_DIR/overlay/links
cd $SRC_DIR cd $SRC_DIR

View File

@ -2,57 +2,41 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
# Read the 'JOB_FACTOR' property from '.config' cd $WORK_DIR/overlay/links
JOB_FACTOR="$(grep -i ^JOB_FACTOR $MAIN_SRC_DIR/.config | cut -f2 -d'=')"
# Read the 'CFLAGS' property from '.config' DESTDIR="$PWD/links_installed"
CFLAGS="$(grep -i ^CFLAGS $MAIN_SRC_DIR/.config | cut -f2 -d'=')"
# Find the number of available CPU cores.
NUM_CORES=$(grep ^processor /proc/cpuinfo | wc -l)
# Calculate the number of 'make' jobs to be used later.
NUM_JOBS=$((NUM_CORES * JOB_FACTOR))
cd $MAIN_SRC_DIR/work/overlay/links
# Change to the Links source directory which ls finds, e.g. 'links-2.12'. # Change to the Links source directory which ls finds, e.g. 'links-2.12'.
cd $(ls -d links-*) cd $(ls -d links-*)
echo "Preparing Links work area. This may take a while..." echo "Preparing Links work area. This may take a while..."
make clean -j $NUM_JOBS 2>/dev/null make -j $NUM_JOBS clean
rm -rf ../links_installed rm -rf $DESTDIR
echo "Configuring Links..." echo "Configuring Links..."
./configure \ CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" LDFLAGS="$LDFLAGS" ./configure \
--prefix=../links_installed \ --prefix=/usr \
--disable-graphics \ --disable-graphics \
--disable-utf8 \ --disable-utf8 \
--without-ipv6 \ --without-ipv6 \
--without-ssl \ --without-ssl
--without-zlib \
--without-x
# Set CFLAGS directly in Makefile.
sed -i "s/^CFLAGS = .*/CFLAGS = $CFLAGS/" Makefile
echo "Building Links..." echo "Building Links..."
make -j $NUM_JOBS make -j $NUM_JOBS
echo "Installing Links..." echo "Installing Links..."
make install -j $NUM_JOBS make -j $NUM_JOBS install DESTDIR=$DESTDIR
echo "Reducing Links size..." echo "Reducing Links size..."
strip -g ../links_installed/bin/* 2>/dev/null strip -g $DESTDIR/usr/bin/*
cp -r ../links_installed/bin \ ROOTFS="$WORK_DIR/src/minimal_overlay/rootfs"
$MAIN_SRC_DIR/work/src/minimal_overlay/rootfs
mkdir -p "$ROOTFS/usr/bin"
cp -r $DESTDIR/usr/bin/* $ROOTFS/usr/bin/
echo "Links has been installed." echo "Links has been installed."

View File

@ -2,10 +2,7 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
# Grab everything after the '=' character. # Grab everything after the '=' character.
DOWNLOAD_URL=$(grep -i LUA_SOURCE_URL $MAIN_SRC_DIR/.config | cut -f2 -d'=') DOWNLOAD_URL=$(grep -i LUA_SOURCE_URL $MAIN_SRC_DIR/.config | cut -f2 -d'=')
@ -33,11 +30,11 @@ fi
# Delete folder with previously extracted Lua. # Delete folder with previously extracted Lua.
echo "Removing Lua work area. This may take a while..." echo "Removing Lua work area. This may take a while..."
rm -rf ../../work/overlay/lua rm -rf $WORK_DIR/overlay/lua
mkdir ../../work/overlay/lua mkdir $WORK_DIR/overlay/lua
# Extract lua to folder 'work/overlay/lua'. # Extract lua to folder 'work/overlay/lua'.
# Full path will be something like 'work/overlay/lua/lua-5.3.4'. # Full path will be something like 'work/overlay/lua/lua-5.3.4'.
tar -xvf $ARCHIVE_FILE -C ../../work/overlay/lua tar -xvf $ARCHIVE_FILE -C $WORK_DIR/overlay/lua
cd $SRC_DIR cd $SRC_DIR

View File

@ -4,42 +4,32 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
# Read the 'JOB_FACTOR' property from '.config' cd $WORK_DIR/overlay/lua
JOB_FACTOR="$(grep -i ^JOB_FACTOR $MAIN_SRC_DIR/.config | cut -f2 -d'=')"
# Read the 'CFLAGS' property from '.config' DESTDIR="$PWD/lua_installed"
CFLAGS="$(grep -i ^CFLAGS $MAIN_SRC_DIR/.config | cut -f2 -d'=')"
# Find the number of available CPU cores.
NUM_CORES=$(grep ^processor /proc/cpuinfo | wc -l)
# Calculate the number of 'make' jobs to be used later.
NUM_JOBS=$((NUM_CORES * JOB_FACTOR))
cd $MAIN_SRC_DIR/work/overlay/lua
# Change to the Lua source directory which ls finds, e.g. 'lua-5.3.4'. # Change to the Lua source directory which ls finds, e.g. 'lua-5.3.4'.
cd $(ls -d lua-*) cd $(ls -d lua-*)
echo "Preparing Lua work area. This may take a while..." echo "Preparing Lua work area. This may take a while..."
make clean -j $NUM_JOBS 2>/dev/null # we install lua to /usr and not to /usr/local so we need to fix luaconf.h so lua can find modules, etc ...
rm -rf ../lua_installed sed -i 's/#define LUA_ROOT.*/#define LUA_ROOT \"\/usr\/\"/' src/luaconf.h
make -j $NUM_JOBS clean
rm -rf $DESTDIR
echo "Building Lua..." echo "Building Lua..."
make posix -j $NUM_JOBS CFLAGS="$CFLAGS --sysroot=$MAIN_SRC_DIR/work/glibc/glibc_prepared/" make -j $NUM_JOBS posix CC="$CC" CFLAGS="$CFLAGS"
make install -j $NUM_JOBS INSTALL_TOP=../../lua_installed/usr make -j $NUM_JOBS install INSTALL_TOP="$DESTDIR/usr"
echo "Reducing Lua size..." echo "Reducing Lua size..."
strip -g ../lua_installed/bin/* 2>/dev/null strip -g $DESTDIR/usr/bin/* 2>/dev/null
mkdir -p $MAIN_SRC_DIR/work/src/minimal_overlay/rootfs/usr/ ROOTFS="$WORK_DIR/src/minimal_overlay/rootfs"
cp -r ../lua_installed/usr/* $MAIN_SRC_DIR/work/src/minimal_overlay/rootfs/usr mkdir -p $ROOTFS/usr/
cp -r $DESTDIR/usr/* $ROOTFS/usr/
echo "Lua has been installed." echo "Lua has been installed."

View File

@ -2,14 +2,11 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
echo "Preparing the Minimal Linux Live utilities folder. This may take a while..." echo "Preparing the Minimal Linux Live utilities folder. This may take a while..."
rm -rf $MAIN_SRC_DIR/work/overlay/mll_utils rm -rf $WORK_DIR/overlay/mll_utils
mkdir -p $MAIN_SRC_DIR/work/overlay/mll_utils/sbin mkdir -p $WORK_DIR/overlay/mll_utils/sbin
echo "Miminal Linux Live utilities folder has been prepared." echo "Miminal Linux Live utilities folder has been prepared."

View File

@ -2,17 +2,14 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
if [ ! -d "$MAIN_SRC_DIR/work/overlay/mll_utils" ] ; then if [ ! -d "$WORK_DIR/overlay/mll_utils" ] ; then
echo "The directory $MAIN_SRC_DIR/work/overlay/mll_utils does not exist. Cannot continue." echo "The directory $WORK_DIR/overlay/mll_utils does not exist. Cannot continue."
exit 1 exit 1
fi fi
cd $MAIN_SRC_DIR/work/overlay/mll_utils cd $WORK_DIR/overlay/mll_utils
# 'mll-disk-erase' BEGIN # 'mll-disk-erase' BEGIN

View File

@ -2,17 +2,14 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
if [ ! -d "$MAIN_SRC_DIR/work/overlay/mll_utils" ] ; then if [ ! -d "$WORK_DIR/overlay/mll_utils" ] ; then
echo "The directory $MAIN_SRC_DIR/work/overlay/mll_utils does not exist. Cannot continue." echo "The directory $WORK_DIR/overlay/mll_utils does not exist. Cannot continue."
exit 1 exit 1
fi fi
cd $MAIN_SRC_DIR/work/overlay/mll_utils cd $WORK_DIR/overlay/mll_utils
# 'mll-install' BEGIN # 'mll-install' BEGIN
@ -102,30 +99,30 @@ chmod +rx sbin/mll-install
# 'mll-install' END # 'mll-install' END
if [ ! -d "$MAIN_SRC_DIR/work/syslinux" ] ; then if [ ! -d "$WORK_DIR/syslinux" ] ; then
echo "The installer depends on Syslinux which is missing. Cannot continue." echo "The installer depends on Syslinux which is missing. Cannot continue."
exit 1 exit 1
fi; fi;
cd $MAIN_SRC_DIR/work/syslinux cd $WORK_DIR/syslinux
cd $(ls -d syslinux-*) cd $(ls -d syslinux-*)
cp bios/extlinux/extlinux \ cp bios/extlinux/extlinux \
$MAIN_SRC_DIR/work/overlay/mll_utils/sbin $WORK_DIR/overlay/mll_utils/sbin
mkdir -p $MAIN_SRC_DIR/work/overlay/mll_utils/opt/syslinux mkdir -p $WORK_DIR/overlay/mll_utils/opt/syslinux
cp bios/mbr/mbr.bin \ cp bios/mbr/mbr.bin \
$MAIN_SRC_DIR/work/overlay/mll_utils/opt/syslinux $WORK_DIR/overlay/mll_utils/opt/syslinux
# Big mama hack - need to find proper workaround!!! # Big mama hack - need to find proper workaround!!!
# Both syslinux and extlinux are 32-bit executables which require 32-bit libs. # Both syslinux and extlinux are 32-bit executables which require 32-bit libs.
# Possible solution 1 - build 32-bit GLIBC on demand. # Possible solution 1 - build 32-bit GLIBC on demand.
# Possible solution 2 - drop 32-bit MLL and provide 64-bit with multi-arch. # Possible solution 2 - drop 32-bit MLL and provide 64-bit with multi-arch.
mkdir -p $MAIN_SRC_DIR/work/overlay/mll_utils/lib mkdir -p $WORK_DIR/overlay/mll_utils/lib
mkdir -p $MAIN_SRC_DIR/work/overlay/mll_utils/usr/lib mkdir -p $WORK_DIR/overlay/mll_utils/usr/lib
cp /lib/ld-linux.so.2 \ cp /lib/ld-linux.so.2 \
$MAIN_SRC_DIR/work/overlay/mll_utils/lib $WORK_DIR/overlay/mll_utils/lib
cp /lib/i386-linux-gnu/libc.so.6 \ cp /lib/i386-linux-gnu/libc.so.6 \
$MAIN_SRC_DIR/work/overlay/mll_utils/usr/lib $WORK_DIR/overlay/mll_utils/usr/lib
# Big mama hack - end. # Big mama hack - end.
echo "Minimal Linux Live installer has been generated." echo "Minimal Linux Live installer has been generated."

View File

@ -2,19 +2,15 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
if [ ! -d "$MAIN_SRC_DIR/work/overlay/mll_utils" ] ; then if [ ! -d "$WORK_DIR/overlay/mll_utils" ] ; then
echo "The directory $MAIN_SRC_DIR/work/overlay/mll_utils does not exist. Cannot continue." echo "The directory $WORK_DIR/overlay/mll_utils does not exist. Cannot continue."
exit 1 exit 1
fi fi
# Copy all generated files to the source overlay folder. # Copy all generated files to the source overlay folder.
cp -r $MAIN_SRC_DIR/work/overlay/mll_utils/* \ cp -r $WORK_DIR/overlay/mll_utils/* $WORK_DIR/src/minimal_overlay/rootfs
$MAIN_SRC_DIR/work/src/minimal_overlay/rootfs
echo "All MLL utilities have been installed." echo "All MLL utilities have been installed."

View File

@ -1,25 +1,22 @@
#!/bin/sh #!/bin/sh
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
# Read the 'CFLAGS' property from '.config'
CFLAGS="$(grep -i ^CFLAGS $MAIN_SRC_DIR/.config | cut -f2 -d'=')"
echo "removing previous work area" echo "removing previous work area"
rm -rf $MAIN_SRC_DIR/work/overlay/nweb rm -rf $WORK_DIR/overlay/nweb
mkdir -p $MAIN_SRC_DIR/work/overlay/nweb mkdir -p $WORK_DIR/overlay/nweb
cd $MAIN_SRC_DIR/work/overlay/nweb cd $WORK_DIR/overlay/nweb
set -x set -x
# nweb # nweb
gcc $CFLAGS --sysroot=$MAIN_SRC_DIR/work/glibc/glibc_prepared/ $SRC_DIR/nweb23.c -o nweb $CC $CFLAGS $LDFLAGS $SRC_DIR/nweb23.c -o nweb
# client # client
#cc $CFLAGS $SRC_DIR/client.c -o client #$CC $CFLAGS $LDFLAGS $SRC_DIR/client.c -o client
set +x set +x
echo "nweb has been build." echo "nweb has been build."

View File

@ -2,10 +2,7 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
# Grab everything after the '=' character. # Grab everything after the '=' character.
DOWNLOAD_URL=$(grep -i STATIC_GET_SOURCE_URL $MAIN_SRC_DIR/.config | cut -f2 -d'=') DOWNLOAD_URL=$(grep -i STATIC_GET_SOURCE_URL $MAIN_SRC_DIR/.config | cut -f2 -d'=')
@ -30,11 +27,11 @@ fi
# Delete folder with previously prepared static-get. # Delete folder with previously prepared static-get.
echo "Removing static-get work area. This may take a while..." echo "Removing static-get work area. This may take a while..."
rm -rf ../../work/overlay/staget rm -rf $WORK_DIR/overlay/staget
mkdir ../../work/overlay/staget mkdir $WORK_DIR/overlay/staget
# Copy static-get to folder 'work/overlay/staget'. # Copy static-get to folder 'work/overlay/staget'.
cp static-get.sh ../../work/overlay/staget cp static-get.sh $WORK_DIR/overlay/staget
cd $SRC_DIR cd $SRC_DIR

View File

@ -2,31 +2,28 @@
SRC_DIR=$(pwd) SRC_DIR=$(pwd)
# Find the main source directory . ../../common.sh
cd ../../..
MAIN_SRC_DIR=$(pwd)
cd $SRC_DIR
echo "Removing old static-get artifacts. This may take a while..." echo "Removing old static-get artifacts. This may take a while..."
rm -rf $MAIN_SRC_DIR/work/overlay/staget/staget_installed rm -rf $WORK_DIR/overlay/staget/staget_installed
mkdir -p $MAIN_SRC_DIR/work/overlay/staget/staget_installed/opt/staget mkdir -p $WORK_DIR/overlay/staget/staget_installed/opt/staget
mkdir -p $MAIN_SRC_DIR/work/overlay/staget/staget_installed/bin mkdir -p $WORK_DIR/overlay/staget/staget_installed/bin
cd $MAIN_SRC_DIR/work/overlay/staget cd $WORK_DIR/overlay/staget
cp $MAIN_SRC_DIR/source/overlay/static-get.sh . cp $MAIN_SRC_DIR/source/overlay/static-get.sh .
chmod +rx static-get.sh chmod +rx static-get.sh
cp static-get.sh $MAIN_SRC_DIR/work/overlay/staget/staget_installed/opt/staget cp static-get.sh $WORK_DIR/overlay/staget/staget_installed/opt/staget
cd $MAIN_SRC_DIR/work/overlay/staget/staget_installed cd $WORK_DIR/overlay/staget/staget_installed
ln -s ../opt/staget/static-get.sh bin/static-get ln -s ../opt/staget/static-get.sh bin/static-get
ln -s ../opt/staget/static-get.sh bin/mll-get ln -s ../opt/staget/static-get.sh bin/mll-get
cp -r $MAIN_SRC_DIR/work/overlay/staget/staget_installed/* \ cp -r $WORK_DIR/overlay/staget/staget_installed/* \
$MAIN_SRC_DIR/work/src/minimal_overlay/rootfs $WORK_DIR/src/minimal_overlay/rootfs
echo "static-get has been installed." echo "static-get has been installed."

37
src/minimal_overlay/common.sh Executable file
View File

@ -0,0 +1,37 @@
#!/bin/sh
# common code used by all bundles
# should be included at the top of every *.sh file of each bundle
export MAIN_SRC_DIR=$(realpath --no-symlinks $PWD/../../../)
export WORK_DIR="$MAIN_SRC_DIR/work"
export SRC_DIR=$(pwd)
export CONFIG="$MAIN_SRC_DIR/.config"
export SYSROOT="$WORK_DIR/sysroot"
export SYSROOT_SPECS="$WORK_DIR/sysroot.specs"
# Read the 'JOB_FACTOR' property from $CONFIG
export JOB_FACTOR="$(grep -i ^JOB_FACTOR $CONFIG | cut -f2 -d'=')"
# Read the 'CFLAGS' property from $CONFIG
export CFLAGS="$(grep -i ^CFLAGS $CONFIG | cut -f2 -d'=')"
# Find the number of available CPU cores
export NUM_CORES="$(grep ^processor /proc/cpuinfo | wc -l)"
# Calculate the number of make "jobs"
export NUM_JOBS=$((NUM_CORES * JOB_FACTOR))
# Ideally we would export MAKE at this point with -j etc to allow programs to just run $(MAKE) and not worry about extra flags that need to be passed
# export MAKE="${MAKE-make} -j $NUM_JOBS"
# sysroot flags for the compiler
#-Wl,-nostdlib is required to make ld / gcc ignore the host's /usr/lib and /lib
ld_flags="-Wl,-nostdlib $(grep -- \"-L\" $SYSROOT_SPECS)"
#-static-libgcc is neeeded since we don't have the gcc-libs in our sysroot
gcc_flags="-specs=$SYSROOT_SPECS -static-libgcc"
# $ld_flags is passed 2 times because sometimes bundles ignore one of the variables
export CC="${CC-gcc} $gcc_flags $ld_flags"
export CFLAGS="$CFLAGS"
export LDFLAGS="$LDFLAGS $ld_flags"