#!/bin/bash
#===========================
# UMVIRT LINUX FROM SCRATCH
#===========================
# Compilation script.
# Network mode.
#===========================
# Release: 0.2.2
# Package: proftpd
#===========================
# DB commit: 48bb9ee31306c82c48dfaaad707eb4f6a926eb8a
# APP commit: 1ca4178aea919e4c9e869e3d650ff8af9678bd6f
#===========================
echo "ULFS Package installation start"
echo "==============================="
echo "Package: proftpd"
echo "Release: 0.2.2"
echo "checking config file"
if [ -f $ULFS_CONFIG_FILE ]
then
echo "loading config file $ULFS_CONFIG_FILE..."
. $ULFS_CONFIG_FILE
fi
#Creating log directory
mkdir -p /var/log/ulfs-packages/proftpd/
#Saving start timestamp
date +%s > /var/log/ulfs-packages/proftpd/start.time
#Going to source directory...
cd /sources
#Checking dependances...
#Checking libssh2...
if [ ! -f /var/cache/ulfs-packages/libssh2 ]; then
echo "Dependance \"libssh2\" not found. Trying to install...";
wget --no-check-certificate https://umvirt.com/linux/packages//0.2.2/libssh2/install -O - | bash
if [ ! -f /var/cache/ulfs-packages/libssh2 ]; then
echo "Dependance \"libssh2\" is not installed. Exiting..."
exit
fi
fi
#Checking Linux-PAM...
if [ ! -f /var/cache/ulfs-packages/Linux-PAM ]; then
echo "Dependance \"Linux-PAM\" not found. Trying to install...";
wget --no-check-certificate https://umvirt.com/linux/packages//0.2.2/Linux-PAM/install -O - | bash
if [ ! -f /var/cache/ulfs-packages/Linux-PAM ]; then
echo "Dependance \"Linux-PAM\" is not installed. Exiting..."
exit
fi
fi
#Checking libcap-ng...
if [ ! -f /var/cache/ulfs-packages/libcap-ng ]; then
echo "Dependance \"libcap-ng\" not found. Trying to install...";
wget --no-check-certificate https://umvirt.com/linux/packages//0.2.2/libcap-ng/install -O - | bash
if [ ! -f /var/cache/ulfs-packages/libcap-ng ]; then
echo "Dependance \"libcap-ng\" is not installed. Exiting..."
exit
fi
fi
#Checking mariadb-client...
if [ ! -f /var/cache/ulfs-packages/mariadb-client ]; then
echo "Dependance \"mariadb-client\" not found. Trying to install...";
wget --no-check-certificate https://umvirt.com/linux/packages//0.2.2/mariadb-client/install -O - | bash
if [ ! -f /var/cache/ulfs-packages/mariadb-client ]; then
echo "Dependance \"mariadb-client\" is not installed. Exiting..."
exit
fi
fi
#Checking postgresql-client...
if [ ! -f /var/cache/ulfs-packages/postgresql-client ]; then
echo "Dependance \"postgresql-client\" not found. Trying to install...";
wget --no-check-certificate https://umvirt.com/linux/packages//0.2.2/postgresql-client/install -O - | bash
if [ ! -f /var/cache/ulfs-packages/postgresql-client ]; then
echo "Dependance \"postgresql-client\" is not installed. Exiting..."
exit
fi
fi
#Saving downloading timestamp
date +%s > /var/log/ulfs-packages/proftpd/download.time
#Downloading source package archive...
wget --no-check-certificate -nc https://umvirt.com/linux/downloads/0.2.2/packages/p/proftpd-1.3.8b.tar.gz.md5sum
wget --no-check-certificate -nc https://umvirt.com/linux/downloads/0.2.2/packages/p/proftpd-1.3.8b.tar.gz
#Checking source package file existance
if [ ! -f proftpd-1.3.8b.tar.gz ]; then
echo "Error: Can't find proftpd-1.3.8b.tar.gz. Exiting!"
exit
fi
#Checking source package file checksum
if [ -f proftpd-1.3.8b.tar.gz.md5sum ]; then
MD5=`LANG=C md5sum -c proftpd-1.3.8b.tar.gz.md5sum | grep OK`
if [ "$MD5" == "" ] ; then
echo "Error: Checksum of proftpd-1.3.8b.tar.gz is wrong. Exiting!"
exit
fi
fi
#Saving cleanup timestamp
date +%s > /var/log/ulfs-packages/proftpd/cleanup.time
rm -rfv /sources/proftpd-1.3.8b/
#Saving extracting timestamp
date +%s > /var/log/ulfs-packages/proftpd/unpack.time
#Extracting tar source package archive with default parameters...
tar -xf proftpd-1.3.8b.tar.gz
#Checking package directory size after unpack...
du -s proftpd-1.3.8b | awk 'NR==1 {print $1}' > /var/log/ulfs-packages/proftpd/unpack.size
#Going to source package directory...
cd proftpd-1.3.8b
#Saving configuration timestamp
date +%s > /var/log/ulfs-packages/proftpd/configure.time
#Sleep 1 second
sleep 1
if [[ "$ULFS_PKG_DATERESET" == "YES" ]]
then
#Changing all files creation time (except build configuration files) in source directory to find them after installation
find /sources/proftpd-1.3.8b \! -path "*/configure*" \! -path "*/Makefile*" \! -path "*.make" \! -path "*.m4" \! -path "*.am" \! -path "*.mk" \! -path "*.stamp" \! -path "*gentpl.py" -exec touch -m {} +
fi
#Running configuration script...
echo "checking config file"
if [ -f $ULFS_CONFIG_FILE ]
then
echo "loading config file $ULFS_CONFIG_FILE..."
. $ULFS_CONFIG_FILE
fi
cat > ulfs_configure.sh << EOIS
echo "Initializing distributed build environment... "
if [[ "\$ULFS_ICECC" == "YES" ]]
then
export PATH="\$ULFS_ICECC_PATH:\$PATH"
echo "ICECC"
fi
echo "Environment debug..."
echo "PATH: \$PATH"
echo "MAKEFLAGS: \$MAKEFLAGS"
echo "NINJAJOBS: \$NINJAJOBS"
env | grep ULFS
groupadd -g 46 proftpd &&
useradd -c proftpd -d /srv/ftp -g proftpd \\
-s /usr/bin/proftpdshell -u 46 proftpd &&
install -v -d -m775 -o proftpd -g proftpd /srv/ftp &&
ln -v -s /usr/bin/false /usr/bin/proftpdshell &&
echo /usr/bin/proftpdshell >> /etc/shells
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/run
EOIS
cat ulfs_configure.sh | bash 2>&1 | tee /var/log/ulfs-packages/proftpd/configure.log
#Saving build timestamp
date +%s > /var/log/ulfs-packages/proftpd/build.time
#Running build script...
echo "checking config file"
if [ -f $ULFS_CONFIG_FILE ]
then
echo "loading config file $ULFS_CONFIG_FILE..."
. $ULFS_CONFIG_FILE
fi
cat > ulfs_build.sh << EOIS
echo "Initializing distributed build environment... "
if [[ "\$ULFS_ICECC" == "YES" ]]
then
export PATH="\$ULFS_ICECC_PATH:\$PATH"
echo "ICECC"
fi
echo "Environment debug..."
echo "PATH: \$PATH"
echo "MAKEFLAGS: \$MAKEFLAGS"
echo "NINJAJOBS: \$NINJAJOBS"
env | grep ULFS
make
EOIS
cat ulfs_build.sh | bash 2>&1 | tee /var/log/ulfs-packages/proftpd/build.log
#Saving install timestamp
date +%s > /var/log/ulfs-packages/proftpd/install.time
#Running install script...
cat > ulfs_install.sh << EOIS
make install &&
install -d -m755 /usr/share/doc/proftpd-1.3.8b &&
cp -Rv doc/* /usr/share/doc/proftpd-1.3.8b
cat > /etc/proftpd.conf << "EOF"
# This is a basic ProFTPD configuration file
# It establishes a single server and a single anonymous login.
ServerName "ProFTPD Default Installation"
ServerType standalone
DefaultServer on
# Port 21 is the standard FTP port.
Port 21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
MaxInstances 30
# Set the user and group that the server normally runs at.
User proftpd
Group proftpd
# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
#DefaultRoot ~
# Normally, files should be overwritable.
AllowOverwrite on
# A basic anonymous configuration, no upload directories.
User proftpd
Group proftpd
# Clients should be able to login with "anonymous" as well as "proftpd"
UserAlias anonymous proftpd
# Limit the maximum number of anonymous logins
MaxClients 10
# 'welcome.msg' should be displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayChdir .message
# Limit WRITE everywhere in the anonymous chroot
DenyAll
EOF
EOIS
USER=`whoami`
if [ "$USER" == "root" ] ; then
cat ulfs_install.sh | bash 2>&1 | tee /var/log/ulfs-packages/proftpd/install.log
else
cat ulfs_install.sh | sudo bash 2>&1 | tee /var/log/ulfs-packages/proftpd/install.log
fi
#Saving finish timestamp
date +%s > /var/log/ulfs-packages/proftpd/finish.time
#Checking package directory size after unpack...
cd /sources
du -s proftpd-1.3.8b | awk 'NR==1 {print $1}' > /var/log/ulfs-packages/proftpd/install.size
echo "ULFS package installation completed."
#Producing files list
echo "Looking for installed files..."
if [ -f /var/log/ulfs-packages/proftpd/files.txt ]; then
rm /var/log/ulfs-packages/proftpd/files.txt
fi
USER=`whoami`
if [ "$USER" == "root" ] ; then
find /bin -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
find /sbin -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
find /usr -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
find /etc -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
find /opt -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
find /lib -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
find /lib64 -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
find /var -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time \! -path "/var/log/ulfs-packages/proftpd/*" >> /var/log/ulfs-packages/proftpd/files.txt
else
sudo find /bin -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
sudo find /sbin -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
sudo find /usr -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
sudo find /etc -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
sudo find /opt -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
sudo find /lib -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
sudo find /lib64 -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time >> /var/log/ulfs-packages/proftpd/files.txt
sudo find /var -type f -newer /var/log/ulfs-packages/proftpd/configure.time \! -newer /var/log/ulfs-packages/proftpd/finish.time \! -path "/var/log/ulfs-packages/proftpd/*" >> /var/log/ulfs-packages/proftpd/files.txt
fi
#Marking package as installed...
mkdir -p /var/cache/ulfs-packages
USER=`whoami`
if [ "$USER" == "root" ] ; then
touch /var/cache/ulfs-packages/proftpd
else
sudo touch /var/cache/ulfs-packages/proftpd
fi
#Calculate delta size
a=`cat /var/log/ulfs-packages/proftpd/unpack.size`
b=`cat /var/log/ulfs-packages/proftpd/install.size`
c=$(($b-$a))
echo $c > /var/log/ulfs-packages/proftpd/delta.size
#Calculate prepare time
a=`cat /var/log/ulfs-packages/proftpd/start.time`
b=`cat /var/log/ulfs-packages/proftpd/configure.time`
dp=$(($b-$a))
#Calculate download time
a=`cat /var/log/ulfs-packages/proftpd/download.time`
b=`cat /var/log/ulfs-packages/proftpd/unpack.time`
dd=$(($b-$a))
#Calculate delta time
a=`cat /var/log/ulfs-packages/proftpd/configure.time`
b=`cat /var/log/ulfs-packages/proftpd/finish.time`
db=$(($b-$a))
echo $db > /var/log/ulfs-packages/proftpd/delta.time
#Report
echo ""
echo "ULFS Package installation report"
echo "================================"
echo "Package: proftpd"
echo "Release: 0.2.2"
echo "Build size: $c"
echo "Prepare time: $dp sec."
echo "Download time: $dd sec."
echo "Build time: $db sec."
#End of script