Skip to content

Commit

Permalink
build_{rust,dpkg}.sh - scripts simplifications and fix one small bug
Browse files Browse the repository at this point in the history
  • Loading branch information
interduo committed Jul 1, 2024
1 parent 7c351a1 commit 5e22b08
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 68 deletions.
123 changes: 60 additions & 63 deletions src/build_dpkg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# This is all GPL2.

BUILD_DATE=`date +%Y%m%d%H%M`
if [ $1 = "--nostamp" ]
if [[ "$1" == "--nostamp" ]]
then
BUILD_DATE=""
fi
Expand All @@ -20,7 +20,7 @@ DEBIAN_DIR=$DPKG_DIR/DEBIAN
LQOS_DIR=$DPKG_DIR/opt/libreqos/src
ETC_DIR=$DPKG_DIR/etc
MOTD_DIR=$DPKG_DIR/etc/update-motd.d
LQOS_FILES="graphInfluxDB.py influxDBdashboardTemplate.json integrationCommon.py integrationPowercode.py integrationRestHttp.py integrationSonar.py integrationSplynx.py integrationUISP.py integrationSonar.py LibreQoS.py lqos.example lqTools.py mikrotikFindIPv6.py network.example.json pythonCheck.py README.md scheduler.py ShapedDevices.example.csv lqos.example"
LQOS_FILES="graphInfluxDB.py influxDBdashboardTemplate.json integrationCommon.py integrationPowercode.py integrationRestHttp.py integrationSonar.py integrationSplynx.py integrationUISP.py LibreQoS.py lqos.example lqTools.py mikrotikFindIPv6.py network.example.json pythonCheck.py README.md scheduler.py ShapedDevices.example.csv"
LQOS_BIN_FILES="lqos_scheduler.service.example lqosd.service.example lqos_node_manager.service.example"
RUSTPROGS="lqosd lqtop xdp_iphash_to_cpu_cmdline xdp_pping lqos_node_manager lqusers lqos_setup lqos_map_perf uisp_integration lqos_support_tool"

Expand All @@ -35,91 +35,87 @@ rm -rf dist
# The Debian Packaging Bit

# Create the basic directory structure
mkdir -p $DEBIAN_DIR

# Build the chroot directory structure
mkdir -p $LQOS_DIR
mkdir -p $LQOS_DIR/bin/static
mkdir -p $ETC_DIR
mkdir -p $MOTD_DIR
mkdir -p $DEBIAN_DIR $LQOS_DIR/bin/static $ETC_DIR $MOTD_DIR

# Create the Debian control file
pushd $DEBIAN_DIR > /dev/null
touch control
echo "Package: $PACKAGE" >> control
echo "Version: $VERSION" >> control
echo "Architecture: amd64" >> control
echo "Maintainer: Herbert Wolverson <[email protected]>" >> control
echo "Description: CAKE-based traffic shaping for ISPs" >> control
echo "Depends: $APT_DEPENDENCIES" >> control
cat <<EOF > control
Package: $PACKAGE
Version: $VERSION
Architecture: amd64
Maintainer: Herbert Wolverson <[email protected]>
Description: CAKE-based traffic shaping for ISPs
Depends: $APT_DEPENDENCIES
EOF
popd > /dev/null

# Create the post-installation file
pushd $DEBIAN_DIR > /dev/null
touch postinst
echo "#!/bin/bash" >> postinst
echo "# Install Python Dependencies" >> postinst
echo "pushd /opt/libreqos" >> postinst

cat <<EOF > postinst
#!/bin/bash
# Install Python Dependencies
pushd /opt/libreqos
EOF

# - Setup Python dependencies as a post-install task
while requirement= read -r line
do
echo "python3 -m pip install $line --break-system-packages" >> postinst
echo "sudo python3 -m pip install $line --break-system-packages" >> postinst
done < ../../../../requirements.txt

cat <<EOF >> postinst
# - Run lqsetup
echo "/opt/libreqos/src/bin/lqos_setup" >> postinst
/opt/libreqos/src/bin/lqos_setup
# - Setup the services
echo "cp /opt/libreqos/src/bin/lqos_node_manager.service.example /etc/systemd/system/lqos_node_manager.service" >> postinst
echo "cp /opt/libreqos/src/bin/lqosd.service.example /etc/systemd/system/lqosd.service" >> postinst
echo "cp /opt/libreqos/src/bin/lqos_scheduler.service.example /etc/systemd/system/lqos_scheduler.service" >> postinst
echo "/bin/systemctl daemon-reload" >> postinst
echo "/bin/systemctl enable lqosd lqos_node_manager lqos_scheduler" >> postinst
echo "/bin/systemctl start lqosd" >> postinst
echo "/bin/systemctl start lqos_node_manager" >> postinst
echo "/bin/systemctl start lqos_scheduler" >> postinst
echo "popd" >> postinst
cp /opt/libreqos/src/bin/lqos_node_manager.service.example /etc/systemd/system/lqos_node_manager.service
cp /opt/libreqos/src/bin/lqosd.service.example /etc/systemd/system/lqosd.service
cp /opt/libreqos/src/bin/lqos_scheduler.service.example /etc/systemd/system/lqos_scheduler.service
/bin/systemctl daemon-reload
/bin/systemctl enable lqosd lqos_node_manager lqos_scheduler
/bin/systemctl start lqosd lqos_node_manager lqos_scheduler
popd
EOF

# Attempting to fixup versioning issues with libpython.
# This requires that you already have LibreQoS installed.
LINKED_PYTHON=$(ldd /opt/libreqos/src/bin/lqosd | grep libpython | sed -e '/^[^\t]/ d' | sed -e 's/\t//' | sed -e 's/.*=..//' | sed -e 's/ (0.*)//')
echo "if ! test -f $LINKED_PYTHON; then" >> postinst
echo " if test -f /lib/x86_64-linux-gnu/libpython3.12.so.1.0; then" >> postinst
echo " ln -s /lib/x86_64-linux-gnu/libpython3.12.so.1.0 $LINKED_PYTHON" >> postinst
echo " fi" >> postinst
echo " if test -f /lib/x86_64-linux-gnu/libpython3.11.so.1.0; then" >> postinst
echo " ln -s /lib/x86_64-linux-gnu/libpython3.11.so.1.0 $LINKED_PYTHON" >> postinst
echo " fi" >> postinst
echo "fi" >> postinst
cat <<EOF >> postinst
if ! test -f $LINKED_PYTHON; then
if test -f /lib/x86_64-linux-gnu/libpython3.12.so.1.0; then
ln -s /lib/x86_64-linux-gnu/libpython3.12.so.1.0 $LINKED_PYTHON
fi
if test -f /lib/x86_64-linux-gnu/libpython3.11.so.1.0; then
ln -s /lib/x86_64-linux-gnu/libpython3.11.so.1.0 $LINKED_PYTHON
fi
fi
EOF
# End of symlink insanity
chmod a+x postinst

# Uninstall Script
touch postrm
echo "#!/bin/bash" >> postrm
echo "/bin/systemctl disable lqosd lqos_node_manager lqos_scheduler" >> postrm
echo "/bin/systemctl stop lqosd" >> postrm
echo "/bin/systemctl stop lqos_node_manager" >> postrm
echo "/bin/systemctl stop lqos_scheduler" >> postrm
cat <<EOF > postrm
#!/bin/bash
/bin/systemctl disable lqosd lqos_node_manager lqos_scheduler
/bin/systemctl stop lqosd lqos_node_manager lqos_scheduler
EOF
chmod a+x postrm
popd > /dev/null

# Create the cleanup file
pushd $DEBIAN_DIR > /dev/null
touch postrm
echo "#!/bin/bash" >> postrm
echo "#!/bin/bash" > postrm
chmod a+x postrm
popd > /dev/null

# Copy files into the LibreQoS directory
for file in $LQOS_FILES
do
cp $file $LQOS_DIR
done
cp $LQOS_FILES $LQOS_DIR

# Copy files into the LibreQoS/bin directory
for file in $LQOS_BIN_FILES
do
cp bin/$file $LQOS_DIR/bin
done
cp bin/*service.example $LQOS_DIR/bin

####################################################
# Build the Rust programs
Expand All @@ -131,24 +127,25 @@ popd > /dev/null
# Copy newly built Rust files
# - The Python integration Library
cp rust/target/release/liblqos_python.so $LQOS_DIR

# - The main executables
for prog in $RUSTPROGS
do
cp rust/target/release/$prog $LQOS_DIR/bin
done
cd rust/target/release/
cp $RUSTPROGS $LQOS_DIR/bin
cd ../../../

# - The webserver skeleton files
cp rust/lqos_node_manager/Rocket.toml $LQOS_DIR/bin
cp -R rust/lqos_node_manager/static/* $LQOS_DIR/bin/static

####################################################
# Add Message of the Day
pushd $MOTD_DIR > /dev/null
echo "#!/bin/bash" > 99-libreqos
echo "MY_IP=\'hostname -I | cut -d' ' -f1\'" >> 99-libreqos
echo "echo \"\"" >> 99-libreqos
echo "echo \"LibreQoS Traffic Shaper is installed on this machine.\"" >> 99-libreqos
echo "echo \"Point a browser at http://\$MY_IP:9123/ to manage it.\"" >> 99-libreqos
echo "echo \"\"" >> 99-libreqos
cat <<EOF > 99-libreqos
#!/bin/bash
MY_IP=\'hostname -I | cut -d' ' -f1\'
echo -e "\nLibreQoS Traffic Shaper is installed on this machine.
\nPoint a browser at http://\$MY_IP:9123/ to manage it.\n"
EOF
chmod a+x 99-libreqos
popd

Expand Down
10 changes: 5 additions & 5 deletions src/build_rust.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ sudo apt install python3-pip clang gcc gcc-multilib llvm libelf-dev git nano gra

if ! rustup -V &> /dev/null
then
echo "rustup is not installed."
echo "Visit https://rustup.rs and install Rust from there"
echo "Usually, you can copy the following and follow the on-screen instructions."
echo "Please don't install Rust as root."
echo "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh"
echo -e "rustup is not installed.\
\nVisit https://rustup.rs and install Rust from there\
\nUsually, you can copy the following and follow the on-screen instructions.\
\nPlease don't install Rust as root.\
\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh"
exit 1
else
echo "rustup found."
Expand Down

0 comments on commit 5e22b08

Please sign in to comment.