Skip to content

Instantly share code, notes, and snippets.

@davidandreoletti
Forked from gwpl/Dockerfile.aur
Created March 24, 2025 06:32
Show Gist options
  • Save davidandreoletti/97326210f78fa72c1c7053bcf77f8c52 to your computer and use it in GitHub Desktop.
Save davidandreoletti/97326210f78fa72c1c7053bcf77f8c52 to your computer and use it in GitHub Desktop.

Revisions

  1. @gwpl gwpl revised this gist Oct 8, 2024. No changes.
  2. @gwpl gwpl revised this gist Oct 8, 2024. No changes.
  3. @gwpl gwpl created this gist Oct 8, 2024.
    93 changes: 93 additions & 0 deletions Dockerfile.aur
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,93 @@
    # Making AUR work inside Dockerfile in non interactive way.(experiment)
    # Use an official Arch Linux runtime as a parent image
    FROM archlinux:latest

    # Maintainer
    LABEL maintainer="[email protected]"

    # Update system and install dependencies (we do not modify this step for docker caching)
    RUN pacman -Sy --noconfirm archlinux-keyring && \
    pacman-key --init && \
    pacman-key --populate archlinux && \
    pacman -Syyu --noconfirm

    # Install more packages (as separate step to benefit from caching previous step)
    RUN pacman -S --needed --noconfirm base-devel git sudo go expac git jq sudo git perl make meson python fakechroot gtest

    # Set sudoers file for auruser
    RUN echo "auruser ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/auruser

    # Clear package cache
    RUN pacman -Scc --noconfirm

    # Add a non-root user to avoid using root where possible
    RUN useradd -m -G wheel -s /bin/bash auruser

    USER auruser
    WORKDIR /home/auruser

    # Clone Yay and build package, print makepkg output for debugging
    RUN cd && git clone https://aur.archlinux.org/yay.git \
    && cd yay \
    && makepkg --noconfirm || (echo "makepkg failed with exit code $?"; exit 1)

    # After building yay, list the files in the directory
    RUN find /home/auruser -type f -name "*.pkg.tar.zst"

    # Add this line to stop the image build after the yay build step
    RUN touch ~/stop-here

    # Install the built package using sudo
    RUN sudo pacman -U /home/auruser/yay/yay-*.pkg.tar.zst --noconfirm \
    && cd .. \
    && rm -rf yay

    # Clone auracle-git and build package, print makepkg output for debugging
    USER auruser
    ENV PATH="/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/usr/lib/rustup/bin:${PATH}"
    RUN cd && git clone https://aur.archlinux.org/auracle-git.git \
    && cd auracle-git \
    && makepkg --noconfirm || (echo "makepkg failed with exit code $?"; exit 1) \
    && sudo pacman -U /home/auruser/auracle-git/auracle-git-*.pkg.tar.zst --noconfirm \
    && cd .. \
    && rm -rf auracle-git

    # Clone pacaur and build package, print makepkg output for debugging
    RUN cd && git clone https://aur.archlinux.org/pacaur.git \
    && cd pacaur \
    && makepkg --noconfirm || (echo "makepkg failed with exit code $?"; exit 1)

    # After building pacaur, list the files in the directory
    RUN find /home/auruser -type f -name "*.pkg.tar.zst"

    # Install the built package using sudo
    RUN sudo pacman -U /home/auruser/pacaur/pacaur-*.pkg.tar.zst --noconfirm \
    && cd .. \
    && rm -rf pacaur

    # Extra tools that maybe convenient for user:
    USER root
    RUN pacman -S --needed --noconfirm vim neovim nano

    # Clean up
    USER root
    RUN pacman -Scc --noconfirm \
    && rm -rf /home/auruser/.cache

    # Switch back to the auruser
    USER auruser
    WORKDIR /home/auruser
    RUN echo "export EDITOR=vim" >> ~/.bashrc

    #TODO make it so when one `alias docker-bash='eval $(docker build -q . | xargs -I % echo docker run -it % /bin/bash)'` then they will have $EDITOR=vim defined

    RUN EDITOR=cat pacaur --noconfirm -S paru-bin
    RUN EDITOR=cat yay --noconfirm -S spotify
    RUN EDITOR=cat pacaur --noconfirm -S aws-cli-v2 || EDITOR=cat yay --noconfirm -S aws-cli-v2

    #RUN yay -h
    #RUN EDITOR=cat yay --noconfirm -S google-drive-ocamlfuse
    #RUN EDITOR=cat pacaur --noconfirm -S google-drive-ocamlfuse

    # Set the default command
    CMD ["/bin/bash"]