#!/bin/bash # script for building extra printing drivers # Epson, Canon, Pantum etc for Porteus # Version 2025-12-28 # Copyright 2023-2030, Blaze, Dankov, Russia # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if [ "$(whoami)" != "root" ]; then echo -e "\nYou need to be root to run this script.\n" exit 1 fi VERSION=$(date +%Y-%m-%d) BUILD=${BUILD:-1} BOLD=${BOLD:-"\e[1m"} CYAN=${CYAN:-"\e[96m"} GREEN=${GREEN:-"\e[92m"} RED=${RED:-"\e[31m"} RESET=${RESET:-"\e[0m"} CWD=$(pwd) TMPDIR=/tmp/portch OUTPUT=${OUTPUT:-/tmp} ARCH=$(uname -m) PKG="" if [ "$ARCH" = "i586" ]; then SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e cleanup(){ [ -n "$TMPDIR" ] && [ -d "$TMPDIR" ] && rm -rf "$TMPDIR" [ -n "$PKG" ] && [ -d "$PKG" ] && rm -rf "$PKG" exit } echo "Please set model of your printer for download and build extra printing module:" echo "1) Canon" echo "2) Epson" echo "3) HP" echo "4) Pantum" echo "5) Samsung" echo read -r model case "$model" in 1|Canon|canon) echo -e "\n${BOLD}Canon${RESET} chosen. Downloading:" PRGNAM=${PRGNAM:-canon} PKG=${TMPDIR}/package-${PRGNAM} PKGINFO=${PKG}/var/lib/pkgtools/packages DEP1NAM=${DEPNAM:-jbigkit} DEP1VER=$(lynx --source https://gitlab.archlinux.org/archlinux/packaging/packages/jbigkit/-/raw/main/.SRCINFO?ref_type=heads | grep pkgver | cut -d'=' -f2 | tr -d ' ') SOURCE1=$(lynx --source https://aur.archlinux.org/packages/cnrdrvcups-lb-bin | grep -Eo "]+") SOURCE2=$(lynx --source https://aur.archlinux.org/packages/cnrdrvcups-sfp | grep -Eo "]+") SOURCE3=$(echo "http://www.cl.cam.ac.uk/~mgk25/jbigkit/download/jbigkit-${DEP1VER}.tar.gz") rm -rf "$PKG" mkdir -p "$TMPDIR" "$PKG" "$DEP1NAM-$DEP1VER" cd "$PKG" || exit 1 wget -q --show-progress "$SOURCE1" "$SOURCE2" "$SOURCE3" tar xf linux-UFRII-drv-*.tar.gz tar xf linux-UFRIILT-drv-*.tar.gz tar xf "jbigkit-${DEP1VER}.tar.gz" rm -f *.tar.gz cd "$DEP1NAM-$DEP1VER" || exit 1 wget -q "https://gitlab.archlinux.org/archlinux/packaging/packages/jbigkit/-/raw/main/jbigkit-${DEP1VER}-shared_lib.patch" \ "https://gitlab.archlinux.org/archlinux/packaging/packages/jbigkit/-/raw/main/jbigkit-${DEP1VER}-build_warnings.patch" \ "https://gitlab.archlinux.org/archlinux/packaging/packages/jbigkit/-/raw/main/jbigkit-${DEP1VER}-ldflags.patch" \ "https://gitlab.archlinux.org/archlinux/packaging/packages/jbigkit/-/raw/main/jbigkit-${DEP1VER}-coverity.patch" \ "https://gitlab.archlinux.org/archlinux/packaging/packages/jbigkit/-/raw/main/0013-new-jbig.c-limit-s-maxmem-maximum-decoded-image-size.patch" \ "https://gitlab.archlinux.org/archlinux/packaging/packages/jbigkit/-/raw/main/0015-jbg_newlen-check-for-end-of-file-within-MARKER_NEWLE.patch" patch -Np1 -i "jbigkit-${DEP1VER}-shared_lib.patch" patch -Np1 -i "jbigkit-${DEP1VER}-build_warnings.patch" patch -Np1 -i "jbigkit-${DEP1VER}-ldflags.patch" patch -Np1 -i "jbigkit-${DEP1VER}-coverity.patch" patch -Np1 -i "0013-new-jbig.c-limit-s-maxmem-maximum-decoded-image-size.patch" patch -Np1 -i "0015-jbg_newlen-check-for-end-of-file-within-MARKER_NEWLE.patch" make EXTRA_CFLAGS="$SLKCFLAGS" mkdir -p "$PKG/usr/bin" "$PKG/usr/lib${LIBDIRSUFFIX}" install -vDm 755 libjbig/*.so.* -t "$PKG/usr/lib${LIBDIRSUFFIX}" for lib in libjbig.so libjbig85.so; do ln -sv "$lib.$DEP1VER" "$PKG/usr/lib${LIBDIRSUFFIX}/$lib" done install -vDm 755 pbmtools/{jbgtopbm{,85},pbmtojbg{,85}} -t "$PKG/usr/bin" mkdir -p "$PKGINFO" echo "PACKAGE NAME: $DEP1NAM-$DEP1VER-$ARCH" > "$PKGINFO/$DEP1NAM-$DEP1VER-$ARCH" cat >> "$PKGINFO/$DEP1NAM-$DEP1VER-$ARCH" << EOM PACKAGE DESCRIPTION: jbigkit: jbigkit (highly effective lossless compression algorithm) jbigkit: jbigkit: JBIG is a highly effective lossless compression algorithm for jbigkit: high-resolution bi-level images (one bit per pixel), which is jbigkit: particularly suitable for scanned documents or fax pages. jbigkit: jbigkit: JBIG-KIT provides a portable library of compression and decompression jbigkit: functions with a documented interface that you can easily include jbigkit: into your image or document processing software. JBIG-KIT also jbigkit: provides ready-to-use compression and decompression programs with a jbigkit: simple command line interface. FILE LIST: EOM find . | grep -v var >> "$PKGINFO/$DEP1NAM-$DEP1VER-$ARCH" cd "$PKG" || exit 1 if [[ "$ARCH" == i686 || "$ARCH" == i586 ]]; then mv "$PKG"/linux-UFRII-drv-*-m17n/x86/Debian/cnrdrvcups-ufr2-uk_*_i386.deb "$PKG/" mv "$PKG"/linux-UFRIILT-drv-*-uken/32-bit_Driver/Debian/cnrdrvcups-ufr2lt-uk_*_i386.deb "$PKG/" else mv "$PKG"/linux-UFRII-drv-*-m17n/x64/Debian/cnrdrvcups-ufr2-uk_*_amd64.deb "$PKG/" mv "$PKG"/linux-UFRIILT-drv-*-uken/64-bit_Driver/Debian/cnrdrvcups-ufr2lt-uk_*_amd64.deb "$PKG/" fi rm -rf "$PKG"/linux-UFRII-drv-*-m17n "$PKG"/linux-UFRIILT-drv-*-uken DEP2NAM=${DEP2NAM:-cnrdrvcups-ufr2-uk} DEP3NAM=${DEP3NAM:-cnrdrvcups-ufr2lt-uk} DEP2VER=$(ar p "$PKG"/${DEP2NAM}_*.deb control.tar.xz 2>/dev/null | tar -OJxf - ./control | awk '/^Version:/{print $NF}') DEP3VER=$(ar p "$PKG"/${DEP3NAM}_*.deb control.tar.gz 2>/dev/null | tar -Ozxf - ./control | awk '/^Version:/{print $NF}') ar p "${DEP2NAM}"_*.deb data.tar.xz | tar Jx -C . ar p "${DEP3NAM}"_*.deb data.tar.gz | tar zx -C . echo "PACKAGE NAME: $DEP2NAM-$DEP2VER-$ARCH" > "$PKGINFO/$DEP2NAM-$DEP2VER-$ARCH" cat >> "$PKGINFO/$DEP2NAM-$DEP2VER-$ARCH" << EOM PACKAGE DESCRIPTION: cnrdrvcups-ufr2-uk: CUPS Canon UFR II LIPSLX CARPS2 printer driver for LBP iR MF cnrdrvcups-ufr2-uk: ImageCLASS ImageRUNNER Laser Shot i-SENSYS ImagePRESS ADVANCE cnrdrvcups-ufr2-uk: printers and copiers FILE LIST: EOM echo "PACKAGE NAME: $DEP3NAM-$DEP3VER-$ARCH" > "$PKGINFO/$DEP3NAM-$DEP3VER-$ARCH" cat >> "$PKGINFO/$DEP3NAM-$DEP3VER-$ARCH" << EOM PACKAGE DESCRIPTION: cnrdrvcups-ufr2lt-uk: Canon UFRII LT Printer Driver for Linux cnrdrvcups-ufr2lt-uk: (LBP112/912, LBP113/913, LBP151dw, LBP6030/LBP6040/LBP6018L, cnrdrvcups-ufr2lt-uk: LBP6230/LBP6240, LBP7100C/LBP7110C, LBP8100) FILE LIST: EOM rm -rf "$PKG/$DEP1NAM-$DEP1VER" "$PKG"/linux-UFRII-drv-v* "$PKG"/linux-UFRIILT-drv-v* "$PKG"/*.deb rm -rf "$PKG/usr/include" "$PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig" "$PKG/usr/share/locale" rm -f "$PKG/usr/bin/"{cnsetuputil2,cnsetuputil2l} "$PKG/usr/share/applications/"{cnsetuputil.desktop,cnsetuputil2l.desktop} rm -rf "$PKG/usr/share/"{cnsetuputil2,cnsetuputil2l,doc,man} find "$PKG/usr/lib/Canon/CUPS_SFPR/Utilities/Message" -mindepth 1 -maxdepth 1 -type d ! -name 'Message' ! -name 'en_US' -exec rm -rf {} + 2>/dev/null || true if [[ "$ARCH" == x86_64 ]]; then if [ -d "$PKG/usr/lib" ]; then cp -r "$PKG/usr/lib/"* "$PKG/usr/lib64/" rm -rf "$PKG/usr/lib" fi fi # Set correct ownership and permissions for CUPS backends and filters for libdir in "$PKG/usr/lib" "$PKG/usr/lib64"; do if [ -d "$libdir/cups/backend" ]; then find "$libdir/cups/backend" -type f -exec chown root:lp {} \; -exec chmod 0700 {} \; 2>/dev/null fi if [ -d "$libdir/cups/filter" ]; then find "$libdir/cups/filter" -type f -exec chown root:lp {} \; -exec chmod 0755 {} \; 2>/dev/null fi done # Strip ELF binaries and shared libraries to reduce module size find "$PKG/usr/lib" "$PKG/usr/lib64" -type f -name "*.so*" -exec strip --strip-unneeded {} \; 2>/dev/null find "$PKG/usr/bin" "$PKG/usr/sbin" -type f -exec strip --strip-unneeded {} \; 2>/dev/null dir2xzm "$PKG" "$OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD.xzm" if [ -f "$OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.xzm" ]; then echo -e "\n${BOLD}Your $PRGNAM module is at: ${GREEN}${BOLD}$OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD.xzm${RESET}\n${BOLD}Please copy it to your modules folder to survive a reboot.${RESET}" else echo -e "\n${RED}${BOLD}Failed. Your $PRGNAM module is not built.${RESET}\n" fi cleanup ;; 2|Epson|epson) echo -e "\n${BOLD}Epson${RESET} chosen. Downloading:" PRGNAM=${PRGNAM:-epson} PNAM=${PNAM:-epson-inkjet-printer-escpr} PNAM2=${PNAM2:-epson-inkjet-printer-escpr2} PKG=${TMPDIR}/package-${PRGNAM} PKGINFO=${PKG}/var/lib/pkgtools/packages SLACKESCPR=$(lynx --source https://slackbuilds.org/slackbuilds/15.0/system/epson-inkjet-printer-escpr/epson-inkjet-printer-escpr.info | grep -i version | cut -d'"' -f2) ARCHESCPR=$(lynx --source https://aur.archlinux.org/packages/epson-inkjet-printer-escpr | grep "Details" | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+") SLACKESCPR2=$(lynx --source https://slackbuilds.org/slackbuilds/15.0/system/epson-inkjet-printer-escpr2/epson-inkjet-printer-escpr2.info | grep -i version | cut -d'"' -f2) ARCHESCPR2=$(lynx --source https://aur.archlinux.org/packages/epson-inkjet-printer-escpr2 | grep "Details" | grep -Eo "[0-9]+\.[0-9]+\.[0-9]{2}") SOURCE1=$(echo "https://slackbuilds.org/slackbuilds/15.0/system/epson-inkjet-printer-escpr.tar.gz") SOURCE2=$(lynx --source https://aur.archlinux.org/packages/epson-inkjet-printer-escpr | grep -Eo "]+") SOURCE3=$(echo "https://slackbuilds.org/slackbuilds/15.0/system/epson-inkjet-printer-escpr2.tar.gz") SOURCE4=$(lynx --source https://slackbuilds.org/repository/15.0/system/epson-inkjet-printer-escpr2/ | grep ".src.rpm" | cut -d'"' -f2) rm -rf "$PKG" find "${OUTPUT}" -maxdepth 1 -type f \( -name "*.tgz" -o -name "*.txz" \) -delete mkdir -p "$TMPDIR" "$PKG" cd "$PKG" || exit 1 getmod -q cups activate "$OUTPUT"/cups-*.xzm wget -q --show-progress "$SOURCE1" tar -xf "$PNAM.tar.gz" && rm -f "$PNAM.tar.gz" && cd "$PNAM" || exit 1 wget -q --show-progress "$SOURCE2" rpm2cpio "$PNAM"-*.src.rpm | cpio -idmv >/dev/null && rm -f "$PNAM"-*.src.rpm sed -i "s|$SLACKESCPR|$ARCHESCPR|" "$PNAM.SlackBuild" sed -i "s|1lsb3.2|1|" "$PNAM.SlackBuild" sed -i "s|-mtune=i686|-mtune=i686 -Wno-implicit-function-declaration|g" "$PNAM.SlackBuild" sed -i "s|-fPIC|-fPIC -Wno-implicit-function-declaration|" "$PNAM.SlackBuild" ./"$PNAM.SlackBuild" cd "$PKG" && rm -rf "$PNAM" wget -q --show-progress "$SOURCE3" tar -xf "$PNAM2.tar.gz" && rm -f "$PNAM2.tar.gz" && cd "$PNAM2" || exit 1 wget -q --show-progress "$SOURCE4" sed -i "s|-mtune=i686|-mtune=i686 -Wno-implicit-function-declaration|g" "$PNAM2.SlackBuild" sed -i "s|-fPIC|-fPIC -Wno-implicit-function-declaration|g" "$PNAM2.SlackBuild" ./"$PNAM2.SlackBuild" cd "$PKG" && rm -rf "$PNAM2" find "${OUTPUT}" -maxdepth 1 -type f -name "*.tgz" -print0 | while IFS= read -r -d '' i; do ROOT="$PKG" installpkg "$i" >/dev/null done deactivate "$OUTPUT"/cups-*.xzm rm -rf "$PKG/usr/doc" "$PKG/var/lib/pkgtools/scripts" find "${OUTPUT}" -maxdepth 1 -type f \( -name "*.tgz" -o -name "*.txz" -o -name "*.xzm" \) -delete # Set correct ownership and permissions for CUPS backends and filters for libdir in "$PKG/usr/lib" "$PKG/usr/lib64"; do if [ -d "$libdir/cups/backend" ]; then find "$libdir/cups/backend" -type f -exec chown root:lp {} \; -exec chmod 0700 {} \; 2>/dev/null fi if [ -d "$libdir/cups/filter" ]; then find "$libdir/cups/filter" -type f -exec chown root:lp {} \; -exec chmod 0755 {} \; 2>/dev/null fi done # Strip ELF binaries and shared libraries to reduce module size find "$PKG/usr/lib" "$PKG/usr/lib64" -type f -name "*.so*" -exec strip --strip-unneeded {} \; 2>/dev/null find "$PKG/usr/bin" "$PKG/usr/sbin" -type f -exec strip --strip-unneeded {} \; 2>/dev/null dir2xzm "$PKG" "$OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD.xzm" if [ -f "$OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.xzm" ]; then echo -e "\n${BOLD}Your $PRGNAM module is at: ${GREEN}${BOLD}$OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD.xzm${RESET}\n${BOLD}Please copy it to your modules folder to survive a reboot.${RESET}" else echo -e "\n${RED}${BOLD}Failed. Your $PRGNAM module is not built.${RESET}\n" fi cleanup ;; 3|HP|hp) echo -e "\n${BOLD}HP${RESET} chosen. Downloading:" PRGNAM=${PRGNAM:-hp} UAGENT=$(echo 'Mozilla/5.0 (X11; Porteus Lynx; Linux x86_64; rv:139.0)') SLACKVER=$(lynx --source https://slackbuilds.org/slackbuilds/15.0/system/hplip-plugin/hplip-plugin.info | grep -i version | cut -d'"' -f2) PLUGVER=$(lynx -useragent="$UAGENT" --source https://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/ | grep -oP 'hplip-\K[0-9.]+(?=-plugin.run)' | sort -V | tail -n1) PKG=${TMPDIR}/package-${PRGNAM} PKGINFO=${PKG}/var/lib/pkgtools/packages SOURCE=$(echo "https://slackbuilds.org/slackbuilds/15.0/system/hplip-plugin.tar.gz") rm -rf "$PKG" find "${OUTPUT}" -maxdepth 1 -type f \( -name "*.tgz" -o -name "*.txz" \) -delete mkdir -p "$TMPDIR" "$PKG" cd "$PKG" || exit 1 getpkg -q hplip net-snmp wget -q "$SOURCE" tar xf hplip-plugin.tar.gz && rm -f hplip-plugin.tar.gz cd hplip-plugin || exit 1 sed -i "s|$SLACKVER|$PLUGVER|" hplip-plugin.SlackBuild wget -q --show-progress --user-agent="$UAGENT" "https://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/hplip-${PLUGVER}-plugin.run" ./hplip-plugin.SlackBuild cd "$PKG" && rm -rf hplip-plugin find "${OUTPUT}" -maxdepth 1 -type f -name "*.txz" -print0 | while IFS= read -r -d '' i; do ROOT="${PKG}" installpkg "${i}" >/dev/null; done find "${OUTPUT}" -maxdepth 1 -type f -name "*.tgz" -print0 | while IFS= read -r -d '' i; do ROOT="${PKG}" installpkg "${i}" >/dev/null; done rm -rf "$PKG/usr/doc" "$PKG/usr/lib/systemd" "$PKG/usr/man" "${PKG}/usr/share/applications" "${PKG}/usr/share/hplip/data/"{images,localization} "$PKG/var/lib/pkgtools/scripts" rm -f "${PKG}/etc/xdg/autostart/hplip-systray.desktop" find "${PKG}" -type f \( -name "*.la" -o -name "*.a" -o -name "*.h" -o -iname "README*" -o -iname "LICENSE*" \) -delete find "${OUTPUT}" -maxdepth 1 -type f \( -name "*.tgz" -o -name "*.txz" \) -delete # Set correct ownership and permissions for CUPS backends and filters for libdir in "$PKG/usr/lib" "$PKG/usr/lib64"; do if [ -d "$libdir/cups/backend" ]; then find "$libdir/cups/backend" -type f -exec chown root:lp {} \; -exec chmod 0700 {} \; 2>/dev/null fi if [ -d "$libdir/cups/filter" ]; then find "$libdir/cups/filter" -type f -exec chown root:lp {} \; -exec chmod 0755 {} \; 2>/dev/null fi done # Strip ELF binaries and shared libraries to reduce module size find "$PKG/usr/lib" "$PKG/usr/lib64" -type f -name "*.so*" -exec strip --strip-unneeded {} \; 2>/dev/null find "$PKG/usr/bin" "$PKG/usr/sbin" -type f -exec strip --strip-unneeded {} \; 2>/dev/null dir2xzm "$PKG" "$OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD.xzm" if [ -f "$OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.xzm" ]; then echo -e "\n${BOLD}Your $PRGNAM module is at: ${GREEN}${BOLD}$OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD.xzm${RESET}\n${BOLD}Please copy it to your modules folder to survive a reboot.${RESET}" else echo -e "\n${RED}${BOLD}Failed. Your $PRGNAM module is not built.${RESET}\n" fi cleanup ;; 4|Pantum|pantum) echo -e "\n${BOLD}Pantum${RESET} chosen. Downloading:" PRGNAM=${PRGNAM:-pantum} PANVER=$(lynx -head -dump "https://github.com/ArticExploit/pantum-driver/releases/latest" | grep Location | grep -o "[0-9].*$" | tr -d '\r') PKG=${TMPDIR}/package-${PRGNAM} PKGINFO=${PKG}/var/lib/pkgtools/packages SOURCE=$(lynx --source https://aur.archlinux.org/packages/pantum-driver | grep -Eo "]+") rm -rf "$PKG" find "${OUTPUT}" -maxdepth 1 -type f \( -name "*.tgz" -o -name "*.txz" \) -delete mkdir -p "$TMPDIR" "$PKG" cd "${OUTPUT}" || exit 1 wget -q --show-progress -P "${OUTPUT}" "$SOURCE" unzip -q -d "${OUTPUT}" "Pantum.Ubuntu.Driver*.zip" rm -f "${OUTPUT}"/Pantum.Ubuntu.Driver*.zip PANTUM_DIR=$(find "${OUTPUT}" -maxdepth 1 -type d -name "Pantum Ubuntu Driver V*" | head -n 1) if [ -z "$PANTUM_DIR" ]; then echo -e "\n${RED}${BOLD}Failed to find Pantum driver directory. Check the downloaded archive name.${RESET}\n" cleanup fi cd "${PANTUM_DIR}/Resources" || exit 1 if [[ "$ARCH" == i686 || "$ARCH" == i586 ]]; then mkdir -p "pantum-${PANVER}-i386" cd "pantum-${PANVER}-i386" || exit 1 ar p "../pantum_${PANVER}-1_i386.deb" data.tar.xz | tar xJ cd usr/lib || exit 1 cp -a i386-linux-gnu/* . rm -r *-linux-gnu* cd ../.. rm -rf usr/local cp -a "${OUTPUT}/Pantum Ubuntu Driver V${PANVER}/Resources/pantum-${PANVER}-i386" "$PKG" cp -a "$PKG/pantum-${PANVER}-i386/"* "$PKG/" elif [[ "$ARCH" == x86_64 ]]; then mkdir -p "pantum-${PANVER}-${ARCH}" cd "pantum-${PANVER}-${ARCH}" || exit 1 ar p "../pantum_${PANVER}-1_amd64.deb" data.tar.xz | tar xJ cd usr/lib || exit 1 mv x86_64-linux-gnu ../lib64 cp -a cups ../lib64 cd ../.. rm -rf usr/local usr/lib cp -a "${OUTPUT}/Pantum Ubuntu Driver V${PANVER}/Resources/pantum-${PANVER}-${ARCH}" "$PKG" cp -a "$PKG/pantum-${PANVER}-${ARCH}/"* "$PKG/" fi rm -rf "${OUTPUT}/Pantum Ubuntu Driver V${PANVER}" "$PKG/pantum-${PANVER}-${ARCH}" "${PKG}/usr/share/doc" cd "$PKG" || exit 1 ln -s "/usr/lib${LIBDIRSUFFIX}/libjpeg.so.62" "$PKG/usr/lib${LIBDIRSUFFIX}/libjpeg.so.8" mkdir -p "$PKGINFO" echo "PACKAGE NAME: $PRGNAM-$PANVER-$ARCH" > "$PKGINFO/$PRGNAM-$PANVER-$ARCH" cat >> "$PKGINFO/$PRGNAM-$PANVER-$ARCH" << EOM PACKAGE DESCRIPTION: pantum: Linux driver for Pantum printers FILE LIST: EOM find . | grep -v var >> "$PKGINFO/$PRGNAM-$PANVER-$ARCH" # Set correct ownership and permissions for CUPS backends and filters for libdir in "$PKG/usr/lib" "$PKG/usr/lib64"; do if [ -d "$libdir/cups/backend" ]; then find "$libdir/cups/backend" -type f -exec chown root:lp {} \; -exec chmod 0700 {} \; 2>/dev/null fi if [ -d "$libdir/cups/filter" ]; then find "$libdir/cups/filter" -type f -exec chown root:lp {} \; -exec chmod 0755 {} \; 2>/dev/null fi done # Strip ELF binaries and shared libraries to reduce module size find "$PKG/usr/lib" "$PKG/usr/lib64" -type f -name "*.so*" -exec strip --strip-unneeded {} \; 2>/dev/null find "$PKG/usr/bin" "$PKG/usr/sbin" -type f -exec strip --strip-unneeded {} \; 2>/dev/null dir2xzm "$PKG" "$OUTPUT/$PRGNAM-$PANVER-$ARCH-$BUILD.xzm" if [ -f "$OUTPUT/${PRGNAM}-${PANVER}-${ARCH}-${BUILD}.xzm" ]; then echo -e "\n${BOLD}Your $PRGNAM module is at: ${GREEN}${BOLD}$OUTPUT/$PRGNAM-$PANVER-$ARCH-$BUILD.xzm${RESET}\n${BOLD}Please copy it to your modules folder to survive a reboot.${RESET}" else echo -e "\n${RED}${BOLD}Failed. Your $PRGNAM module is not built.${RESET}\n" fi cleanup ;; 5|Samsung|samsung) echo -e "\n${BOLD}Samsung${RESET} chosen. Downloading:" PRGNAM=${PRGNAM:-samsung-unified-driver} VERSION=V1.00.39 PKG=${TMPDIR}/package-${PRGNAM} PKGINFO=${PKG}/var/lib/pkgtools/packages SOURCE1=$(echo "http://downloadcenter.samsung.com/content/DR/201704/20170407143829533/uld_V1.00.39_01.17.tar.gz") SOURCE2=$(echo "https://aur.archlinux.org/cgit/aur.git/plain/xerox_mfp-smfp.conf?h=samsung-unified-driver") rm -rf "$PKG" find "${OUTPUT}" -maxdepth 1 -type f \( -name "*.tgz" -o -name "*.txz" \) -delete mkdir -p "$TMPDIR" "$PKG" cd "$OUTPUT" || exit 1 wget -q --show-progress -P "${OUTPUT}" "$SOURCE1" tar -xf uld_${VERSION}_*.tar.gz && rm -f uld_${VERSION}_*.tar.gz if [ "$ARCH" = "i586" ] || [ "$ARCH" = "i686" ]; then mkdir -p "$PKG/usr/lib" "$PKG/usr/lib/cups/backend" "$PKG/usr/lib/cups/filter" "$PKG/usr/share/ppd/suld" "$PKG/usr/share/ppd/suld/cms" cp "$OUTPUT/uld/i386/libscmssc.so" "$PKG/usr/lib/" cp "$OUTPUT/uld/i386/smfpnetdiscovery" "$PKG/usr/lib/cups/backend/" cp "$OUTPUT/uld/i386/pstosecps" "$PKG/usr/lib/cups/filter/" cp "$OUTPUT/uld/i386/rastertospl" "$PKG/usr/lib/cups/filter/" ln -s rastertospl "$PKG/usr/lib/cups/filter/rastertosplc" for ppd in "$OUTPUT"/uld/noarch/share/ppd/*.ppd; do gzip < "$ppd" > "$PKG/usr/share/ppd/suld/${ppd##*/}.gz" done for cts in "$OUTPUT"/uld/noarch/share/ppd/cms/*.cts; do cp "$cts" "$PKG/usr/share/ppd/suld/cms/" done fi if [ "$ARCH" = "x86_64" ]; then mkdir -p "$PKG/usr/lib64" "$PKG/usr/lib64/cups/backend" "$PKG/usr/lib64/cups/filter" "$PKG/usr/share/ppd/suld" "$PKG/usr/share/ppd/suld/cms" cp "$OUTPUT/uld/x86_64/libscmssc.so" "$PKG/usr/lib64/" cp "$OUTPUT/uld/x86_64/smfpnetdiscovery" "$PKG/usr/lib64/cups/backend/" cp "$OUTPUT/uld/x86_64/pstosecps" "$PKG/usr/lib64/cups/filter/" cp "$OUTPUT/uld/x86_64/rastertospl" "$PKG/usr/lib64/cups/filter/" ln -s rastertospl "$PKG/usr/lib64/cups/filter/rastertosplc" for ppd in "$OUTPUT"/uld/noarch/share/ppd/*.ppd; do gzip < "$ppd" > "$PKG/usr/share/ppd/suld/${ppd##*/}.gz" done for cts in "$OUTPUT"/uld/noarch/share/ppd/cms/*.cts; do cp "$cts" "$PKG/usr/share/ppd/suld/cms/" done fi if [ "$ARCH" = "i586" ] || [ "$ARCH" = "i686" ]; then mkdir -p "$PKG/etc/sane.d" "$PKG/etc/sane.d/dll.d" "$PKG/usr/lib/sane" "$PKG/etc/udev/rules.d" "$PKG/opt/samsung/scanner/share" lynx --source "$SOURCE2" > "$OUTPUT/xerox_mfp-smfp.conf" cp "$OUTPUT/uld/noarch/etc/smfp.conf" "$OUTPUT/xerox_mfp-smfp.conf" "$PKG/etc/sane.d/" echo smfp > "$PKG/etc/sane.d/dll.d/smfp-scanner" echo xerox_mfp-smfp > "$PKG/etc/sane.d/dll.d/smfp-scanner-fix" cp "$OUTPUT/uld/i386/libsane-smfp.so.1.0.1" "$PKG/usr/lib/sane/" ln -s libsane-smfp.so.1.0.1 "$PKG/usr/lib/sane/libsane-smfp.so.1" ln -s libsane-smfp.so.1 "$PKG/usr/lib/sane/libsane-smfp.so" ( OEM_FILE="$OUTPUT/uld/noarch/oem.conf" INSTALL_LOG_FILE=/dev/null source "$OUTPUT/uld/noarch/scripting_utils" source "$OUTPUT/uld/noarch/package_utils" source "$OUTPUT/uld/noarch/scanner-script.pkg" fill_full_template "$OUTPUT/uld/noarch/etc/smfp.rules.in" "$PKG/etc/udev/rules.d/60_smfp_samsung.rules" chmod 644 "$PKG/etc/udev/rules.d/60_smfp_samsung.rules" cp "$OEM_FILE" "$PKG/opt/samsung/scanner/share/" ) fi if [ "$ARCH" = "x86_64" ]; then mkdir -p "$PKG/etc/sane.d" "$PKG/etc/sane.d/dll.d" "$PKG/usr/lib64/sane" "$PKG/etc/udev/rules.d" "$PKG/opt/samsung/scanner/share" lynx --source "$SOURCE2" > "$OUTPUT/xerox_mfp-smfp.conf" cp "$OUTPUT/uld/noarch/etc/smfp.conf" "$OUTPUT/xerox_mfp-smfp.conf" "$PKG/etc/sane.d/" echo smfp > "$PKG/etc/sane.d/dll.d/smfp-scanner" echo xerox_mfp-smfp > "$PKG/etc/sane.d/dll.d/smfp-scanner-fix" cp "$OUTPUT/uld/x86_64/libsane-smfp.so.1.0.1" "$PKG/usr/lib64/sane/" ln -s libsane-smfp.so.1.0.1 "$PKG/usr/lib64/sane/libsane-smfp.so.1" ln -s libsane-smfp.so.1 "$PKG/usr/lib64/sane/libsane-smfp.so" ( OEM_FILE="$OUTPUT/uld/noarch/oem.conf" INSTALL_LOG_FILE=/dev/null source "$OUTPUT/uld/noarch/scripting_utils" source "$OUTPUT/uld/noarch/package_utils" source "$OUTPUT/uld/noarch/scanner-script.pkg" fill_full_template "$OUTPUT/uld/noarch/etc/smfp.rules.in" "$PKG/etc/udev/rules.d/60_smfp_samsung.rules" chmod 644 "$PKG/etc/udev/rules.d/60_smfp_samsung.rules" cp "$OEM_FILE" "$PKG/opt/samsung/scanner/share/" ) fi rm -rf "$OUTPUT/uld" "$OUTPUT/xerox_mfp-smfp.conf" cd "$PKG" || exit 1 mkdir -p "$PKGINFO" echo "PACKAGE NAME: $PRGNAM-$VERSION-$ARCH" > "$PKGINFO/$PRGNAM-$VERSION-$ARCH" cat >> "$PKGINFO/$PRGNAM-$VERSION-$ARCH" << EOM PACKAGE DESCRIPTION: samsung-unified-driver: Samsung Unified Linux Driver for printers and scanners. samsung-unified-driver: samsung-unified-driver: http://www.samsung.com/ samsung-unified-driver: FILE LIST: EOM find . | grep -v var >> "$PKGINFO/$PRGNAM-$VERSION-$ARCH" # Set correct ownership and permissions for CUPS backends and filters for libdir in "$PKG/usr/lib" "$PKG/usr/lib64"; do if [ -d "$libdir/cups/backend" ]; then find "$libdir/cups/backend" -type f -exec chown root:lp {} \; -exec chmod 0700 {} \; 2>/dev/null fi if [ -d "$libdir/cups/filter" ]; then find "$libdir/cups/filter" -type f -exec chown root:lp {} \; -exec chmod 0755 {} \; 2>/dev/null fi done # Strip ELF binaries and shared libraries to reduce module size find "$PKG/usr/lib" "$PKG/usr/lib64" -type f -name "*.so*" -exec strip --strip-unneeded {} \; 2>/dev/null find "$PKG/usr/bin" "$PKG/usr/sbin" -type f -exec strip --strip-unneeded {} \; 2>/dev/null dir2xzm "$PKG" "$OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD.xzm" if [ -f "$OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.xzm" ]; then echo -e "\n${BOLD}Your $PRGNAM module is at: ${GREEN}${BOLD}$OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD.xzm${RESET}\n${BOLD}Please copy it to your modules folder to survive a reboot.${RESET}" else echo -e "\n${RED}${BOLD}Failed. Your $PRGNAM module is not built.${RESET}\n" fi cleanup ;; *) echo "Sorry, but your model of printer is not in the list." exit 0 ;; esac