Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions autosetup/autosetup_apparmor.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/sh -e

source "$(dirname "$0")/common-script.sh"

if [ -f /etc/apparmor.d/local/usr.sbin.smbd ]; then
"$ESCALATION_TOOL" tee /etc/apparmor.d/local/usr.sbin.smbd << 'EOF'
/shared/ lrwk,
/shared/** lrwk,
EOF
"$ESCALATION_TOOL" apparmor_parser -r /etc/apparmor.d/usr.sbin.smbd
printf "%b\n" "${GREEN}SMBD Apparmor profile modified!${RC}"
fi
95 changes: 95 additions & 0 deletions autosetup/autosetup_docker.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
#!/bin/sh -e

[ -z $1 ] && echo "Missing user argument" && exit 1

source "$(dirname "$0")/common-script.sh"
source "$(dirname "$0")/common-service-script.sh"
USERNAME=$1

install_docker() {
printf "%b\n" "${YELLOW}Installing Docker...${RC}"
case "$PACKAGER" in
apt-get|nala)
curl -fsSL https://get.docker.com | sh
;;
dnf)
"$ESCALATION_TOOL" "$PACKAGER" -y install dnf-plugins-core
dnf_version=$(dnf --version | head -n 1 | cut -d '.' -f 1)
if [ "$dnf_version" -eq 4 ]; then
"$ESCALATION_TOOL" "$PACKAGER" config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
else
"$ESCALATION_TOOL" "$PACKAGER" config-manager addrepo --from-repofile=https://download.docker.com/linux/fedora/docker-ce.repo
fi
"$ESCALATION_TOOL" "$PACKAGER" -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
"$ESCALATION_TOOL" systemctl enable --now docker
;;
zypper|eopkg)
"$ESCALATION_TOOL" "$PACKAGER" install -y docker
;;
pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --noconfirm docker
;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add docker
;;
xbps-install)
"$ESCALATION_TOOL" "$PACKAGER" -Sy docker
;;
*)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1
;;
esac

startAndEnableService docker
}

install_docker_compose() {
printf "%b\n" "${YELLOW}Installing Docker Compose...${RC}"
case "$PACKAGER" in
apt-get|nala)
"$ESCALATION_TOOL" "$PACKAGER" install -y docker-compose-plugin
;;
dnf)
"$ESCALATION_TOOL" "$PACKAGER" -y install dnf-plugins-core
dnf_version=$(dnf --version | head -n 1 | cut -d '.' -f 1)
if [ "$dnf_version" -eq 4 ]; then
"$ESCALATION_TOOL" "$PACKAGER" config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
else
"$ESCALATION_TOOL" "$PACKAGER" config-manager addrepo --from-repofile=https://download.docker.com/linux/fedora/docker-ce.repo
fi
"$ESCALATION_TOOL" "$PACKAGER" install -y docker-compose-plugin
;;
zypper|eopkg)
"$ESCALATION_TOOL" "$PACKAGER" install -y docker-compose
;;
pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm docker-compose
;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add docker-cli-compose
;;
xbps-install)
"$ESCALATION_TOOL" "$PACKAGER" -Sy docker-compose
;;
*)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1
;;
esac
}

docker_permission() {
printf "%b\n" "${YELLOW}Adding current user to the docker group...${RC}"
"$ESCALATION_TOOL" usermod -aG docker "$USERNAME"
printf "%b\n" "${GREEN}User $USERNAME added to the docker group successfully.${RC}"
}

checkEnv
checkEscalationTool
install_docker
install_docker_compose
docker_permission

source "$(dirname "$0")/autosetup_freerdp.sh"
source "$(dirname "$0")/autosetup_apparmor.sh"
14 changes: 14 additions & 0 deletions autosetup/autosetup_freerdp.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/sh -e

source "$(dirname "$0")/common-script.sh"

installFreeRdp() {
if ! command_exists xfreerdp && ! command_exists xfreerdp3 && ! flatpak info com.freerdp.FreeRDP >/dev/null 2>&1; then
flatpak install -y --system flathub com.freerdp.FreeRDP
else
printf "%b\n" "${CYAN}FreeRDP is installed${RC}"
fi
}

checkFlatpak
installFreeRdp
77 changes: 77 additions & 0 deletions autosetup/autosetup_podman.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#!/bin/sh -e

source "$(dirname "$0")/common-script.sh"

installPodmanCompose() {
if ! command_exists podman-compose; then
printf "%b\n" "${YELLOW}Installing Podman Compose...${RC}"
case "$PACKAGER" in
apt-get|nala|dnf)
"$ESCALATION_TOOL" "$PACKAGER" install -y podman-compose
;;
pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --noconfirm --needed podman-compose
;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add podman-compose
;;
xbps-install)
"$ESCALATION_TOOL" "$PACKAGER" -Sy podman-compose
;;
zypper)
if [ -e /etc/os-release ]; then
. /etc/os-release
else
. /usr/lib/os-release
fi

if [ "$ID" = "opensuse-leap" ]; then
zypper addrepo https://download.opensuse.org/repositories/devel:languages:python/$VERSION_ID/devel:languages:python.repo
zypper --gpg-auto-import-keys refresh
zypper --gpg-auto-import-keys install -y podman-compose
elif [ "$ID" = "opensuse-tumbleweed" ]; then
"$ESCALATION_TOOL" "$PACKAGER" install -y podman-compose
else
printf "%b\n" "${RED}Unsupported openSUSE distro: ${$ID}${RC}"
exit 1
fi
;;
*)
printf "%b\n" "${RED}Unsupported package manager: ${PACKAGER}${RC}"
exit 1
;;
esac
else
printf "%b\n" "${GREEN}Podman Compose is already installed.${RC}"
fi
}

installPodman() {
if ! command_exists podman; then
printf "%b\n" "${YELLOW}Installing Podman...${RC}"
case "$PACKAGER" in
pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --noconfirm --needed podman
;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add podman
;;
xbps-install)
"$ESCALATION_TOOL" "$PACKAGER" -Sy podman
;;
*)
"$ESCALATION_TOOL" "$PACKAGER" install -y podman
;;
esac
else
printf "%b\n" "${GREEN}Podman is already installed.${RC}"
fi
}

checkEnv
checkEscalationTool
installPodman
installPodmanCompose

source "$(dirname "$0")/autosetup_freerdp.sh"
source "$(dirname "$0")/autosetup_apparmor.sh"
193 changes: 193 additions & 0 deletions autosetup/common-script.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
#!/bin/sh -e

# shellcheck disable=SC2034

RC='\033[0m'
RED='\033[31m'
YELLOW='\033[33m'
CYAN='\033[36m'
GREEN='\033[32m'

command_exists() {
for cmd in "$@"; do
export PATH="$HOME/.local/share/flatpak/exports/bin:/var/lib/flatpak/exports/bin:$PATH"
command -v "$cmd" >/dev/null 2>&1 || return 1
done
return 0
}

checkFlatpak() {
if ! command_exists flatpak; then
printf "%b\n" "${YELLOW}Installing Flatpak...${RC}"
case "$PACKAGER" in
pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm flatpak
;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add flatpak
;;
xbps-install)
"$ESCALATION_TOOL" "$PACKAGER" -Sy flatpak
;;
*)
"$ESCALATION_TOOL" "$PACKAGER" install -y flatpak
;;
esac
printf "%b\n" "${YELLOW}Adding Flathub remote...${RC}"
"$ESCALATION_TOOL" flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
printf "%b\n" "${YELLOW}Applications installed by Flatpak may not appear on your desktop until the user session is restarted...${RC}"
else
if ! flatpak remotes | grep -q "flathub"; then
printf "%b\n" "${YELLOW}Adding Flathub remote...${RC}"
"$ESCALATION_TOOL" flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
else
printf "%b\n" "${CYAN}Flatpak is installed${RC}"
fi
fi
}

checkArch() {
case "$(uname -m)" in
x86_64 | amd64) ARCH="x86_64" ;;
aarch64 | arm64) ARCH="aarch64" ;;
*) printf "%b\n" "${RED}Unsupported architecture: $(uname -m)${RC}" && exit 1 ;;
esac

printf "%b\n" "${CYAN}System architecture: ${ARCH}${RC}"
}

checkAURHelper() {
## Check & Install AUR helper
if [ "$PACKAGER" = "pacman" ]; then
if [ -z "$AUR_HELPER_CHECKED" ]; then
AUR_HELPERS="yay paru"
for helper in ${AUR_HELPERS}; do
if command_exists "${helper}"; then
AUR_HELPER=${helper}
printf "%b\n" "${CYAN}Using ${helper} as AUR helper${RC}"
AUR_HELPER_CHECKED=true
return 0
fi
done

printf "%b\n" "${YELLOW}Installing yay as AUR helper...${RC}"
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm base-devel git
cd /opt && "$ESCALATION_TOOL" git clone https://aur.archlinux.org/yay-bin.git && "$ESCALATION_TOOL" chown -R "$USER":"$USER" ./yay-bin
cd yay-bin && makepkg --noconfirm -si

if command_exists yay; then
AUR_HELPER="yay"
AUR_HELPER_CHECKED=true
else
printf "%b\n" "${RED}Failed to install AUR helper.${RC}"
exit 1
fi
fi
fi
}

checkEscalationTool() {
## Check for escalation tools.
if [ -z "$ESCALATION_TOOL_CHECKED" ]; then
if [ "$(id -u)" = "0" ]; then
ESCALATION_TOOL="eval"
ESCALATION_TOOL_CHECKED=true
printf "%b\n" "${CYAN}Running as root, no escalation needed${RC}"
return 0
fi

ESCALATION_TOOLS='sudo doas'
for tool in ${ESCALATION_TOOLS}; do
if command_exists "${tool}"; then
ESCALATION_TOOL=${tool}
printf "%b\n" "${CYAN}Using ${tool} for privilege escalation${RC}"
ESCALATION_TOOL_CHECKED=true
return 0
fi
done

printf "%b\n" "${RED}Can't find a supported escalation tool${RC}"
exit 1
fi
}

checkCommandRequirements() {
## Check for requirements.
REQUIREMENTS=$1
for req in ${REQUIREMENTS}; do
if ! command_exists "${req}"; then
printf "%b\n" "${RED}To run me, you need: ${REQUIREMENTS}${RC}"
exit 1
fi
done
}

checkPackageManager() {
## Check Package Manager
PACKAGEMANAGER=$1
for pgm in ${PACKAGEMANAGER}; do
if command_exists "${pgm}"; then
PACKAGER=${pgm}
printf "%b\n" "${CYAN}Using ${pgm} as package manager${RC}"
break
fi
done

## Enable apk community packages
if [ "$PACKAGER" = "apk" ] && grep -qE '^#.*community' /etc/apk/repositories; then
"$ESCALATION_TOOL" sed -i '/community/s/^#//' /etc/apk/repositories
"$ESCALATION_TOOL" "$PACKAGER" update
fi

if [ -z "$PACKAGER" ]; then
printf "%b\n" "${RED}Can't find a supported package manager${RC}"
exit 1
fi
}

checkSuperUser() {
## Check SuperUser Group
SUPERUSERGROUP='wheel sudo root'
for sug in ${SUPERUSERGROUP}; do
if groups | grep -q "${sug}"; then
SUGROUP=${sug}
printf "%b\n" "${CYAN}Super user group ${SUGROUP}${RC}"
break
fi
done

## Check if member of the sudo group.
if ! groups | grep -q "${SUGROUP}"; then
printf "%b\n" "${RED}You need to be a member of the sudo group to run me!${RC}"
exit 1
fi
}

checkCurrentDirectoryWritable() {
## Check if the current directory is writable.
GITPATH="$(dirname "$(realpath "$0")")"
if [ ! -w "$GITPATH" ]; then
printf "%b\n" "${RED}Can't write to $GITPATH${RC}"
exit 1
fi
}

checkDistro() {
DTYPE="unknown" # Default to unknown
# Use /etc/os-release for modern distro identification
if [ -f /etc/os-release ]; then
. /etc/os-release
DTYPE=$ID
fi
}

checkEnv() {
checkArch
checkEscalationTool
checkCommandRequirements "curl groups $ESCALATION_TOOL"
checkPackageManager 'nala apt-get dnf pacman zypper apk xbps-install eopkg'
checkCurrentDirectoryWritable
checkSuperUser
checkDistro
checkAURHelper
}
Loading