#!/bin/sh # gfs (gnome from scratch) system build # # Copyright 2016-2021 Rafael Tavares # 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. GFSVERSION=0.2.9 GFSSOURCEDIR=./source GFSCWD=$(pwd) OUTPUT=/tmp GFSEDITOR=nano set -e cd $GFSSOURCEDIR PKGREQ=$(echo $2 | cut -f1 -d'/') PKGREQ2=$(echo $1 | cut -f1 -d'/') FINDREQ=${FINDREQ:-$(find $OUTPUT -maxdepth 1 -name $PKGREQ-[0-9]*.txz)} LOGREQ=${LOGREQ:-$(find /var/lib/pkgtools/packages -maxdepth 1 -name $PKGREQ-[0-9]* | cut -f1 -d" ")} gfstalk() { if [ -z "$1" ]; then echo -e " -| \033[1m$(basename $0)\033[0m:" else echo -e " -| \033[1m$(basename $0)\033[0m: $1" fi } edit() { if [ -z "$PKGREQ" ]; then gfstalk "usage:" gfstalk " $(basename $0) edit 'ProgramName'" exit 1 else if [ -f "$PKGREQ/$PKGREQ.SlackBuild" ]; then cd "$PKGREQ" $GFSEDITOR "$PKGREQ".SlackBuild cd .. else gfstalk "'$PKGREQ' SlackBuild script not found!" exit 1 fi fi } build() { if [ -z "$PKGREQ" ]; then gfstalk "usage:" gfstalk " $(basename $0) build 'ProgramName'" exit 1 else if [ -f "$PKGREQ/$PKGREQ.SlackBuild" ]; then cd "$PKGREQ" OUTPUT=$OUTPUT sh "$PKGREQ".SlackBuild || exit 1 cd .. else gfstalk "'$PKGREQ' SlackBuild script not found!" exit 1 fi fi } installpkg() { if [ -z "$PKGREQ" ]; then gfstalk "usage:" gfstalk " $(basename $0) install 'ProgramName'" exit 1 else if [ -z "$FINDREQ" ]; then gfstalk "$PKGREQ package not found!" exit 1 else upgradepkg --install-new --reinstall "$FINDREQ" exit 0 fi fi } prepare() { if [ -z "$PKGREQ" ]; then gfstalk "usage:" gfstalk " $(basename $0) prepare 'ProgramName'" exit 1 else edit || exit 1 build || exit 1 unset FINDREQ FINDREQ=${FINDREQ:-$(find $OUTPUT -maxdepth 1 -name $PKGREQ-[0-9]*.txz)} installpkg || exit 1 fi } catlog() { if [ -z "$PKGREQ" ]; then gfstalk "usage:" gfstalk " $(basename $0) prepare 'ProgramName'" exit 1 else if [ -z "$LOGREQ" ]; then gfstalk "required log not found!" exit 1 else cat "$LOGREQ" | less fi fi } newtemplate() { if [ -z "$PKGREQ" ]; then gfstalk "usage:" gfstalk " $(basename $0) new 'ProgramName'" else if [ -d "$PKGREQ" ]; then gfstalk "this directory already exist!" exit 1 else mkdir -p "$PKGREQ" || exit 1 cp template.SlackBuild "$PKGREQ"/"$PKGREQ".SlackBuild || exit 1 edit || exit 1 build || exit 1 unset FINDREQ FINDREQ=${FINDREQ:-$(find $OUTPUT -maxdepth 1 -name $PKGREQ-[0-9]*.txz)} installpkg || exit 1 fi fi } makegfspkg() { cd $GFSCWD mkdir -p pkg/opt/gfs mv TODO gfs README.md source pkg/opt/gfs/ cd pkg mkdir -p usr/sbin ln -s /opt/gfs/gfs usr/sbin/gfs mkdir -p install # |-----handy-ruler------------------------------------------------------| cat <install/slack-desc slackport-gfs: slackport-gfs: GNOME From Scratch (gfs) System Builder slackport-gfs: slackport-gfs: This package contains SlackBuild scripts needed to build the GNOME slackport-gfs: for Slackware. The gfs is an executable script responsible for build slackport-gfs: and install the packages in pre-set order. In addition, gfs works as slackport-gfs: a tool for editing, building and install pacakges in a more practical slackport-gfs: and automated way. slackport-gfs: slackport-gfs: https://github.com/slackport/gfs slackport-gfs: EOT makepkg -l y -c n $OUTPUT/slackport-gfs-$GFSVERSION-x86_64-1_gfs.txz cd .. rm -rf pkg/ } gfsversion() { gfstalk "$GFSVERSION" } gfshelp() { cat < # Thanks a lot! checkusers() { if ! grep -q "^avahi:" /etc/group then subject=group name=Avahi message groupadd -g 214 avahi fi if ! grep -q "^avahi:" /etc/passwd then subject=user name=Avahi message useradd -u 214 -g 214 -c "Avahi User" -d /dev/null -s /bin/false avahi fi if ! getent group colord 2>/dev/null 1>/dev/null then subject=group name=colord message groupadd -g 303 colord fi if ! getent passwd colord 2>/dev/null 1>/dev/null then subject=user name=colord message useradd -d /var/lib/colord -u 303 -g colord -s /bin/false colord fi if ! getent group sanlock 2>/dev/null 1>/dev/null then subject=group name=sanlock message groupadd -g 363 sanlock fi if ! getent passwd sanlock 2>/dev/null 1>/dev/null then subject=user name=sanlock message useradd -u 363 -d /var/run/sanlock -s /bin/false -g sanlock sanlock fi if ! getent group disk | grep -q sanlock then subject=user name=sanlock gfstalk "I need to add $subject $name on disk group." gfstalk "Is that allright with you ?" gfstalk "yes / no" read reply case $reply in "yes") gfstalk "Adding $subject $name" && usermod -a -G disk sanlock ;; "no") gfstalk "Not adding $subject $name" && exit $? ;; esac fi if ! getent group rabbitmq 2>/dev/null 1>/dev/null then subject=group name=rabbitmq message groupadd -g 319 rabbitmq fi if ! getent passwd rabbitmq 2>/dev/null 1>/dev/null then subject=user name=rabbitmq message useradd -u 319 -g 319 -c "Rabbit MQ" -d /var/lib/rabbitmq -s /bin/sh rabbitmq fi } checkusers REBUILDFLATPAK=${REBUILDFLATPAK:-"no"} for buildpkg in "${PKGBUILD[@]}"; do if [ -z "$(ls /var/log/packages | grep ^$buildpkg-[0-9] | grep _gfs)" ]; then gfstalk "Building $buildpkg..." sleep 1 cd $buildpkg OUTPUT=$OUTPUT sh $buildpkg.SlackBuild gfstalk "$buildpkg builded! Installing..." sleep 1 PKGINST=${BUILDPKG:-"$(ls $OUTPUT | grep ^$buildpkg-[0-9] | grep _gfs)"} upgradepkg --install-new --reinstall $OUTPUT/$PKGINST cd .. elif [ "$buildpkg" == "flatpak" ]; then if [ "$REBUILDFLATPAK" == "yes" ]; then if [ -z "$(ls /var/log/packages | grep ^malcontent-[0-9] | grep _gfs)" ]; then gfstalk "Building flatpak first time..." sleep 1 cd flatpak OUTPUT=$OUTPUT sh flatpak.SlackBuild gfstalk "flatpak builded! Installing..." sleep 1 PKGINST=${BUILDPKG:-"$(ls $OUTPUT | grep ^flatpak-[0-9] | grep _gfs)"} upgradepkg --install-new --reinstall $OUTPUT/$PKGINST rm $OUTPUT/$PKGINST cd ../malcontent gfstalk "Building malcontent..." sleep 1 OUTPUT=$OUTPUT sh malcontent.SlackBuild unset PKGINST PKGINST=${BUILDPKG:-"$(ls $OUTPUT | grep ^malcontent-[0-9] | grep _gfs)"} upgradepkg --install-new --reinstall $OUTPUT/$PKGINST cd ../flatpak gfstalk "Building flatpak again..." sleep 1 OUTPUT=$OUTPUT sh flatpak.SlackBuild gfstalk "flatpak builded again! Installing..." sleep 1 unset PKGINST PKGINST=${BUILDPKG:-"$(ls $OUTPUT | grep ^flatpak-[0-9] | grep _gfs)"} upgradepkg --install-new --reinstall $OUTPUT/$PKGINST cd .. else gfstalk "malcontent already installed... rebuilding flatpak" sleep 1 cd flatpak OUTPUT=$OUTPUT sh flatpak.SlackBuild gfstalk "flatpak builded again! Installing..." sleep 1 unset PKGINST PKGINST=${BUILDPKG:-"$(ls $OUTPUT | grep ^flatpak-[0-9] | grep _gfs)"} upgradepkg --install-new --reinstall $OUTPUT/$PKGINST cd .. fi else if [ -z "$(ls /var/log/packages | grep ^malcontent-[0-9] | grep _gfs)" ]; then gfstalk "Building malcontent..." sleep 1 cd malcontent OUTPUT=$OUTPUT sh malcontent.SlackBuild unset PKGINST PKGINST=${BUILDPKG:-"$(ls $OUTPUT | grep ^malcontent-[0-9] | grep _gfs)"} upgradepkg --install-new --reinstall $OUTPUT/$PKGINST cd .. else gfstalk "malcontent already installed!" fi fi else gfstalk "$buildpkg is already installed!" fi done gfstalk gfstalk "All done!" gfstalk "--------"