diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a977916 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vagrant/ diff --git a/README.md b/README.md index d7a6dec..6e3dbc3 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,16 @@ # vagrant-blackarch -This is a vagrant setup for using BlackArch as a portable pentest environment. \ No newline at end of file +This is a vagrant setup for using BlackArch as a portable pentest environment. + +## Create VM + +```sh +./setup.sh +``` +* An RSA key will be created, Vagrant will start creating the VM. Provisioning the VM is done via Ansible's `playbook.yml`. +* Reboot after Ansible has provisioned the VM to get the gui to work. + +## TODO + +* Putting in dotfiles, dwm and everything else is vanilla right now. +* Select applications to install diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 0000000..399c90e --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,41 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what # you're doing. +Vagrant.configure("2") do |config| + config.vm.hostname = "archlinux" + config.vm.box = "archlinux/archlinux" + id_rsa_pub = File.read("./.vagrant/vagrant.key.pub") + config.vm.provision "copy ssh public key", type: "shell", + inline: "echo \"#{id_rsa_pub}\" >> /home/vagrant/.ssh/authorized_keys" + #config.ssh.username = 'vagrant' + #config.ssh.password = 'vagrant' + config.ssh.forward_agent = true + config.ssh.forward_x11 = true + config.vm.network :forwarded_port, guest: 22, host: 47111, auto_correct: true + #config.ssh.insert_key = true + #config.ssh.forward_agent = true + + # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1" + config.vm.network "private_network", type: "dhcp", name: "vboxnet0" + config.vm.synced_folder "./", "/vagrant_files" + + config.vm.provider "virtualbox" do |vb| + # Display the VirtualBox GUI when booting the machine + vb.gui = false + + # Customize the amount of memory on the VM: + vb.memory = "8192" + vb.customize ["modifyvm", :id, "--vram", "256"] + end + + config.vm.provision "ansible" do |ansible| + ansible.verbose = "v" + ansible.raw_arguments = [ + "--private-key=./.vagrant/vagrant.key" + ] + ansible.playbook = "playbook.yml" + end +end diff --git a/includes/.xinitrc b/includes/.xinitrc new file mode 100755 index 0000000..5d0af90 --- /dev/null +++ b/includes/.xinitrc @@ -0,0 +1,80 @@ +#!/bin/sh +# +# ~/.xinitrc +# +# Executed by startx (run your window manager from here) + +if [[ -f ~/.extend.xinitrc ]];then + . ~/.extend.xinitrc +else + DEFAULT_SESSION=xfce4-session +fi + +userresources=$HOME/.Xresources +usermodmap=$HOME/.Xmodmap +sysresources=/etc/X11/xinit/.Xresources +sysmodmap=/etc/X11/xinit/.Xmodmap + +# merge in defaults and keymaps + +if [ -f $sysresources ]; then + xrdb -merge $sysresources +fi + +if [ -f $sysmodmap ]; then + xmodmap $sysmodmap +fi + +if [ -f "$userresources" ]; then + xrdb -merge "$userresources" +fi + +if [ -f "$usermodmap" ]; then + xmodmap "$usermodmap" +fi + +# start some nice programs + +if [ -d /etc/X11/xinit/xinitrc.d ] ; then + for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do + [ -x "$f" ] && . "$f" + done + unset f +fi + +get_session(){ + local dbus_args=(--sh-syntax --exit-with-session) + case $1 in + awesome) dbus_args+=(awesome) ;; + bspwm) dbus_args+=(bspwm-session) ;; + budgie) dbus_args+=(budgie-desktop) ;; + cinnamon) dbus_args+=(cinnamon-session) ;; + deepin) dbus_args+=(startdde) ;; + dwm) dbus_args+=(dwm);; + enlightenment) dbus_args+=(enlightenment_start) ;; + fluxbox) dbus_args+=(startfluxbox) ;; + gnome) dbus_args+=(gnome-session) ;; + i3|i3wm) dbus_args+=(i3 --shmlog-size 0) ;; + jwm) dbus_args+=(jwm) ;; + kde) dbus_args+=(startkde) ;; + lxde) dbus_args+=(startlxde) ;; + lxqt) dbus_args+=(lxqt-session) ;; + mate) dbus_args+=(mate-session) ;; + xfce) dbus_args+=(xfce4-session) ;; + openbox) dbus_args+=(openbox-session) ;; + *) dbus_args+=($DEFAULT_SESSION) ;; + esac + + echo "dbus-launch ${dbus_args[*]}" +} + +#slstatus 2>&1 >/dev/null & + +exec $(get_session) + + +# twm & +# xclock -geometry 50x50-1+1 & +# xterm -geometry 80x50+494+51 & +# xterm -geometry 80x20+494-0 & +#exec xterm -geometry 80x66+0+0 -name login diff --git a/includes/dwm.desktop b/includes/dwm.desktop new file mode 100644 index 0000000..af6bd46 --- /dev/null +++ b/includes/dwm.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=dwm +Comment=Dynamic Window Manager +Exec=dwm +Icon=dwm +Type=XSession diff --git a/playbook.yml b/playbook.yml new file mode 100644 index 0000000..a780306 --- /dev/null +++ b/playbook.yml @@ -0,0 +1,174 @@ +--- +- name: Provision Arch Box + hosts: default + remote_user: vagrant + become: yes + become_user: root + + tasks: + - name: Make Pacman Great Again + ansible.builtin.replace: + path: /etc/pacman.conf + regexp: '#ParallelDownloads = 5' + replace: 'ParallelDownloads = 5\nILoveCandy' + - name: Make Pacman Colorful + ansible.builtin.replace: + path: /etc/pacman.conf + regexp: '#Color' + replace: 'Color' + - name: Activating Multilibs + ansible.builtin.replace: + path: /etc/pacman.conf + regexp: '#[multilib]' + replace: '[multilib]\nInclude = /etc/pacman.d/mirrorlist\n' + - name: Pacman Keys + ansible.builtin.shell: + cmd: pacman-key --init && pacman-key --populate + - name: Update System + ansible.builtin.shell: + cmd: pacman -Syyu --noconfirm + - name: Download Base packages + ansible.builtin.shell: + cmd: sudo pacman -S --needed base-devel git stow vim --noconfirm + +- name: Loading Blackarch and Yay + hosts: default + remote_user: vagrant + tasks: + - name: Download Blackarch + ansible.builtin.shell: | + curl -O https://blackarch.org/strap.sh && \ + echo 5ea40d49ecd14c2e024deecf90605426db97ea0c strap.sh | sha1sum -c && \ + chmod +x ./strap.sh && sudo ./strap.sh && \ + sudo pacman -Syu --noconfirm + args: + executable: /bin/bash + - name: Loading Multilibs + ansible.builtin.shell: + cmd: sudo pacman -Syu --noconfirm + - name: Loading Blackman + ansible.builtin.shell: + cmd: sudo pacman -S blackman --noconfirm + - name: Install yay + ansible.builtin.shell: + cmd: if [ ! -d "yay" ] ; then git clone http://aur.archlinux.org/yay.git && cd yay && makepkg -si --noconfirm ; fi + + +- name: Prepare window manger (dwm) + hosts: default + remote_user: vagrant + tasks: + - name: Installing dependencies + ansible.builtin.shell: + cmd: sudo pacman -S pass coreutils fontconfig freetype2 glibc libx11 libxft libxinerama clipmenu libdrm libepoxy libevdev libfontenc libglvnd libgudev libice libinput libomxil-bellagio libpciaccess libsm libunwind libwacom libxcursor libxcvt libxdamage libxfixes libxfont2 libxkbfile libxmu libxrandr libxshmfence libxt libxxf86vm llvm-libs lm_sensors mesa mtdev pixman vulkan-icd-loader wayland xf86-input-libinput xkeyboard-config xorg-fonts-encodings xorg-server xorg-server-common xorg-setxkbmap xorg-xkbcomp xorg-xrandr xorg-xsetroot paraxor-dwm --noconfirm + - name: Prepare vim + ansible.builtin.shell: | + [[ ! -d ".vim/pack/default/start/gruvbox/.git" ]] && cd .vim/pack/default/start/gruvbox/ && git submodule update --init || exit 0 + - name: Getting dotfiles + ansible.builtin.shell: | + [[ ! -d "dotfiles" ]] && git clone https://git.stefan.works/stefan/dotfiles || exit 0 + - name: Getting dwm + ansible.builtin.shell: | + [[ ! -d "dwm" ]] && git clone git://git.suckless.org/dwm && [[ -e "~/dwm/config.h" ]] && mv dwm/config.h dwm/config.bkp || exit 0 + - name: Getting dmenu + ansible.builtin.shell: | + [[ ! -d "dmenu" ]] && git clone git://git.suckless.org/dmenu || exit 0 + - name: Getting slstatus + ansible.builtin.shell: | + [[ ! -d "slstatus" ]] && git clone git://git.suckless.org/slstatus || exit 0 + - name: Distributing dotfiles + ansible.builtin.shell: + #cmd: cd dotfiles && stow vim && stow dwm && stow dmenu && stow slstatus && cd .. + cmd: cd dotfiles && stow vim && stow dmenu && stow slstatus + - name: Make dwm + ansible.builtin.shell: + cmd: cd dwm && make && sudo make install && cd .. + - name: Make dmenu + ansible.builtin.shell: + cmd: cd dmenu && make && sudo make install && cd .. + - name: Make slstatus + ansible.builtin.shell: + cmd: cd slstatus && make && sudo make install && cd .. + - name: Create xinitrc + ansible.builtin.shell: | + [[ ! -e "~/.xinitrc" ]] && touch ~/.xinitrc || printf "Did not create .xinitrc" + - name: Insert dwm into xinitrc + lineinfile: + path: ~/.xinitrc + line: 'exec dwm' + insertbefore: EOF + +- name: make ssh x11 possible + hosts: default + remote_user: vagrant + become: yes + become_user: root + + tasks: + - name: set x11 forwarding + ansible.builtin.replace: + path: /etc/ssh/sshd_config + regexp: '#x11forwarding no' + replace: 'x11forwarding yes' + - name: install xauth + ansible.builtin.shell: + cmd: pacman -S xorg-xauth --noconfirm + - name: restart ssh daemon + ansible.builtin.shell: + cmd: systemctl restart sshd + + +- name: Install lightm as a session manager for dwm + hosts: default + remote_user: vagrant + become: yes + become_user: root + + tasks: + - name: install lightdm + ansible.builtin.shell: + cmd: pacman -S lightdm lightdm-gtk-greeter --noconfirm + - name: Set gtk-greeter + ansible.builtin.replace: + path: /etc/lightdm/lightdm.conf + regexp: '#greeter-session=greeter-gtk-gnome' + replace: 'greeter-session=lightdm-gtk-greeter' + - name: Copy .xinitrc + ansible.builtin.copy: + src: includes/.xinitrc + dest: /home/vagrant/.xinitrc + owner: vagrant + group: vagrant + mode: '0755' + - name: Create xsessions directory + ansible.builtin.file: + path: /usr/share/xsessions + owner: root + group: root + state: directory + mode: '0755' + - name: Configure dwm for lightdm + ansible.builtin.copy: + src: includes/dwm.desktop + dest: /usr/share/xsessions/dwm.desktop + owner: root + group: root + mode: '0644' + - name: Enable lightdm Service + ansible.builtin.shell: + cmd: systemctl enable lightdm + +- name: Install Applications + hosts: default + remote_user: vagrant + become: yes + become_user: root + + tasks: + - name: Alacritty + ansible.builtin.shell: + cmd: pacman -S alacritty --noconfirm +# - name: Fonts +# ansible.builtin.shell: +# cmd: yay -S ttf-meslo-nerd-font-powerlevel10k nerd-font-sans-mono --noconfirm + diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..afa7aba --- /dev/null +++ b/run.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +[[ ! -d .vagrant ]] && mkdir .vagrant +ssh-keygen -b 4096 -N "" -f ./.vagrant/vagrant.key +chmod 600 ./.vagrant/vagrant.key + +vagrant up