diff --git a/arch-iso-builder.sh b/arch-iso-builder.sh index 9272d09..6196798 100755 --- a/arch-iso-builder.sh +++ b/arch-iso-builder.sh @@ -1,166 +1,67 @@ #!/bin/bash + # Exit on error set -e + ################################################################################################################## -# Custom Arch ISO Builder Script (Linux Version) +# Custom Arch ISO Builder Script ################################################################################################################## # 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 "################################################################" -# 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" +# Check if archiso is installed +if ! pacman -Qi archiso &> /dev/null; then + echo "Installing archiso..." + sudo pacman -S --noconfirm archiso fi -# 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 +# Make mkarchiso verbose +sudo sed -i 's/quiet="y"/quiet="n"/g' /usr/bin/mkarchiso -# Create required directories -mkdir -p "$buildFolder" "$outFolder" +echo "Cleaning build environment..." +[ -d "$buildFolder" ] && sudo rm -rf "$buildFolder" +mkdir -p "$buildFolder" -# 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 "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" echo "################################################################" echo "DONE" echo "Check your out folder: $outFolder" echo "################################################################" - diff --git a/pkgs/custom.db b/pkgs/custom.db new file mode 120000 index 0000000..2ca137e --- /dev/null +++ b/pkgs/custom.db @@ -0,0 +1 @@ +custom.db.tar.gz \ No newline at end of file diff --git a/pkgs/custom.db.tar.gz b/pkgs/custom.db.tar.gz new file mode 100644 index 0000000..7d94251 Binary files /dev/null and b/pkgs/custom.db.tar.gz differ diff --git a/pkgs/custom.files b/pkgs/custom.files new file mode 120000 index 0000000..3ac51f6 --- /dev/null +++ b/pkgs/custom.files @@ -0,0 +1 @@ +custom.files.tar.gz \ No newline at end of file diff --git a/pkgs/custom.files.tar.gz b/pkgs/custom.files.tar.gz new file mode 100644 index 0000000..f814d76 Binary files /dev/null and b/pkgs/custom.files.tar.gz differ diff --git a/releng/airootfs/root/install-calamares.sh b/releng/airootfs/root/install-calamares.sh index 6703086..d7fe2fa 100644 --- a/releng/airootfs/root/install-calamares.sh +++ b/releng/airootfs/root/install-calamares.sh @@ -3,11 +3,20 @@ 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 1c7edcd..8b22416 100644 --- a/releng/airootfs/root/ros-settings.sh +++ b/releng/airootfs/root/ros-settings.sh @@ -11,8 +11,7 @@ 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 /root/raveos-sddm /usr/share/sddm/themes/ -chmod 755 /usr/share/sddm/themes/raveos-sddm +mv "${SOURCE_DIR}/raveos-sddm" /usr/share/sddm/themes/ chmod 755 /usr/share/pixmaps/raveos-logo.svg chmod 755 /usr/share/pixmaps/archlinux-logo-text.svg @@ -22,6 +21,8 @@ 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 @@ -55,4 +56,3 @@ 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 07e1d34..7fe5a8f 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=/usr/local/bin/progs/3progs.sh +Exec=bash -c "konsole -e plasma-apply-wallpaperimage /usr/share/backgrounds/raveos-bg.png;konsole -e /usr/local/bin/progs/3progs.sh"' diff --git a/releng/pacman.conf b/releng/pacman.conf index d62552f..409ce04 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 +