Commit 97129b35 authored by Sven-Hendrik Haase's avatar Sven-Hendrik Haase
Browse files

Merge branch 'cli-publish' into 'master'

Perform publish via cli instead of packer

See merge request archlinux/arch-boxes!119
parents cfa3f143 aaa547fa
Pipeline #1822 passed with stages
in 13 minutes and 33 seconds
...@@ -28,8 +28,7 @@ validate-packer: ...@@ -28,8 +28,7 @@ validate-packer:
before_script: before_script:
- pacman -Syu --needed --noconfirm packer - pacman -Syu --needed --noconfirm packer
script: script:
- packer validate -var "iso_checksum_url=https://mirror.pkgbuild.com/iso/latest/sha1sums.txt" -except=publish vagrant.json - packer validate config.json
- packer validate cloud.json
# Note: We explicitly need the `ipv6` tag here because otherwise we'd get random # Note: We explicitly need the `ipv6` tag here because otherwise we'd get random
# gpg/pacman-key issues. # gpg/pacman-key issues.
...@@ -40,7 +39,7 @@ build:cloud-qemu: ...@@ -40,7 +39,7 @@ build:cloud-qemu:
before_script: before_script:
- pacman -Syu --needed --noconfirm packer qemu-headless - pacman -Syu --needed --noconfirm packer qemu-headless
script: script:
- packer build -except=sign cloud.json - packer build -only=cloud -except=sign config.json
artifacts: artifacts:
name: "archlinux_x86_64_qcow2" name: "archlinux_x86_64_qcow2"
paths: paths:
...@@ -54,7 +53,12 @@ build:vagrant-virtualbox: ...@@ -54,7 +53,12 @@ build:vagrant-virtualbox:
before_script: before_script:
- pacman -Syu --needed --noconfirm packer qemu-headless - pacman -Syu --needed --noconfirm packer qemu-headless
script: script:
- packer build -only=virtualbox -except publish vagrant.json - packer build -only=virtualbox config.json
artifacts:
name: "archlinux_x86_64_virtualbox"
paths:
- "*.box"
expire_in: 2d
build:vagrant-qemu: build:vagrant-qemu:
stage: build stage: build
...@@ -63,7 +67,12 @@ build:vagrant-qemu: ...@@ -63,7 +67,12 @@ build:vagrant-qemu:
before_script: before_script:
- pacman -Syu --needed --noconfirm packer qemu-headless - pacman -Syu --needed --noconfirm packer qemu-headless
script: script:
- packer build -only=libvirt -except publish vagrant.json - packer build -only=libvirt config.json
artifacts:
name: "archlinux_x86_64_libvirt"
paths:
- "*.box"
expire_in: 2d
publish: publish:
stage: publish stage: publish
...@@ -71,9 +80,15 @@ publish: ...@@ -71,9 +80,15 @@ publish:
- ipv6 - ipv6
- secure - secure
before_script: before_script:
- pacman -Syu --needed --noconfirm qemu-headless packer - pacman -Syu --needed --noconfirm vagrant
script: script:
- packer build -var "vagrant_cloud_token=$VAGRANT_API_TOKEN" vagrant.json - vagrant cloud auth login --token $VAGRANT_API_TOKEN
- vagrant cloud auth login --check
- vagrant cloud box show archlinux/archlinux
- LIBVIRT_RELEASE=`ls Arch-Linux-x86_64-libvirt-*.box | awk -F "." '{print $1}' | awk -F "-" '{print $5"."$6"."$7}'`
- VIRTUALBOX_RELEASE=`ls Arch-Linux-x86_64-virtualbox-*.box | awk -F "." '{print $1}' | awk -F "-" '{print $5"."$6"."$7}'`
- vagrant cloud publish archlinux/archlinux $LIBVIRT_RELEASE libvirt Arch-Linux-x86_64-libvirt-*.box --release -f
- vagrant cloud publish archlinux/archlinux $VIRTUALBOX_RELEASE virtualbox Arch-Linux-x86_64-virtualbox-*.box --release -f
only: only:
variables: variables:
- $SCHEDULED_PUBLISH == "TRUE" - $SCHEDULED_PUBLISH == "TRUE"
......
...@@ -13,12 +13,10 @@ You'll need the following dependencies: ...@@ -13,12 +13,10 @@ You'll need the following dependencies:
* packer (for basic usage) * packer (for basic usage)
* vagrant (for vagrant images) * vagrant (for vagrant images)
* qemu (for libvirt provider support) * qemu
* virtualbox (for virtualbox support)
## Variables ## Variables
Here is an overview over all variables you can set in `vagrant.json` or Here is an overview over all variables you can set in `config.json`:
`cloud.json`:
* `iso_url`: the url to the ISO. This can be an url or a filepath * `iso_url`: the url to the ISO. This can be an url or a filepath
beginning with `file://` beginning with `file://`
...@@ -28,34 +26,29 @@ Here is an overview over all variables you can set in `vagrant.json` or ...@@ -28,34 +26,29 @@ Here is an overview over all variables you can set in `vagrant.json` or
checksum. checksum.
* `disk_size`: this specifices the disk size in bytes. * `disk_size`: this specifices the disk size in bytes.
* `headless`: this sets GUI on or off. * `headless`: this sets GUI on or off.
* `vagrant_cloud_token`: here you can specify the vagrant cloud token for
uploading your box to the vagrantcloud. If you don't have a vagrant cloud
token you can ignore this variable. Without a token the boxes will be
built, but the upload step step will fail.
* `boot_wait`: this specifies the time packer should wait for booting up * `boot_wait`: this specifies the time packer should wait for booting up
the ISO before entering any command. the ISO before entering any command.
## How to start the build process locally ## How to start the build process locally
If you want to build the boxes locally without uploading them to the Vagrant If you want to build the boxes locally without uploading them to the Vagrant
cloud you need to edit the `vagrant.json` before you start the build. set the cloud. You can start the build for virtualbox only with the following command:
right `iso_url` and the right `iso_checksum_url`. Then you can start the build
for virtualbox only with the following command:
`packer build -only=qemu -except=publish vagrant.json` `packer build -only=qemu config.json`
## How to start the build process for official builds ## How to start the build process for official builds
The official builds are done in our Arch Linux GitLab CI. The official builds are done in our Arch Linux GitLab CI.
`packer build vagrant.json` `packer build config.json`
## Providers ## Providers
* virtualbox-iso * virtualbox
* qemu/libvirt * qemu/libvirt
## Post-processors ## Post-processors
* vagrant * vagrant (*.box)
* cloud (*.qcow2)
## Development workflow ## Development workflow
Merge requests and general development shall be made on the `master` branch. Merge requests and general development shall be made on the `master` branch.
...@@ -91,13 +84,13 @@ one. ...@@ -91,13 +84,13 @@ one.
Start `packer` with `-parallel=false`: Start `packer` with `-parallel=false`:
`packer build -parallel=false vagrant.json` `packer build -parallel=false config.json`
### Checking cloud-init support in our qcow2 images: ### Checking cloud-init support in our qcow2 images:
```bash ```bash
$ packer build cloud.json $ packer build -only=cloud -except=sign config.json
$ cp release/Arch-Linux-cloudimg-amd64-2020-02-24.qcow2 disk.qcow2 $ cp Arch-Linux-cloudimg-2020-02-24.qcow2 disk.qcow2
# Copied from (with minor changes): https://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html # Copied from (with minor changes): https://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html
$ { echo instance-id: iid-local01; echo local-hostname: cloudimg; } > meta-data $ { echo instance-id: iid-local01; echo local-hostname: cloudimg; } > meta-data
...@@ -105,7 +98,7 @@ $ { echo instance-id: iid-local01; echo local-hostname: cloudimg; } > meta-data ...@@ -105,7 +98,7 @@ $ { echo instance-id: iid-local01; echo local-hostname: cloudimg; } > meta-data
$ printf "#cloud-config\npassword: passw0rd\nchpasswd: { expire: False }\nssh_pwauth: True\n" > user-data $ printf "#cloud-config\npassword: passw0rd\nchpasswd: { expire: False }\nssh_pwauth: True\n" > user-data
## create a disk to attach with some user-data and meta-data (require cdrkit) ## create a disk to attach with some user-data and meta-data (require cdrkit)
$ genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data $ genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data
## create a new qcow image to boot, backed by your original image ## create a new qcow image to boot, backed by your original image
$ qemu-img create -f qcow2 -b disk.qcow2 boot-disk.qcow2 $ qemu-img create -f qcow2 -b disk.qcow2 boot-disk.qcow2
......
{
"variables": {
"iso_url": "https://mirror.pkgbuild.com/iso/latest/archlinux-{{isotime \"2006.01\"}}.01-x86_64.iso",
"iso_checksum_url": "https://mirror.pkgbuild.com/iso/latest/sha1sums.txt",
"disk_size": "20480",
"headless": "true",
"boot_wait": "60s",
"accelerator": "",
"mirror": "https://mirror.pkgbuild.com/$repo/os/$arch"
},
"builders": [
{
"type": "qemu",
"cpus": 2,
"memory": 1024,
"boot_wait": "{{user `boot_wait`}}",
"http_directory": "http",
"disk_size": "{{user `disk_size`}}",
"disk_discard": "unmap",
"iso_checksum": "file:{{user `iso_checksum_url`}}",
"iso_url": "{{user `iso_url`}}",
"ssh_username": "arch",
"ssh_password": "arch",
"ssh_port": 22,
"ssh_timeout": "2000s",
"shutdown_command": "sudo systemctl poweroff",
"vm_name": "Arch-Linux-x86_64-cloudimg-{{isotime \"2006-01-02\"}}.qcow2",
"headless": "{{user `headless`}}",
"accelerator": "{{user `accelerator`}}",
"disk_compression": true,
"boot_command": [
"<enter><wait10><wait10><wait10><wait10><wait10><enter><enter>",
"curl -O 'http://{{.HTTPIP}}:{{.HTTPPort}}/install{,-common,-cloud}.sh'<enter><wait>",
"MIRROR='{{user `mirror`}}' bash install.sh < <(cat install-{cloud,common}.sh) && systemctl reboot<enter>"
]
}
],
"provisioners": [
{
"type": "shell",
"scripts": [
"provision/postinstall.sh",
"provision/qemu.sh",
"provision/cloud-init.sh",
"provision/cleanup.sh"
],
"execute_command": "echo 'arch'|sudo -S sh '{{.Path}}'"
}
],
"post-processors": [
[
{
"type": "checksum",
"checksum_types": [
"sha256"
],
"output": "Arch-Linux-x86_64-cloudimg-{{isotime \"2006-01-02\"}}.SHA256"
},
{
"name": "rename",
"type": "shell-local",
"inline": [
"mv output-qemu/Arch-Linux-x86_64-cloudimg-{{isotime \"2006-01-02\"}}.qcow2 Arch-Linux-x86_64-cloudimg-{{isotime \"2006-01-02\"}}.qcow2"
]
},
{
"name": "sign",
"type": "shell-local",
"inline": [
"gpg --sign --detach-sign Arch-Linux-x86_64-cloudimg-{{isotime \"2006-01-02\"}}.SHA256"
]
}
]
]
}
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
"iso_checksum_url": "https://mirror.pkgbuild.com/iso/latest/sha1sums.txt", "iso_checksum_url": "https://mirror.pkgbuild.com/iso/latest/sha1sums.txt",
"disk_size": "20480", "disk_size": "20480",
"headless": "true", "headless": "true",
"vagrant_cloud_token": "PLACEHOLDER",
"boot_wait": "60s", "boot_wait": "60s",
"accelerator": "", "accelerator": "",
"mirror": "https://mirror.pkgbuild.com/$repo/os/$arch" "mirror": "https://mirror.pkgbuild.com/$repo/os/$arch"
...@@ -59,6 +58,32 @@ ...@@ -59,6 +58,32 @@
"curl -O 'http://{{.HTTPIP}}:{{.HTTPPort}}/install{,-common,-chroot}.sh'<enter><wait>", "curl -O 'http://{{.HTTPIP}}:{{.HTTPPort}}/install{,-common,-chroot}.sh'<enter><wait>",
"MIRROR='{{user `mirror`}}' bash install.sh < <(cat install-{chroot,common}.sh) && systemctl reboot<enter>" "MIRROR='{{user `mirror`}}' bash install.sh < <(cat install-{chroot,common}.sh) && systemctl reboot<enter>"
] ]
},
{
"type": "qemu",
"name": "cloud",
"cpus": 2,
"memory": 1024,
"boot_wait": "{{user `boot_wait`}}",
"http_directory": "http",
"disk_size": "{{user `disk_size`}}",
"disk_discard": "unmap",
"iso_checksum": "file:{{user `iso_checksum_url`}}",
"iso_url": "{{user `iso_url`}}",
"ssh_username": "arch",
"ssh_password": "arch",
"ssh_port": 22,
"ssh_timeout": "2000s",
"shutdown_command": "sudo systemctl poweroff",
"vm_name": "Arch-Linux-x86_64-cloudimg-{{isotime \"2006-01-02\"}}.qcow2",
"headless": "{{user `headless`}}",
"accelerator": "{{user `accelerator`}}",
"disk_compression": true,
"boot_command": [
"<enter><wait10><wait10><wait10><wait10><wait10><enter><enter>",
"curl -O 'http://{{.HTTPIP}}:{{.HTTPPort}}/install{,-common,-cloud}.sh'<enter><wait>",
"MIRROR='{{user `mirror`}}' bash install.sh < <(cat install-{cloud,common}.sh) && systemctl reboot<enter>"
]
} }
], ],
"provisioners": [ "provisioners": [
...@@ -85,6 +110,19 @@ ...@@ -85,6 +110,19 @@
"only": [ "only": [
"libvirt" "libvirt"
] ]
},
{
"type": "shell",
"scripts": [
"provision/postinstall.sh",
"provision/qemu.sh",
"provision/cloud-init.sh",
"provision/cleanup.sh"
],
"execute_command": "echo 'arch'|sudo -S sh '{{.Path}}'",
"only": [
"cloud"
]
} }
], ],
"post-processors": [ "post-processors": [
...@@ -111,18 +149,54 @@ ...@@ -111,18 +149,54 @@
] ]
}, },
{ {
"name": "publish",
"type": "vagrant", "type": "vagrant",
"except": [
"cloud"
],
"keep_input_artifact": false, "keep_input_artifact": false,
"output": "Arch-Linux-x86_64-{{ .Provider }}-{{isotime \"2006-01-02\"}}.box", "output": "Arch-Linux-x86_64-{{ .Provider }}-{{isotime \"2006-01-02\"}}.box",
"provider_override": "{{build_name}}" "provider_override": "{{build_name}}"
}, },
{ {
"type": "vagrant-cloud", "name": "cleanup",
"access_token": "{{user `vagrant_cloud_token`}}", "type": "shell-local",
"box_tag": "archlinux/archlinux", "only": [
"version": "{{isotime \"2006.01.02\"}}" "virtualbox"
],
"inline": [
"rm -r output-virtualbox"
]
},
{
"type": "checksum",
"only": [
"cloud"
],
"checksum_types": [
"sha256"
],
"output": "Arch-Linux-x86_64-cloudimg-{{isotime \"2006-01-02\"}}.SHA256"
},
{
"name": "rename",
"type": "shell-local",
"only": [
"cloud"
],
"inline": [
"mv output-cloud/Arch-Linux-x86_64-cloudimg-{{isotime \"2006-01-02\"}}.qcow2 Arch-Linux-x86_64-cloudimg-{{isotime \"2006-01-02\"}}.qcow2 && rm -r output-cloud"
]
},
{
"name": "sign",
"type": "shell-local",
"only": [
"cloud"
],
"inline": [
"gpg --sign --detach-sign Arch-Linux-x86_64-cloudimg-{{isotime \"2006-01-02\"}}.SHA256"
]
} }
] ]
] ]
} }
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment