diff --git a/.gitignore b/.gitignore index b7c42ed..af40667 100644 --- a/.gitignore +++ b/.gitignore @@ -6,9 +6,10 @@ .env *.retry -packer/assets/id_rsa_qemu* -packer/assets/packer_cache/ -packer/assets/output_gentoo_qcow2/ +image/assets/id_rsa_qemu* +image/cache/ +image/assets/output_qcow2/ .idea/ *.iml +/image/assets/test-misc/ diff --git a/Makefile b/Makefile index 26d2e9d..b816324 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,20 @@ -.PHONY: up +.PHONY: up-gentoo +include .env -up: packer/assets/id_rsa_qemu - docker-compose up --build -d +imagePackerBuilder: + docker build -t $(REGISTRY_URL)/$(IMAGE_NAME):$(VERSION) ./image -exec: +up-gentoo: imagePackerBuilder image/assets/id_rsa_qemu + docker-compose up --build -d gentoo_packer + +exec-gentoo: docker-compose exec gentoo_packer bash -packer/assets/id_rsa_qemu: +down: + docker-compose down + +image/assets/id_rsa_qemu: @if [ ! -f "$@" ]; then \ ssh-keygen -a 100 -C antoinroux@hotmail.fr -t ed25519 -N "" -b 2048 -q -f $@; \ fi diff --git a/docker-compose.yml b/docker-compose.yml index e507dec..9990532 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,18 +3,19 @@ version: '3.7' services: gentoo_packer: image: ${REGISTRY_URL}/${IMAGE_NAME}:${VERSION} - build: - context: ./packer - args: - PROXY: "${PROXY}" - entrypoint: "bash -c" - command: "'while sleep 3600; do :; done'" - stdin_open: true - tty: true privileged: true volumes: - - "./packer/assets:/packer/" + - "./image/assets:/packer" + - "./image/cache:/packer-cache" network_mode: "host" + environment: + - SOURCE_NAME=qemu.gentoo + - SSH_LIVE_USERNAME=root + - SSH_LIVE_PASSWORD=toortrort@orto0rTempPASSWORD + - ANSIBLE_EXTRA_VARS=generated_user=antoine generated_group=users gentoo_version=20201111T214503Z + - ANSIBLE_PLAYBOOK=/packer/ansible/playbook-gentoo.yml + - ISO_CHECKSUM=file:http://distfiles.gentoo.org/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20201111T214503Z.iso.DIGESTS + - ISO_URL=http://distfiles.gentoo.org/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20201111T214503Z.iso #ports: # - "5900:5900/udp" # - "2222:2229" diff --git a/image/.dockerignore b/image/.dockerignore new file mode 100644 index 0000000..1f24a24 --- /dev/null +++ b/image/.dockerignore @@ -0,0 +1,2 @@ +cache/ +assets/output_qcow2/ diff --git a/packer/Dockerfile b/image/Dockerfile similarity index 86% rename from packer/Dockerfile rename to image/Dockerfile index 295d321..9705e77 100644 --- a/packer/Dockerfile +++ b/image/Dockerfile @@ -1,4 +1,4 @@ -FROM hashicorp/packer:1.5.4 +FROM hashicorp/packer:1.6.3 ARG PROXY="" ENV http_proxy="${PROXY}" @@ -15,6 +15,7 @@ RUN apk add --update qemu qemu-system-x86_64 qemu-img \ RUN addgroup -g 1000 "${GROUP}" && \ adduser -u 1000 -D -G "${GROUP}" "${USER}" && \ + adduser "${USER}" qemu && \ echo "$USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$USER && \ chmod 0440 /etc/sudoers.d/$USER @@ -28,8 +29,9 @@ RUN wget https://networkgenomics.com/try/mitogen-${MITOGEN_VERSION}.tar.gz && \ USER "${USER}" ENV PACKER_LOG=1 +ENV PACKER_CACHE_DIR=/packer-cache ENV PS1="[\u@\h \W]# " -ENTRYPOINT ["/bin/packer"] +ENTRYPOINT ["/packer/run-packer.sh"] diff --git a/packer/assets/ansible/ansible.cfg b/image/assets/ansible/ansible.cfg similarity index 100% rename from packer/assets/ansible/ansible.cfg rename to image/assets/ansible/ansible.cfg diff --git a/packer/assets/ansible/playbook.yml b/image/assets/ansible/playbook-gentoo.yml similarity index 92% rename from packer/assets/ansible/playbook.yml rename to image/assets/ansible/playbook-gentoo.yml index aea3e2e..d72cb11 100644 --- a/packer/assets/ansible/playbook.yml +++ b/image/assets/ansible/playbook-gentoo.yml @@ -1,5 +1,5 @@ --- -# file: playbook.yml +# file: playbook-gentoo.yml - hosts: default become: true diff --git a/packer/assets/ansible/roles/prepare/tasks/main.yml b/image/assets/ansible/roles/prepare/tasks/main.yml similarity index 100% rename from packer/assets/ansible/roles/prepare/tasks/main.yml rename to image/assets/ansible/roles/prepare/tasks/main.yml diff --git a/packer/assets/ansible/roles/prepare/vars/main.yml b/image/assets/ansible/roles/prepare/vars/main.yml similarity index 100% rename from packer/assets/ansible/roles/prepare/vars/main.yml rename to image/assets/ansible/roles/prepare/vars/main.yml diff --git a/packer/assets/ansible/roles/setup/defaults/main.yml b/image/assets/ansible/roles/setup/defaults/main.yml similarity index 84% rename from packer/assets/ansible/roles/setup/defaults/main.yml rename to image/assets/ansible/roles/setup/defaults/main.yml index 8035a7d..425805e 100644 --- a/packer/assets/ansible/roles/setup/defaults/main.yml +++ b/image/assets/ansible/roles/setup/defaults/main.yml @@ -1,23 +1,23 @@ --- # default variable relative to paritionning -devices_path: /dev/sda +devices_path: /dev/vdb devices_system: - name: bootloader - dev: /dev/sda1 + dev: "{{ devices_path }}1" label: gpt flags: [ bios_grub ] part_start: 0% part_end: 2MiB - name: boot - dev: /dev/sda2 + dev: "{{ devices_path }}2" label: gpt flags: [ boot, esp ] part_start: 2MiB part_end: 128MiB fstype: "ext2" - name: root - dev: /dev/sda3 + dev: "{{ devices_path }}3" label: gpt flags: [ lvm ] part_start: 128MiB @@ -42,4 +42,4 @@ lvs: # default swapiness value swapiness: "60" -gentoo_version: "lastest" \ No newline at end of file +gentoo_version: "lastest" diff --git a/packer/assets/ansible/roles/setup/tasks/configure.yml b/image/assets/ansible/roles/setup/tasks/configure.yml similarity index 100% rename from packer/assets/ansible/roles/setup/tasks/configure.yml rename to image/assets/ansible/roles/setup/tasks/configure.yml diff --git a/packer/assets/ansible/roles/setup/tasks/main.yml b/image/assets/ansible/roles/setup/tasks/main.yml similarity index 100% rename from packer/assets/ansible/roles/setup/tasks/main.yml rename to image/assets/ansible/roles/setup/tasks/main.yml diff --git a/packer/assets/ansible/roles/setup/tasks/mount.yml b/image/assets/ansible/roles/setup/tasks/mount.yml similarity index 100% rename from packer/assets/ansible/roles/setup/tasks/mount.yml rename to image/assets/ansible/roles/setup/tasks/mount.yml diff --git a/packer/assets/ansible/roles/setup/tasks/os.yml b/image/assets/ansible/roles/setup/tasks/os.yml similarity index 100% rename from packer/assets/ansible/roles/setup/tasks/os.yml rename to image/assets/ansible/roles/setup/tasks/os.yml diff --git a/packer/assets/ansible/roles/setup/tasks/partition.yml b/image/assets/ansible/roles/setup/tasks/partition.yml similarity index 100% rename from packer/assets/ansible/roles/setup/tasks/partition.yml rename to image/assets/ansible/roles/setup/tasks/partition.yml diff --git a/packer/assets/ansible/roles/setup/tasks/security.yml b/image/assets/ansible/roles/setup/tasks/security.yml similarity index 100% rename from packer/assets/ansible/roles/setup/tasks/security.yml rename to image/assets/ansible/roles/setup/tasks/security.yml diff --git a/packer/assets/ansible/roles/setup/tasks/umount.yml b/image/assets/ansible/roles/setup/tasks/umount.yml similarity index 100% rename from packer/assets/ansible/roles/setup/tasks/umount.yml rename to image/assets/ansible/roles/setup/tasks/umount.yml diff --git a/packer/assets/ansible/roles/setup/tasks/users.yml b/image/assets/ansible/roles/setup/tasks/users.yml similarity index 100% rename from packer/assets/ansible/roles/setup/tasks/users.yml rename to image/assets/ansible/roles/setup/tasks/users.yml diff --git a/packer/assets/ansible/roles/setup/vars/main.yml b/image/assets/ansible/roles/setup/vars/main.yml similarity index 100% rename from packer/assets/ansible/roles/setup/vars/main.yml rename to image/assets/ansible/roles/setup/vars/main.yml diff --git a/image/assets/hcl/builder.pkr.hcl b/image/assets/hcl/builder.pkr.hcl new file mode 100644 index 0000000..7ab29be --- /dev/null +++ b/image/assets/hcl/builder.pkr.hcl @@ -0,0 +1,14 @@ +# "timestamp" template function replacement +locals { timestamp = regex_replace(timestamp(), "[- TZ:]", "") } + +build { + sources = ["source.qemu.gentoo"] + + provisioner "ansible" { + ansible_env_vars = ["ANSIBLE_CONFIG=/packer/ansible/ansible.cfg"] + extra_arguments = ["--extra-vars", "${var.ansible_extra_vars}"] + groups = ["default"] + playbook_file = "${var.ansible_provisioning_playbook}" + user = "root" + } +} diff --git a/image/assets/hcl/source-gentoo.pkr.hcl b/image/assets/hcl/source-gentoo.pkr.hcl new file mode 100644 index 0000000..8333a65 --- /dev/null +++ b/image/assets/hcl/source-gentoo.pkr.hcl @@ -0,0 +1,48 @@ +source "qemu" "gentoo" { + accelerator = "kvm" + boot_command = [ + "gentoo-nofb", "", + "", "", + "", "passwd ${var.ssh_username}", "", + "", "${var.ssh_password}", "", + "", "${var.ssh_password}", "", + "", "sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config", "", + "", "echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config", "", + "", "/etc/init.d/sshd start", "", + "" + ] + boot_wait = "3s" + cpus = 2 + disk_compression = true + disk_detect_zeroes = "unmap" + disk_discard = "unmap" + skip_compaction = false + disk_image = false + use_backing_file = false + disk_interface = "virtio" + disk_size = "10G" + disk_additional_size = ["80G"] + format = "qcow2" + headless = true + http_directory = "/packer/httpdir" + http_port_max = 10082 + http_port_min = 10082 + host_port_min = 2229 + host_port_max = 2229 + iso_checksum = "${var.iso_checksum}" + iso_url = "${var.iso_url}" + memory = "1024" + net_device = "virtio-net" + output_directory = "output_qcow2" + qemuargs = [ + ["-boot", "b"], + ["-device", "virtio-rng-pci"] + ] + shutdown_command = "shutdown -P now" + ssh_password = "${var.ssh_password}" + ssh_username = "${var.ssh_username}" + ssh_wait_timeout = "900m" + vm_name = "gentoo_packer" + vnc_port_max = "5900" + vnc_port_min = "5900" +} diff --git a/image/assets/hcl/variable.pkr.hcl b/image/assets/hcl/variable.pkr.hcl new file mode 100644 index 0000000..3c24852 --- /dev/null +++ b/image/assets/hcl/variable.pkr.hcl @@ -0,0 +1,29 @@ +variable "ansible_extra_vars" { + type = string + default = "" +} + +variable "ansible_provisioning_playbook" { + type = string + default = "/packer/ansible/playbook.yml" +} + +variable "iso_checksum" { + type = string + default = "" +} + +variable "iso_url" { + type = string + default = "" +} + +variable "ssh_password" { + type = string + default = "" +} + +variable "ssh_username" { + type = string + default = "" +} diff --git a/image/assets/run-packer.sh b/image/assets/run-packer.sh new file mode 100755 index 0000000..cac24c9 --- /dev/null +++ b/image/assets/run-packer.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ "$SOURCE_NAME" = "qemu.gentoo" ]; then + VERSION=$(curl -s http://distfiles.gentoo.org/releases/amd64/autobuilds/latest-install-amd64-minimal.txt \ + | grep "^[^#;]" | awk '{print $1}' | cut -d'/' -f1) +fi + +SSH_PUB=$(cat ./id_rsa_qemu.pub) + +export PACKER_LOG=1; packer build --only="$SOURCE_NAME" \ + -var ssh_username="$SSH_LIVE_USERNAME" \ + -var ssh_password="$SSH_LIVE_PASSWORD" \ + -var ansible_extra_vars="$ANSIBLE_EXTRA_VARS ssh_pub=$SSH_PUB" \ + -var ansible_provisioning_playbook="$ANSIBLE_PLAYBOOK" \ + -var iso_checksum="$ISO_CHECKSUM" \ + -var iso_url="$ISO_URL" \ + -on-error="ask" \ + -force \ + /packer/hcl/ diff --git a/packer/assets/ansible/inventory_test.ini b/packer/assets/ansible/inventory_test.ini deleted file mode 100644 index e51dd49..0000000 --- a/packer/assets/ansible/inventory_test.ini +++ /dev/null @@ -1,4 +0,0 @@ -[default] -100.64.0.24 ansible_ssh_pass=toor ansible_ssh_port=5556 ansible_user=root debug=true -;192.168.1.24 ansible_ssh_pass=toor ansible_ssh_port=5556 ansible_user=root debug=true -;192.168.1.22 ansible_ssh_pass=toor ansible_ssh_port=5556 ansible_user=root debug=true diff --git a/packer/assets/ansible/playbook-test.yml b/packer/assets/ansible/playbook-test.yml deleted file mode 100644 index a1ea589..0000000 --- a/packer/assets/ansible/playbook-test.yml +++ /dev/null @@ -1,32 +0,0 @@ ---- - -- hosts: localhost - vars: - my_loop: > - [ - {% for i in range(1, 2) %} - { - 'name':'prefix-{{ i }}' - } - {% if not loop.last %},{% endif %} - {% endfor %} - ] - ips_str: | - {% for idx in range(0,2) %} - - name: 192.168.100.{{ idx }} - test: {{ idx }} - {% endfor %} - ips: "{{ ips_str | from_yaml }}" - - tasks: - - debug: - msg: "{{ my_loop }}" - - debug: - msg: "{{ item.name }}" - loop: "{{ my_loop }}" - - - debug: - msg: "{{ ips }}" - - debug: - msg: "{{ item.name }}" - loop: "{{ ips }}" diff --git a/packer/assets/ansible/run-ansible.sh b/packer/assets/ansible/run-ansible.sh deleted file mode 100755 index 846a204..0000000 --- a/packer/assets/ansible/run-ansible.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -PLAYBOOK="${1:-playbook.yml}" -#DEBUG="-vvv" -TAGS="--tags configure" - -# run playbook on aready running qemu vm -ansible-playbook $DEBUG -i inventory_test.ini $TAGS --extra-vars "ssh_pub=$(cat ../id_rsa_qemu) generated_user=antoine generated_group=antoine" $PLAYBOOK diff --git a/packer/assets/gentoo.json b/packer/assets/gentoo.json deleted file mode 100644 index 09d8ca8..0000000 --- a/packer/assets/gentoo.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "builders": - [ - { - "type": "qemu", - "accelerator": "kvm", - "headless": true, - "qemuargs": [ - ["-boot", "b" ], - ["-device", "virtio-rng-pci"] - ], - "memory": "1024", - "cpus": "2", - "use_backing_file": "true", - "format": "qcow2", - "net_device": "virtio-net", - - "disk_interface": "virtio", - "disk_size": "80g", - "disk_image": "true", - "disk_compression": "true", - "disk_additional_size": [], - - "iso_urls": [ - "/packer/install-amd64-minimal-20200205T214502Z.iso", - "http://distfiles.gentoo.org/releases/amd64/autobuilds/current-install-amd64-minimal//install-amd64-minimal-{{user `version`}}.iso" - ], - "iso_checksum_type": "file", - "iso_checksum_url": "/packer/install-amd64-minimal-20200205T214502Z.iso.DIGESTS", - "vm_name": "gentoo_packer.qcow2", - "output_directory": "output_gentoo_qcow2", - - "http_directory": "/packer/httpdir", - "http_port_min": 10082, - "http_port_max": 10082, - - "ssh_host_port_min": 2229, - "ssh_host_port_max": 2229, - - "ssh_host": "127.0.0.1", - "ssh_port": "22", - "ssh_username": "{{user `ssh_username`}}", - "ssh_password": "{{user `ssh_password`}}", - - "ssh_wait_timeout": "900m", - - "vnc_port_min": "5900", - "vnc_port_max": "5900", - - "boot_wait": "3s", - "boot_command": - [ - "gentoo-nofb", - "", - "", - "", - "", - "passwd {{user `ssh_username`}}", - "", - "", - "{{user `ssh_password`}}", - "", - "", - "{{user `ssh_password`}}", - "", - "", - "sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config", - "", - "", - "echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config", - "", - "", - "/etc/init.d/sshd start", - "", - "" - ], - - "shutdown_command": "shutdown -P now" - } - ], - "provisioners": - [ - { - "type": "ansible", - "playbook_file": "/packer/ansible/playbook.yml", - "extra_arguments": [ "--extra-vars", "ssh_pub={{user `ssh_pub_key`}} generated_user={{user `generated_user`}} generated_group={{user `generated_group`}} gentoo_version={{user `version`}}" ], - "groups": "default", - "user": "root", - "ansible_env_vars": [ "ANSIBLE_CONFIG=/packer/ansible/ansible.cfg" ] - } - ], - "variables": { - "ssh_username": "root", - "ssh_password": "CHANGEME", - "ssh_pub_key": "", - "generated_user": "antoine", - "generated_group": "antoine", - "version": "20200205T214502Z" - } -} diff --git a/packer/assets/httpdir/gentoo_save.json b/packer/assets/httpdir/gentoo_save.json deleted file mode 100644 index 99d65b9..0000000 --- a/packer/assets/httpdir/gentoo_save.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "builders": - [ - { - "type": "qemu", - "accelerator": "kvm", - "headless": true, - "qemuargs": [ - ["-serial", "file:serial.out" ], - [ "-netdev", "user,hostfwd=tcp::{{ .SSHHostPort }}-:22,,hostfwd=tcp::5959-:{{ . }},id=forward"] - ], - "memory": "1g", - "cpus": "2", - "disk_interface": "virtio", - "disk_size": "5000M", - "disk_image": "true", - "use_backing_file": "true", - "format": "qcow2", - "net_device": "virtio-net", - - "iso_url": "http://ftp.uni-stuttgart.de/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-minimal.iso", - "iso_checksum": "9bea61ff620257c3343eb3c588c555800488ace01602b7a0e4f89d09a3f976851a81b6501d79cb3696696675b4724c9da82913e4a036f7874a55bfe2b91ee994", - "iso_checksum_type": "sha512", - - "vm_name": "gentoo_packer", - "output_directory": "output_gentoo_qcow2", - - "http_directory": "/packer/httpdir", - "http_port_min": 10082, - "http_port_max": 10089, - - "ssh_host_port_min": 2222, - "ssh_host_port_max": 2229, - - "ssh_username": "root", - "ssh_password": "MySecretPassword", - - "ssh_port": 22, - "ssh_wait_timeout": "900m", - - "boot_wait": "5s", - "boot_command": - [ - "", - "text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/provision_gentoo.sh", - "chmod +x provision_gentoo.sh && ./provision_gentoo.sh" - ], - - "shutdown_command": "shutdown -P now" - }, - { - "type": "hyperv-iso", - "boot_command": [ - "", - "", - "", - "", - "", - "wget http://{{ .HTTPIP }}:{{ .HTTPPort }}/provision_gentoo.sh", - "echo http://{{ .HTTPIP }}:{{ .HTTPPort }} > /root/config_server_uri", - "chmod +x provision_gentoo.sh && ./provision_gentoo.sh", - "", - " append console=ttyS0,115200n8 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/centos6-ks.cfg", - "", - "", - "text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/c7-kvm-ks.cfg" - ], - "boot_wait": "10s", - "disk_size": 32768, - "http_directory": ".", - "iso_url": "http://vagrant.widgit.com/gentoo.php", - "iso_checksum_type": "none", - "communicator": "ssh", - "ssh_username": "vagrant", - "ssh_password": "vagrant", - "ssh_port": 22, - "ssh_timeout": "4h", - "shutdown_command": "sudo systemctl poweroff", - "vm_name": "gentoo-minimal", - "generation": 1, - "ram_size": "4096", - "enable_dynamic_memory": false, - "cpu": 4 - } - ], - "provisioners": - [ - { - "type": "shell", - "inline": [ - "sleep 3", - "rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm", - "yum -y update", - "yum -y install cloud-init cloud-utils-growpart dracut-modules-growroot", - "echo \"NOZEROCONF=yes\" >> /etc/sysconfig/network", - "adduser build-user", - "echo 'build-user:MySecretPassword' |chpasswd", - "mkdir /home/build-user/.ssh", - "chown build-user:build-user /home/build-user/.ssh", - "chmod 700 /home/build-user/.ssh", - "echo \"build-user ALL=(ALL) ALL\" >> /etc/sudoers", - "yum clean cache", - "yum clean all" - ] - }, - { - "type": "file", - "source": "centos.json", - "destination": "/root/centos.json", - "source": "httpdir/centos6-ks.cfg", - "destination": "/root/centos6-ks.cfg" - }, - { - "type": "file", - "source": "id_rsa_cloud-user.pub", - "destination": "/home/build-user/.ssh/authorized_keys" - }, - { - "type": "shell", - "inline": [ - "chmod 600 /home/build-user/.ssh/authorized_keys", - "chown build-user:build-user /home/build-user/.ssh/authorized_keys", - "sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config", - "echo package_upgrade: true >>/etc/cloud/cloud.cfg" - ] - }, - { - "type": "file", - "source": "/packer/id_rsa_qemu.pub", - "destination": "/root/.ssh/authorized_keys" - }, - { - "type": "shell", - "inline": [ - "chown root:root /root/.ssh/authorized_keys", - "chmod 600 /root/.ssh/authorized_keys", - "sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config", - "echo package_upgrade: true >>/etc/cloud/cloud.cfg" - ] - } - ] -} diff --git a/packer/assets/httpdir/provision_gentoo.sh b/packer/assets/httpdir/provision_gentoo.sh deleted file mode 100644 index 2681af7..0000000 --- a/packer/assets/httpdir/provision_gentoo.sh +++ /dev/null @@ -1,147 +0,0 @@ -#!/bin/bash - -set -e -set -x - -# disable blanking so we can look for problems on the VM console -setterm -blank 0 -powersave off - -# This will have been written out by the typed boot command -export CONFIG_SERVER_URI=`cat /root/config_server_uri` - -# Pipe some commands into fdisk to partition -# Works better than sfdisk as the size of the final partition is flexible -echo "Partitioning SDA" - -fdisk /dev/sda < /dev/null && echo "j" || echo "-J") - if [ "x$DECOMPRESS_FLAG" == "x-J" ]; then - DECOMPRESS_FLAG=' -J' - fi - - curl -SsLl "http://vagrant.widgit.com/gentoo.php?file=stage3" | tar xp$DECOMPRESS_FLAG -C /mnt/gentoo --xattrs --numeric-owner && break - sleep 30 -done - -# modify the chroot with some custom settings -echo "Setting up chroot configuration" - -# configure portage -cat >> /mnt/gentoo/etc/portage/make.conf <> /mnt/gentoo/etc/portage/make.conf - -# package-specific configuration and unmasks -mkdir -p /mnt/gentoo/etc/portage/package.accept_keywords -mkdir -p /mnt/gentoo/etc/portage/package.use -touch /mnt/gentoo/etc/portage/package.accept_keywords/zzz-autounmask -touch /mnt/gentoo/etc/portage/package.use/zzz-autounmask - -echo "sys-kernel/gentoo-sources" > /mnt/gentoo/etc/portage/package.accept_keywords/kernel - -echo "sys-kernel/gentoo-sources symlink experimental" > /mnt/gentoo/etc/portage/package.use/kernel -echo "sys-boot/grub efiemu -fonts -nls -themes" > /mnt/gentoo/etc/portage/package.use/grub -echo "sys-apps/systemd nat" > /mnt/gentoo/etc/portage/package.use/systemd - -# Locale and time -echo "Etc/UTC" > /mnt/gentoo/etc/timezone -cat > /mnt/gentoo/etc/locale.gen < /mnt/gentoo/etc/fstab <> /usr/share/genkernel/arch/x86_64/modules_load - echo 'modules="hv_storvsc hv_netvsc hv_vmbus hv_utils hv_balloon"' >> /etc/conf.d/modules - sed -ri "s/(HWOPTS='.*)'/\1 hyperv'/" /usr/share/genkernel/defaults/initrd.defaults -fi - -# Build the kernel with genkernel -echo "Building the kernel" - -genkernel --kernel-config=/etc/kernels/kernel_config --makeopts=-j5 all - -# Build & install the VM tools - -# If we're running on hyper-v, enable the tools -if [ "$(dmidecode -s system-manufacturer)" == "Microsoft Corporation" ]; then - # kernel modules are already built in the kernel - cd /usr/src/linux/tools/hv - make - cp hv_fcopy_daemon hv_vss_daemon hv_kvp_daemon /usr/sbin - - systemctl enable hv_fcopy_daemon.service - systemctl enable hv_vss_daemon.service - systemctl enable hv_kvp_daemon.service -elif [ "$(dmidecode -s system-product-name)" == "VirtualBox" ]; then - # Install VirtualBox from portage - echo "app-emulation/virtualbox-guest-additions ~amd64" > /etc/portage/package.accept_keywords/virtualbox - emerge app-emulation/virtualbox-guest-additions - - systemctl enable virtualbox-guest-additions.service -elif [ "$(dmidecode -s system-product-name)" == "VMware Virtual Platform" ]; then - echo "app-emulation/open-vm-tools ~amd64" > /etc/portage/package.accept_keywords/vmware - emerge app-emulation/open-vm-tools - - systemctl enable vmtoolsd -else - echo "Unknown hypervisor! :(" 1>&2 - exit 1 -fi - -# Set up the things we need for a base system -echo "Configuring up the base system" - -# sudo and cron -echo "app-admin/sudo -sendmail" > /etc/portage/package.use/sudo -emerge sys-process/cronie app-admin/sudo - -# systemd setup and hostname -systemd-machine-id-setup --commit # remember to remove this before packaging the box -echo "gentoo-minimal" > /etc/hostname -echo "127.0.1.1 gentoo-minimal.local gentoo-minimal" >> /etc/hosts - -# networking -cat > /etc/systemd/network/50-dhcp.network <> /etc/ssh/sshd_config - -yes YES | etc-update --automode -9 - -# Create the vagrant user with the vagrant public key -echo "Creating Vagrant user" - -date > /etc/vagrant_box_build_time - -useradd -s /bin/bash -m vagrant -echo -e "vagrant\nvagrant" | passwd vagrant - -mkdir -pm 700 /home/vagrant/.ssh -wget -O /home/vagrant/.ssh/authorized_keys \ - 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub' -chmod 0600 /home/vagrant/.ssh/authorized_keys -chown -R vagrant:vagrant /home/vagrant/.ssh - -echo 'vagrant ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers - -# Install grub and hope everything is ready! -echo "Installing bootloader" - -grub-install /dev/sda -grub-mkconfig -o /boot/grub/grub.cfg - -echo "Installing additional tools" -emerge @tools - -echo "Updating resolv.conf" - -rm /etc/resolv.conf -ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf -systemctl enable systemd-resolved.service - -echo "Removing provision script" -rm /root/provision_gentoo_chroot.sh diff --git a/packer/assets/install-amd64-minimal-20200205T214502Z.iso.DIGESTS b/packer/assets/install-amd64-minimal-20200205T214502Z.iso.DIGESTS deleted file mode 100644 index 0a09bff..0000000 --- a/packer/assets/install-amd64-minimal-20200205T214502Z.iso.DIGESTS +++ /dev/null @@ -1,2 +0,0 @@ -9bea61ff620257c3343eb3c588c555800488ace01602b7a0e4f89d09a3f976851a81b6501d79cb3696696675b4724c9da82913e4a036f7874a55bfe2b91ee994 install-amd64-minimal-20200205T214502Z.iso - diff --git a/packer/assets/run-packer.sh b/packer/assets/run-packer.sh deleted file mode 100755 index 0a27608..0000000 --- a/packer/assets/run-packer.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -latest=$(curl -s http://distfiles.gentoo.org/releases/amd64/autobuilds/latest-install-amd64-minimal.txt \ - | grep "^[^#;]" | awk '{print $1}' | cut -d'/' -f1) -SSH_PUB=$(cat ./id_rsa_qemu.pub) - -export PACKER_LOG=1; packer build --only=qemu \ - -var version="$latest" \ - -var ssh_username="root" \ - -var ssh_password="toor" \ - -var ssh_pub_key="$SSH_PUB" \ - -force \ - /packer/gentoo.json diff --git a/test.sh b/test.sh deleted file mode 100755 index a692c7c..0000000 --- a/test.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -qemu-system-x86_64 \ - -cdrom ./packer/assets/install-amd64-minimal-20200205T214502Z.iso \ - -boot order=d -m 1024 \ - -smp cpus=1,sockets=2,maxcpus=2 \ - -drive "file=../../VirtualBox VMs/gentoo_snapshot.cow,format=qcow2,index=1" \ - -device virtio-net,netdev=user.0 \ - -netdev user,id=user.0,hostfwd=tcp::5556-:22 -