diff --git a/README.md b/README.md
new file mode 100644
index 0000000..9747660
--- /dev/null
+++ b/README.md
@@ -0,0 +1,34 @@
+## Glacier
+
+Glacier is the package management system for Everest Linux. It controls all user-installed packages on the system.
+Glacier is designed from the ground up, and uses a simple, PKGBUILD-like format, for ease of use.
+
+## Get started
+
+Glacier requires the following packages:
+
+- Bash (Glacier runtime)
+- GNU make
+- GCC (or any compatible C compiler)
+- Git
+- Autoconf
+- Automake
+
+To install Glacier, clone this repository:
+```
+git clone https://git.everestlinux.org/EverestLinux/glacier
+cd glacier/install
+```
+Inside the `install` directory, edit install.conf.dist, ensure all options are adequate, and save as install.conf:
+```
+EDITOR=your_editor_here
+$EDITOR install.conf.dist
+```
+Run `build.sh` as root:
+```
+doas ./build.sh install
+# OR
+sudo ./build.sh install
+# OR
+su -c ./build.sh install
+```
diff --git a/src/bin/glacier-mkprofile b/src/bin/glacier-mkprofile
index 41eedba..0852475 100755
--- a/src/bin/glacier-mkprofile
+++ b/src/bin/glacier-mkprofile
@@ -5,18 +5,18 @@
#
# Copyright (C) 2023 Everest Linux
#
-# This program is free software: you can redistribute it and/or modify
+# Glacier is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful,
+# Glacier is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
+# along with Glacier. If not, see .
source /etc/glacier.conf
@@ -28,7 +28,7 @@ usage() {
printf "${0} {-v} Show the current version\n"
printf "${0} {-l} List all available system profiles\n"
printf "\n"
- printf "This program is free software.\n"
+ printf "Glacier is free software.\n"
printf "See the GNU GPL version 3 for details.\n"
}
@@ -53,15 +53,14 @@ warn() {
printf "may cause SERIOUS DAMAGE to the system.\n"
printf "Before switching profiles, do the following:\n"
printf "- Change the git branch on /, corresponding to the profile you want to switch to.\n"
- printf "(root)# cd /\n"
- printf "(root)# git checkout x86-musl\n"
+ printf " (root)# cd /\n"
+ printf " (root)# git checkout x86-musl\n"
printf "- Pull in changes.\n"
- printf "(root)# git pull\n"
+ printf " (root)# git pull\n"
}
-mkconfig() {
+glacier_conf() {
ROOT_URL="https://git.everestlinux.org/EverestLinux/"
- touch /etc/glacier.conf
case ${2} in
x86-musl)
echo "GREPO='${ROOT_URL}/epkgs-x86-musl/raw/branch/main'" >> /etc/glacier.conf
@@ -91,6 +90,56 @@ mkconfig() {
esac
}
+make_conf() {
+ case ${2} in
+ x86-*)
+ echo "ARCH='x86_64'" >> /etc/make.conf
+ ;;
+ i386-*)
+ printf "[x] i386 is not supported.\n"
+ exit 1
+ ;;
+ aarch64-*)
+ printf "[x] aarch64 is not supported.\n"
+ ;;
+ *)
+ printf "[x] Unknown architecture. See 'glacier-mkprofile -l' to see all supported architectures.\n"
+ exit 1
+ ;;
+ esac
+}
+
+glacier_profile_conf() {
+ touch /etc/glacier/profile.conf
+ case ${2} in
+ x86-musl)
+ echo "GLACIER_SYSTEM_PROFILE='x86-musl'" >> /etc/glacier/profile.conf
+ ;;
+ x86-glibc)
+ echo "GLACIER_SYSTEM_PROFILE='x86-glibc'" >> /etc/glacier/profile.conf
+ ;;
+ x86-musl-selinux)
+ echo "GLACIER_SYSTEM_PROFILE='x86-musl-selinux'" >> /etc/glacier/profile.conf
+ ;;
+ x86-glibc-selinux)
+ echo "GLACIER_SYSTEM_PROFILE='x86-glibc-selinux'" >> /etc/glacier/profile.conf
+ ;;
+ x86-glibc-systemd)
+ echo "GLACIER_SYSTEM_PROFILE='x86-glibc-systemd'" >> /etc/glacier/profile.conf
+ ;;
+ x86-musl-multilib)
+ echo "GLACIER_SYSTEM_PROFILE='x86-musl-multilib'" >> /etc/glacier/profile.conf
+ ;;
+ x86-glibc-multilib)
+ echo "GLACIER_SYSTEM_PROFILE='x86-glibc-multilib'" >> /etc/glacier/profile.conf
+ ;;
+ *)
+ printf "[x] Invalid profile chosen. See 'glacier-mkprofile -l' to see all available profiles.\n"
+ exit 1
+ ;;
+ esac
+}
+
case ${1} in
-h)
usage "$@"
@@ -104,4 +153,9 @@ case ${1} in
-l)
available_profiles "$@"
exit 0
+ ;;
+ *)
+ usage_small "$@"
+ exit 1
+ ;;
esac
diff --git a/src/bin/glist b/src/bin/glist
index 1b87818..787e775 100755
--- a/src/bin/glist
+++ b/src/bin/glist
@@ -5,18 +5,18 @@
#
# Copyright (C) 2023 Everest Linux
#
-# This program is free software: you can redistribute it and/or modify
+# Glacier is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful,
+# Glacier is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
+# along with Glacier. If not, see .
source /etc/glacier.conf
@@ -29,7 +29,7 @@ usage() {
printf "${0} {-a} Show all packages\n"
printf "${0} {-f} Filter packages by name\n"
printf "\n"
- printf "This program is free software.\n"
+ printf "Glacier is free software.\n"
printf "See the GNU GPL version 3 for details.\n"
}
diff --git a/src/bin/gpc b/src/bin/gpc
new file mode 100644
index 0000000..c8d0ff2
--- /dev/null
+++ b/src/bin/gpc
@@ -0,0 +1,20 @@
+#!/usr/bin/env sh
+
+# gpc - Check integrity of Glacier packages
+# This file is part of Glacier.
+#
+# Copyright (C) 2023 Everest Linux
+#
+# Glacier is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Glacier is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Glacier. If not, see .
+
diff --git a/src/bin/gpkg b/src/bin/gpkg
index 7a2b7b3..b4f50b1 100755
--- a/src/bin/gpkg
+++ b/src/bin/gpkg
@@ -5,18 +5,18 @@
#
# Copyright (C) 2023 Everest Linux
#
-# This program is free software: you can redistribute it and/or modify
+# Glacier is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful,
+# Glacier is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
+# along with Glacier. If not, see .
source /etc/glacier.conf
if [ "$?" != "0" ]; then
@@ -39,7 +39,7 @@ usage() {
printf "${0} {-ul --localup} Same as -u, but takes a local directory\n"
printf "${0} {-d --dload} ONLY download a package\n"
printf "\n"
- printf "This program is free software.\n"
+ printf "Glacier is free software.\n"
printf "See the GNU GPL version 3 for details.\n"
}
@@ -55,15 +55,17 @@ am_i_root() {
fi
}
+check_if_input_is_blank() {
+ if [[ "${@}" == "" ]]; then
+ printf "${red}[${error}]${reset} No package(s) specified.\n"
+ exit 1
+ fi
+}
+
dload_pkg() {
- cd /opt/glacier/workspace
# Store all positional parameters ["${@}"] in an array [pkgs=()]
pkgs=("${@}")
# if no packages are specified, exit
- if [ $pkgs == "" ]; then
- printf "${red}[${error}]${reset} No package(s) were specified.\n"
- exit 1
- fi
printf "${blue}[i]${reset} Downloading package(s)...\n"
for i in ${pkgs[@]}; do
${GLACIER_DOWNLOAD_BACKEND} ${GREPO}/${i}
@@ -136,7 +138,7 @@ index_pkg() {
mv /opt/glacier/workspace/* /usr/glacier/index
if [ "$?" != "0" ]; then
printf "${yellow}[!]${reset} Packages did not index. To do this manually:\n"
- printf "${yellow}[!]${reset} (root) mv /opt/glacier/workspace/* /usr/glacier/index\n"
+ printf "${yellow}[!]${reset} (root)$ mv /opt/glacier/workspace/* /usr/glacier/index\n"
printf "${yellow}[!]${reset} To avoid this warning in the future, ensure the package index exists and is accessible.\n"
fi
}
@@ -153,17 +155,28 @@ case $1 in
;;
-f|--install)
shift
+ cd /opt/glacier/workspace
am_i_root "$@"
+ check_if_input_is_blank "$@"
dload_pkg "$@"
checkdeps "$@"
checkconflicts "$@"
- get_pkg_sources "$@"
- install_pkg "$@"
+ read -p "$(printf "${blue}[?]${reset} Proceed with this operation? (y/n) ")" -n 1 -r
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
+ get_pkg_sources "$@"
+ install_pkg "$@"
+ index_pkg "$@"
+ elif [[ $REPLY =~ ^[Yy]$ ]]; then
+ printf "${red}[${error}]${reset} Aborting.\n"
+ exit 1
+ fi
exit 0
;;
-u|--update)
shift
+ cd /opt/glacier/workspace
am_i_root "$@"
+ check_if_input_is_blank "$@"
dload_pkg "$@"
checkdeps "$@"
checkconflicts "$@"
@@ -173,7 +186,9 @@ case $1 in
;;
-x|--remove)
shift
+ cd /opt/glcier/workspace
am_i_root "$@"
+ check_if_input_is_blank "$@"
remove_pkg "$@"
exit 0
;;
@@ -187,6 +202,7 @@ case $1 in
;;
-d|--dload)
shift
+ check_if_input_is_blank "$@"
dload_pkg "$@"
exit 0
;;
diff --git a/src/bin/gquery b/src/bin/gquery
index b4afc04..c4963f1 100755
--- a/src/bin/gquery
+++ b/src/bin/gquery
@@ -5,18 +5,18 @@
#
# Copyright (C) 2023 Everest Linux
#
-# This program is free software: you can redistribute it and/or modify
+# Glacier is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful,
+# Glacier is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
+# along with Glacier. If not, see .
source /etc/glacier.conf
@@ -29,7 +29,7 @@ usage() {
printf "${0} {-f} Query a package's files\n"
printf "${0} {-i} Query a package's info file\n"
printf "\n"
- printf "This program is free software.\n"
+ printf "Glacier is free software.\n"
printf "See the GNU GPL version 3 for details.\n"
}
diff --git a/src/bin/syspkg b/src/bin/syspkg
index d7e554f..f4ca3fd 100755
--- a/src/bin/syspkg
+++ b/src/bin/syspkg
@@ -5,18 +5,18 @@
#
# Copyright (C) 2023 Everest Linux
#
-# This program is free software: you can redistribute it and/or modify
+# Glacier is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful,
+# Glacier is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
+# along with Glacier. If not, see .
source /etc/glacier.conf
if [ "$?" != "0" ]; then
@@ -38,10 +38,10 @@ usage() {
printf "${0} {-l} Same as -f, but takes a local directory\n"
printf "${0} {-d} ONLY download a package\n"
printf "\n"
- printf "NOTE: This program should only be used for building\n"
+ printf "NOTE: Glacier should only be used for building\n"
printf "system images. Regular users should use 'glacier-mergepkg' instead.\n"
printf "\n"
- printf "This program is free software.\n"
+ printf "Glacier is free software.\n"
printf "See the GNU GPL version 3 for details.\n"
}
diff --git a/src/etc/glacier.conf b/src/etc/glacier.conf
index c77de79..2942384 100644
--- a/src/etc/glacier.conf
+++ b/src/etc/glacier.conf
@@ -14,6 +14,8 @@ export error="\xE2\x9C\x95"
# Command to be used for downloading packages
# This command will be invoked whenever files need to be downloaded
export GLACIER_DOWNLOAD_BACKEND="wget --quiet --show-progress"
+# Use this backend for debugging
+#export GLACIER_DOWNLOAD_BACKEND="wget"
# Permitted software licenses
# Glacier will install software licensed under what's listed here. Otherwise, it'll quit.
diff --git a/src/etc/make.conf b/src/etc/make.conf
new file mode 100644
index 0000000..146de20
--- /dev/null
+++ b/src/etc/make.conf
@@ -0,0 +1,17 @@
+#
+# /etc/make.conf
+#
+
+# Number of parallel makejobs. Change this to your CPUs cores + threads.
+# Example: 6 cores + 6 threads = 12 parallel makejobs
+MAKEFLAGS="-j1"
+
+# Build and compile flags for C and C++ programs.
+# Disable these if packages are breaking.
+# Using too many optimizations may break packages.
+CFLAGS="-O2 -fstack-protector-strong"
+CXXFLAGS="${CFLAGS}"
+
+# DO NOT CHANGE ANYTHING ELSE. THESE OPTIONS ARE SET BY `glacier-mkprofile`
+# AND ARE TIED TO THE SYSTEM PROFILE. MANUALLY CHANGING THESE OPTIONS
+# MAY CAUSE SEVERE BREAKAGE.