diff --git a/arch-iso-builder.sh b/arch-iso-builder.sh index 6196798..9272d09 100755 --- a/arch-iso-builder.sh +++ b/arch-iso-builder.sh @@ -1,67 +1,166 @@ #!/bin/bash - # Exit on error set -e - ################################################################################################################## -# Custom Arch ISO Builder Script +# Custom Arch ISO Builder Script (Linux Version) ################################################################################################################## # Get absolute path of script directory SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -# Check if running on btrfs -if lsblk -f | grep btrfs > /dev/null 2>&1; then - echo "Warning: Building on BTRFS filesystem. Make backups before continuing." - read -p "Press Enter to continue... CTRL + C to stop" -fi - # Setting general parameters buildFolder="$SCRIPT_DIR/build" outFolder="$SCRIPT_DIR/out" +dockerImageName="arch-iso-builder-kde" +dockerContainerName="arch-iso-builder-kde-container" + +# Get current user ID and group ID +HOST_UID=$(id -u) +HOST_GID=$(id -g) + +# Check if Docker is installed +if ! command -v docker &> /dev/null; then + echo "Docker is not installed. Installing Docker..." + sudo pacman -S --noconfirm docker + + # Start and enable Docker service + echo "Starting Docker service..." + sudo systemctl start docker + sudo systemctl enable docker + + # Add current user to docker group to avoid using sudo + echo "Adding current user to docker group..." + sudo usermod -aG docker $(whoami) + + echo "Docker installation completed. You may need to log out and back in for group changes to take effect." + echo "Continuing with Docker as root for now..." +fi + +# Check if Docker daemon is running +if ! docker info &> /dev/null; then + echo "Docker daemon is not running. Starting Docker service..." + sudo systemctl start docker + + # Wait for Docker daemon to start (with timeout) + echo "Waiting for Docker daemon to start..." + max_attempts=10 + attempt=1 + while ! docker info &> /dev/null; do + if [ $attempt -gt $max_attempts ]; then + echo "Error: Docker daemon failed to start after $max_attempts attempts." + echo "Please try starting it manually with: sudo systemctl start docker" + exit 1 + fi + echo "Attempt $attempt/$max_attempts: Docker daemon not ready yet. Waiting 2 seconds..." + sleep 2 + attempt=$((attempt+1)) + done + echo "Docker daemon is now running." +fi echo "################################################################" echo "Build folder: $buildFolder" echo "Out folder : $outFolder" echo "################################################################" +echo "Building in Docker - using all CPU cores" +echo "################################################################" -# Check if archiso is installed -if ! pacman -Qi archiso &> /dev/null; then - echo "Installing archiso..." - sudo pacman -S --noconfirm archiso +# Create Docker image if it doesn't exist +if ! docker image inspect "$dockerImageName" &>/dev/null; then + echo "Creating Docker image: $dockerImageName..." + # Create temporary Dockerfile + cat > "$SCRIPT_DIR/Dockerfile" << EOF +FROM archlinux:latest + +# Update system and install required packages +RUN pacman -Syu --noconfirm && \ + pacman -S --noconfirm archiso base-devel git sudo + +# Create a build user with same UID as host user +RUN useradd -m -G wheel -u $HOST_UID builder && \ + echo '%wheel ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers + +# Set up working directory +WORKDIR /build + +# Keep container running for reuse +CMD ["/bin/bash"] +EOF + + # Build Docker image + docker build -t "$dockerImageName" -f "$SCRIPT_DIR/Dockerfile" "$SCRIPT_DIR" + + # Remove temporary Dockerfile + rm "$SCRIPT_DIR/Dockerfile" fi -# Make mkarchiso verbose -sudo sed -i 's/quiet="y"/quiet="n"/g' /usr/bin/mkarchiso +# Check if container exists +if docker container inspect "$dockerContainerName" &>/dev/null; then + # Container exists, check if it's running + if [ "$(docker container inspect -f '{{.State.Running}}' "$dockerContainerName")" != "true" ]; then + echo "Starting existing Docker container: $dockerContainerName..." + docker start "$dockerContainerName" + else + echo "Using existing running Docker container: $dockerContainerName..." + fi +else + # Container doesn't exist, create and start it + echo "Creating and starting Docker container: $dockerContainerName..." + docker run -d \ + --name "$dockerContainerName" \ + --privileged \ + --cpus="$(nproc)" \ + -v "$SCRIPT_DIR:/build" \ + "$dockerImageName" \ + tail -f /dev/null +fi -echo "Cleaning build environment..." -[ -d "$buildFolder" ] && sudo rm -rf "$buildFolder" -mkdir -p "$buildFolder" +# Create required directories +mkdir -p "$buildFolder" "$outFolder" -echo "Copying releng folder to build directory..." -cp -r "$SCRIPT_DIR/releng" "$buildFolder/" - -#echo "Cleaning pacman cache..." -#yes | sudo pacman -Scc - -echo "Creating output directory..." -mkdir -p "$outFolder" - -echo "Building ISO..." -cd "$buildFolder/releng" -sudo mkarchiso -v -w "$buildFolder" -o "$outFolder" "$PWD" - -# Save package list -echo "Saving package list..." -rename=$(date +%Y-%m-%d) -cp "$buildFolder/iso/arch/pkglist.x86_64.txt" "$outFolder/archlinux-$rename-pkglist.txt" - -echo "Cleaning build environment..." -[ -d "$buildFolder" ] && sudo rm -rf "$buildFolder" - -sudo chown -R $USER:$GROUP "$outFolder" +# Run the build process inside Docker +echo "Building ISO in Docker container..." +docker exec -it "$dockerContainerName" bash -c " + cd /build && \ + # Make mkarchiso verbose + sudo sed -i 's/quiet=\"y\"/quiet=\"n\"/g' /usr/bin/mkarchiso && \ + # Clean build environment + [ -d \"/build/build\" ] && sudo rm -rf \"/build/build\" && \ + mkdir -p \"/build/build\" && \ + # Copy releng folder + cp -r \"/build/releng\" \"/build/build/\" && \ + # Copy pkgs folder (if it exists), then generate repo db + if [ -d \"/build/pkgs\" ]; then + cp -r \"/build/pkgs\" \"/build/build/\" && \ + echo \"Copied pkgs folder to build directory\" && \ + if ls /build/build/pkgs/*.pkg.tar.* 1>/dev/null 2>&1; then + echo \"Generating local repository database (repo-add custom.db.tar.gz) ...\" && \ + sudo repo-add /build/build/pkgs/custom.db.tar.gz /build/build/pkgs/*.pkg.tar.* && \ + echo \"Local repo database created.\" + else + echo \"No .pkg.tar.* files found in pkgs. Skipping repo-add.\" + fi + else + echo \"Warning: pkgs folder not found in \$SCRIPT_DIR\" + fi && \ + # Create output directory + mkdir -p \"/build/out\" && \ + # Build ISO + cd \"/build/build/releng\" && \ + sudo mkarchiso -v -w \"/build/build\" -o \"/build/out\" \"\$PWD\" && \ + # Save package list + rename=\$(date +%Y-%m-%d) && \ + if [ -f \"/build/build/iso/arch/pkglist.x86_64.txt\" ]; then + sudo cp \"/build/build/iso/arch/pkglist.x86_64.txt\" \"/build/out/archlinux-\$rename-pkglist.txt\" + fi && \ + # Clean build environment + sudo rm -rf \"/build/build\" && \ + # Fix permissions on out folder + sudo chown -R $HOST_UID:$HOST_GID \"/build/out\" +" echo "################################################################" echo "DONE" echo "Check your out folder: $outFolder" echo "################################################################" + diff --git a/pkgs/custom.db b/pkgs/custom.db deleted file mode 120000 index 2ca137e..0000000 --- a/pkgs/custom.db +++ /dev/null @@ -1 +0,0 @@ -custom.db.tar.gz \ No newline at end of file diff --git a/pkgs/custom.db.tar.gz b/pkgs/custom.db.tar.gz deleted file mode 100644 index 7d94251..0000000 Binary files a/pkgs/custom.db.tar.gz and /dev/null differ diff --git a/pkgs/custom.files b/pkgs/custom.files deleted file mode 120000 index 3ac51f6..0000000 --- a/pkgs/custom.files +++ /dev/null @@ -1 +0,0 @@ -custom.files.tar.gz \ No newline at end of file diff --git a/pkgs/custom.files.tar.gz b/pkgs/custom.files.tar.gz deleted file mode 100644 index f814d76..0000000 Binary files a/pkgs/custom.files.tar.gz and /dev/null differ diff --git a/releng/airootfs/root/install-calamares.sh b/releng/airootfs/root/install-calamares.sh index d7fe2fa..6703086 100644 --- a/releng/airootfs/root/install-calamares.sh +++ b/releng/airootfs/root/install-calamares.sh @@ -3,20 +3,11 @@ SOURCE_DIR="/root/calamares-build" # Create required directories -mkdir -p /usr/lib/calamares mkdir -p /usr/share/calamares mkdir -p /usr/include/libcalamares -mkdir -p /usr/bin mkdir -p /etc/calamares -# Copy main executable -cp "${SOURCE_DIR}/bin/calamares" /usr/bin/ -cp "${SOURCE_DIR}/usr/bin/ckbcomp" /usr/bin - # Copy exact files as in manual commands -cp -r "${SOURCE_DIR}/lib/libcalamares.so" /usr/lib/ -cp -r "${SOURCE_DIR}/lib/libcalamaresui.so" /usr/lib/ -cp -r "${SOURCE_DIR}/lib/calamares" /usr/lib/ cp -r "${SOURCE_DIR}/usr/share/calamares" /usr/share/ cp -r "${SOURCE_DIR}/usr/include/libcalamares" /usr/include/ cp -r "${SOURCE_DIR}/etc/calamares" /etc/ diff --git a/releng/airootfs/root/ros-settings.sh b/releng/airootfs/root/ros-settings.sh index 8b22416..1c7edcd 100644 --- a/releng/airootfs/root/ros-settings.sh +++ b/releng/airootfs/root/ros-settings.sh @@ -11,7 +11,8 @@ mv "${SOURCE_DIR}/archlinux-logo-text-dark.svg" /usr/share/pixmaps/ cp "${SOURCE_DIR}/view-app-grid-symbolic.svg" /usr/share/icons/Yaru/scalable/actions/ mv "${SOURCE_DIR}/view-app-grid-symbolic.svg" /home/$USER/.icons/Yaru/scalable/actions/ -mv "${SOURCE_DIR}/raveos-sddm" /usr/share/sddm/themes/ +mv /root/raveos-sddm /usr/share/sddm/themes/ +chmod 755 /usr/share/sddm/themes/raveos-sddm chmod 755 /usr/share/pixmaps/raveos-logo.svg chmod 755 /usr/share/pixmaps/archlinux-logo-text.svg @@ -21,8 +22,6 @@ chmod 755 /usr/share/pixmaps/faces/rave-pp.png chmod 755 /usr/share/icons/Yaru/scalable/actions/view-app-grid-symbolic.svg chmod 755 /home/$USER/.icons/Yaru/scalable/actions/ -chmod 755 /usr/share/sddm/themes/raveos-sddm - systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target geoclue.service curl -Ls https://links.rp1.hu/progsgui -o /usr/local/bin/progs/3progs.sh @@ -56,3 +55,4 @@ rm /usr/share/applications/stoken-gui.desktop #SystemAccount=false" | tee /var/lib/AccountsService/users/$USER + diff --git a/releng/airootfs/usr/local/bin/progs/3progs.sh.desktop b/releng/airootfs/usr/local/bin/progs/3progs.sh.desktop index 7fe5a8f..07e1d34 100644 --- a/releng/airootfs/usr/local/bin/progs/3progs.sh.desktop +++ b/releng/airootfs/usr/local/bin/progs/3progs.sh.desktop @@ -10,5 +10,5 @@ Name=RP-ProgramScript-AS Comment[en_GB]= Comment[hu_HU]= Comment= -Exec=bash -c "konsole -e plasma-apply-wallpaperimage /usr/share/backgrounds/raveos-bg.png;konsole -e /usr/local/bin/progs/3progs.sh"' +Exec=/usr/local/bin/progs/3progs.sh diff --git a/releng/airootfs/usr/local/bin/progs/ros-backup-restore.sh b/releng/airootfs/usr/local/bin/progs/ros-backup-restore.sh index 6578891..46971cb 100755 --- a/releng/airootfs/usr/local/bin/progs/ros-backup-restore.sh +++ b/releng/airootfs/usr/local/bin/progs/ros-backup-restore.sh @@ -1,6 +1,6 @@ #!/bin/bash -Locale=$(locale | grep "LANG" -c) +Locale=$(locale | grep "LANG") Desktop=$XDG_CURRENT_DESKTOP # Text modifiers diff --git a/releng/pacman.conf b/releng/pacman.conf index 409ce04..d62552f 100644 --- a/releng/pacman.conf +++ b/releng/pacman.conf @@ -98,8 +98,8 @@ Include = /etc/pacman.d/mirrorlist # tips on creating your own repositories. [custom] SigLevel = Optional TrustAll -Server = file:///home/rave/RaveOS-KDE/pkgs +#Server = file:///home/rave/RaveOS-KDE/pkgs #Server = file:///home/airmancooma/Documents/OSs/RaveOS-KDE/pkgs - +Server = file:///build/build/pkgs