diff --git a/README.md b/README.md index 312ca759a..c62a127c4 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,8 @@ https://app.vagrantup.com/lavabit https://app.vagrantup.com/lineage ## Docker Images -https://hub.docker.com/r/lavabit/ +https://hub.docker.com/u/roboxes/ +https://hub.docker.com/u/lavabit/ The templates in this repo require a current version of packer, (1.3.4+) and in some cases, make use of features which haven't been officially merged and/or released yet. Use the res/providers/packer.sh script to build an appropriately patched packer binary. @@ -26,18 +27,13 @@ Generate docker variants for the RHEL/Oracle/Ubuntu/Debian/Alpine configurations Add upload/delete/release functions to robox.sh Add vagrant user password randomization logic to the bundled Vagrantfiles Add init based test, and SSH command test to the box test and check script +Ad `IPQoS lowdelay throughput` to the relevant configs to solve the [OpenSSH bug](https://github.com/hashicorp/vagrant/issues/10730) + ## Pending Additions [Devuan 1.0/2.0](https://devuan.org/) -## Works in Progress - -[HardenedBSD 12](https://hardenedbsd.org/) -[Debian 10](https://wiki.debian.org/DebianBuster) -[Ubuntu 19.04](https://wiki.ubuntu.com/DiscoDingo) -[Alpine 3.9](https://www.alpinelinux.org) - ## Operating System Requests The following operating systems have been requested by a member of the robox community, but require a volunteer, so they can be incorporated into the robox workflow. @@ -77,4 +73,4 @@ Bitcoin Bitcoin Cash qqxyedtn68jg84w4mkd3vsw2nu6pgkydnudza0ed0m - \ No newline at end of file + diff --git a/developer-hyperv.json b/developer-hyperv.json index 85932f7d5..50414b7b1 100644 --- a/developer-hyperv.json +++ b/developer-hyperv.json @@ -65,8 +65,8 @@ " ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/magma.centos6.developer.ks" ], "disk_size": 131072, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", "iso_url": "https://mirrors.edge.kernel.org/centos/6.10/isos/x86_64/CentOS-6.10-x86_64-minimal.iso", "iso_checksum": "7c0dee2a0494dabd84809b72ddb4b761f9ef92b78a506aef709b531c54d30770", diff --git a/developer-virtualbox.json b/developer-virtualbox.json index 9a0fd2914..7a54e67ad 100644 --- a/developer-virtualbox.json +++ b/developer-virtualbox.json @@ -88,8 +88,8 @@ "ssh_port": 22, "ssh_wait_timeout": "7200s", "shutdown_command": "sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" } diff --git a/evilpot-virtualbox.json b/evilpot-virtualbox.json index 0cd367cf4..8c8722c88 100644 --- a/evilpot-virtualbox.json +++ b/evilpot-virtualbox.json @@ -5,35 +5,40 @@ "provisioners": [ { "scripts": [ - "scripts/ubuntu1604/apt.sh", - "scripts/ubuntu1604/network.sh" + "scripts/evilpot/apt.sh", + "scripts/evilpot/network.sh" ], "type": "shell", "start_retry_timeout": "15m", "expect_disconnect": "true", "only": [ - "evilpot-ubuntu1604-virtualbox" + "evilpot-virtualbox", + "evilpot-virtualbox", + "evilpot-virtualbox", + "evilpot-virtualbox" ] }, { "scripts": [ - "scripts/ubuntu1604/limits.sh", - "scripts/ubuntu1604/floppy.sh", - "scripts/ubuntu1604/vagrant.sh", - "scripts/ubuntu1604/motd.sh", - "scripts/ubuntu1604/fixtty.sh", - "scripts/ubuntu1604/virtualbox.sh", - "scripts/ubuntu1604/parallels.sh", - "scripts/ubuntu1604/vmware.sh", - "scripts/ubuntu1604/qemu.sh", - "scripts/ubuntu1604/cleanup.sh" + "scripts/evilpot/limits.sh", + "scripts/evilpot/floppy.sh", + "scripts/evilpot/vagrant.sh", + "scripts/evilpot/motd.sh", + "scripts/evilpot/fixtty.sh", + "scripts/evilpot/virtualbox.sh", + "scripts/evilpot/parallels.sh", + "scripts/evilpot/qemu.sh", + "scripts/evilpot/cleanup.sh" ], "type": "shell", "pause_before": "120s", "start_retry_timeout": "15m", "expect_disconnect": "true", "only": [ - "evilpot-ubuntu1604-virtualbox" + "evilpot-virtualbox", + "evilpot-virtualbox", + "evilpot-virtualbox", + "evilpot-virtualbox" ] }, { @@ -42,20 +47,24 @@ "source": "res/blobs/system-blobs.tar.gz", "destination": "/home/vagrant/system-blobs.tar.gz", "only": [ - - "evilpot-ubuntu1604-virtualbox" + "evilpot-virtualbox", + "evilpot-virtualbox", + "evilpot-virtualbox", + "evilpot-virtualbox" ] }, { "scripts": [ - "scripts/ubuntu1604/evilpot.sh" + "scripts/evilpot/evilpot.sh" ], "type": "shell", "start_retry_timeout": "15m", "expect_disconnect": "true", "only": [ - - "evilpot-ubuntu1604-virtualbox" + "evilpot-virtualbox", + "evilpot-virtualbox", + "evilpot-virtualbox", + "evilpot-virtualbox" ] }, { @@ -74,11 +83,206 @@ } ], "builders": [ - { + { + "type": "virtualbox-iso", + "name": "evilpot-virtualbox", + "vm_name": "evilpot-virtualbox", + "output_directory": "output/evilpot-virtualbox", + "boot_wait": "20s", + "boot_command": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "/install/vmlinuz ", + "initrd=/install/initrd.gz ", + "auto-install/enable=true ", + "debconf/priority=critical ", + "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/evilpot.vagrant.cfg ", + "" + ], + "disk_size": 196608, + "vboxmanage": [ + [ + "modifyvm", + "{{.Name}}", + "--memory", + "2048" + ], + [ + "modifyvm", + "{{.Name}}", + "--vram", + "64" + ], + [ + "modifyvm", + "{{.Name}}", + "--cpus", + "4" + ] + ], + "guest_os_type": "Ubuntu_64", + "http_directory": "http", + "headless": true, + "vrdp_bind_address": "127.0.0.1", + "vrdp_port_min": 11000, + "vrdp_port_max": 12000, + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", + "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", + "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_path": "VBoxGuestAdditions.iso", + "virtualbox_version_file": "VBoxVersion.txt" + }, + { + "type": "virtualbox-iso", + "name": "evilpot-virtualbox", + "vm_name": "evilpot-virtualbox", + "output_directory": "output/evilpot-virtualbox", + "boot_wait": "20s", + "boot_command": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "/install/vmlinuz ", + "initrd=/install/initrd.gz ", + "auto-install/enable=true ", + "debconf/priority=critical ", + "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/evilpot.vagrant.cfg ", + "" + ], + "disk_size": 196608, + "vboxmanage": [ + [ + "modifyvm", + "{{.Name}}", + "--memory", + "2048" + ], + [ + "modifyvm", + "{{.Name}}", + "--vram", + "64" + ], + [ + "modifyvm", + "{{.Name}}", + "--cpus", + "4" + ] + ], + "guest_os_type": "Ubuntu_64", + "http_directory": "http", + "headless": true, + "vrdp_bind_address": "127.0.0.1", + "vrdp_port_min": 11000, + "vrdp_port_max": 12000, + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", + "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", + "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_path": "VBoxGuestAdditions.iso", + "virtualbox_version_file": "VBoxVersion.txt" + }, + { + "type": "virtualbox-iso", + "name": "evilpot-virtualbox", + "vm_name": "evilpot-virtualbox", + "output_directory": "output/evilpot-virtualbox", + "boot_wait": "20s", + "boot_command": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "/install/vmlinuz ", + "initrd=/install/initrd.gz ", + "auto-install/enable=true ", + "debconf/priority=critical ", + "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/evilpot.vagrant.cfg ", + "" + ], + "disk_size": 196608, + "vboxmanage": [ + [ + "modifyvm", + "{{.Name}}", + "--memory", + "2048" + ], + [ + "modifyvm", + "{{.Name}}", + "--vram", + "64" + ], + [ + "modifyvm", + "{{.Name}}", + "--cpus", + "4" + ] + ], + "guest_os_type": "Ubuntu_64", + "http_directory": "http", + "headless": true, + "vrdp_bind_address": "127.0.0.1", + "vrdp_port_min": 11000, + "vrdp_port_max": 12000, + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", + "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", + "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_path": "VBoxGuestAdditions.iso", + "virtualbox_version_file": "VBoxVersion.txt" + }, + { "type": "virtualbox-iso", - "name": "evilpot-ubuntu1604-virtualbox", - "vm_name": "evilpot-ubuntu1604-virtualbox", - "output_directory": "output/evilpot-ubuntu1604-virtualbox", + "name": "evilpot-virtualbox", + "vm_name": "evilpot-virtualbox", + "output_directory": "output/evilpot-virtualbox", "boot_wait": "20s", "boot_command": [ "", @@ -96,7 +300,7 @@ "initrd=/install/initrd.gz ", "auto-install/enable=true ", "debconf/priority=critical ", - "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/evilpot.ubuntu1604.vagrant.cfg ", + "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/evilpot.vagrant.cfg ", "" ], "disk_size": 196608, diff --git a/generic-docker.json b/generic-docker.json index 11519a7bb..a2329db13 100644 --- a/generic-docker.json +++ b/generic-docker.json @@ -189,6 +189,34 @@ "generic-oracle7-docker" ] }, + { + "type": "shell", + "scripts": [ + "scripts/oracle8/network.sh", + "scripts/oracle8/yum.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-oracle8-docker" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/oracle8/floppy.sh", + "scripts/oracle8/cleanup.sh", + "scripts/oracle8/dockerize.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-oracle8-docker" + ] + }, { "type": "file", "direction": "download", @@ -266,7 +294,7 @@ "qemu_binary": "/usr/libexec/qemu-kvm", "boot_wait": "20s", "boot_command": [ - "text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.oracle7.vagrant.ks" + "text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.oracle7.docker.ks" ], "format": "qcow2", "disk_size": 32768, @@ -289,10 +317,47 @@ "iso_checksum": "a3156e9dc53ace74b81f6e37f284b74498057efd02babebd88aa2a51cc44d7e7", "iso_checksum_type": "sha256", "ssh_username": "root", - "ssh_password": "vagrant", + "ssh_password": "locked", "ssh_port": 22, "ssh_wait_timeout": "3600s", - "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now" + "shutdown_command": "echo 'locked' | sudo -S shutdown -P now" + }, + { + "type": "qemu", + "name": "generic-oracle8-docker", + "vm_name": "generic-oracle8-docker", + "output_directory": "output/generic-oracle8-docker", + "accelerator": "kvm", + "qemu_binary": "/usr/libexec/qemu-kvm", + "boot_wait": "20s", + "boot_command": [ + "text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.oracle8.docker.ks" + ], + "format": "qcow2", + "disk_size": 32768, + "disk_discard": "unmap", + "disk_cache": "unsafe", + "disk_compression": true, + "disk_interface": "virtio-scsi", + "net_device": "virtio-net", + "cpus": 2, + "memory": 2048, + "qemuargs": [ + [ + "-drive", + "if=none,file=output/generic-oracle8-docker/generic-oracle8-docker,id=drive0,cache=unsafe,discard=unmap,detect-zeroes=unmap,format=qcow2" + ] + ], + "http_directory": "http", + "headless": true, + "iso_url": "https://download.oracle.com/otn-pub/otn_software/linux/OracleLinux-R8-U0-BETA-x86_64-dvd.iso", + "iso_checksum": "3872f95ad0b119839f01aa665d2342701fff66fefdac040b039fcb61c65b2c44", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "locked", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'locked' | sudo -S shutdown -P now" }, { "type": "qemu", @@ -396,8 +461,8 @@ ], "http_directory": "http", "headless": true, - "iso_urls": "https://archive.org/download/rhel-8.0-beta-1-x86_64-dvd/rhel-8.0-beta-1-x86_64-dvd.iso", - "iso_checksum": "06bec9e7de3ebfcdb879804be8c452b69ba3e046daedac3731e1ccd169cfd316", + "iso_urls": "https://archive.org/download/rhel-8.0-x86_64-dvd/rhel-8.0-x86_64-dvd.iso", + "iso_checksum": "005d4f88fff6d63b0fc01a10822380ef52570edd8834321de7be63002cc6cc43", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", diff --git a/generic-hyperv.json b/generic-hyperv.json index 38704005e..ac474dade 100644 --- a/generic-hyperv.json +++ b/generic-hyperv.json @@ -1189,6 +1189,137 @@ "generic-ubuntu1904-hyperv" ] }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/fixdns.sh", + "scripts/fedora30/dnf.sh" + ], + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-hyperv" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/base.sh" + ], + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-hyperv" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/kernel.sh", + "scripts/fedora30/vga.sh", + "scripts/fedora30/virtualbox.sh", + "scripts/fedora30/parallels.sh", + "scripts/fedora30/vmware.sh", + "scripts/fedora30/qemu.sh", + "scripts/fedora30/vagrant.sh", + "scripts/fedora30/tuning.sh" + ], + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-hyperv" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/oracle8/network.sh", + "scripts/oracle8/yum.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-oracle8-hyperv" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/oracle8/kernel.sh", + "scripts/oracle8/floppy.sh", + "scripts/oracle8/virtualbox.sh", + "scripts/oracle8/parallels.sh", + "scripts/oracle8/vmware.sh", + "scripts/oracle8/qemu.sh", + "scripts/oracle8/vagrant.sh", + "scripts/oracle8/tuning.sh", + "scripts/oracle8/cleanup.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-oracle8-hyperv" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/alpine310/network.sh", + "scripts/alpine310/apk.sh" + ], + "execute_command": "/bin/sh '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-alpine310-hyperv" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/alpine310/lsb.sh", + "scripts/alpine310/floppy.sh", + "scripts/alpine310/vagrant.sh", + "scripts/alpine310/sshd.sh", + "scripts/alpine310/virtualbox.sh", + "scripts/alpine310/parallels.sh", + "scripts/alpine310/vmware.sh", + "scripts/alpine310/qemu.sh", + "scripts/alpine310/cache.sh" + ], + "execute_command": "/bin/bash '{{.Path}}'", + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-alpine310-hyperv" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/opensuse15/zypper.sh", + "scripts/opensuse15/virtualbox.sh", + "scripts/opensuse15/parallels.sh", + "scripts/opensuse15/vmware.sh", + "scripts/opensuse15/qemu.sh", + "scripts/opensuse15/vagrant.sh", + "scripts/opensuse15/network.sh", + "scripts/opensuse15/floppy.sh", + "scripts/opensuse15/postfix.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-opensuse15-hyperv" + ] + }, { "type": "shell", "scripts": [ @@ -1214,8 +1345,8 @@ "text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.oracle7.vagrant.ks" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://mirrors.kernel.org/oracle/OL7/u6/x86_64/OracleLinux-R7-U6-Server-x86_64-dvd.iso", "iso_checksum": "a3156e9dc53ace74b81f6e37f284b74498057efd02babebd88aa2a51cc44d7e7", @@ -1230,7 +1361,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1249,8 +1380,8 @@ "" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://mirrors.edge.kernel.org/opensuse/distribution/leap/42.3/iso/openSUSE-Leap-42.3-NET-x86_64.iso", "iso_checksum": "d1a17116cf33a5582b83ef479d7b151b33938e60f07eebc544abf162e2aa5c12", @@ -1265,7 +1396,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1291,8 +1422,8 @@ "chroot /mnt rc-update add hv_kvp_daemon default && chroot /mnt rc-update add hv_vss_daemon default && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.5/releases/x86_64/alpine-vanilla-3.5.3-x86_64.iso", "iso_checksum": "3cca39f256f6a11d89a1c89a54982e9806d3df0fd785dc66ff26d3c670c3d648", @@ -1307,7 +1438,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1333,11 +1464,11 @@ "chroot /mnt rc-update add hv_kvp_daemon default && chroot /mnt rc-update add hv_vss_daemon default && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.3-x86_64.iso", - "iso_checksum": "9129a3982364254cf9dd563d75a6a4a396a8aa941671a51de4667de8423ffb37", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.5-x86_64.iso", + "iso_checksum": "b5936e27487e605ea3cbf040d444505ea7fd735021258d7b119faaa9b4b5b083", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1349,7 +1480,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1375,11 +1506,11 @@ "chroot /mnt rc-update add hv_kvp_daemon default && chroot /mnt rc-update add hv_vss_daemon default && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.7/releases/x86_64/alpine-virt-3.7.1-x86_64.iso", - "iso_checksum": "69e30614159cc93b7327059b56a542faca8a2fd6f4a5ace33a2e5130c5c02e7f", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.7/releases/x86_64/alpine-virt-3.7.3-x86_64.iso", + "iso_checksum": "2f7a23fc31a6f67348e5614597b23ab8d9340e8a0f4368e96797b1a6c65fa6b8", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1391,7 +1522,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1417,11 +1548,11 @@ "chroot /mnt rc-update add hv_kvp_daemon default && chroot /mnt rc-update add hv_vss_daemon default && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.2-x86_64.iso", - "iso_checksum": "77a609dd710ba0d3b0806a314f5c4ef1718ce140b522bf7c7ca081eba664db2c", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.4-x86_64.iso", + "iso_checksum": "20d20e0658b6cc361832cfb49367f0a4c33570ef1521f2e394e9164d2a9bd9df", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1433,7 +1564,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1449,8 +1580,8 @@ " text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.centos6.vagrant.ks" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://mirrors.edge.kernel.org/centos/6.10/isos/x86_64/CentOS-6.10-x86_64-minimal.iso", "iso_checksum": "7c0dee2a0494dabd84809b72ddb4b761f9ef92b78a506aef709b531c54d30770", @@ -1465,7 +1596,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1481,8 +1612,8 @@ "text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.centos7.vagrant.ks" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://mirrors.edge.kernel.org/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso", "iso_checksum": "38d5d51d9d100fd73df031ffd6bd8b1297ce24660dc8c13a3b8b4534a4bd291c", @@ -1497,7 +1628,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1513,8 +1644,8 @@ "text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.rhel7.vagrant.ks" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://archive.org/download/rhel-server-7.6-x86_64-dvd/rhel-server-7.6-x86_64-dvd.iso", "iso_checksum": "60a0be5aeed1f08f2bb7599a578c89ec134b4016cd62a8604b29f15d543a469c", @@ -1529,7 +1660,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1547,11 +1678,11 @@ "bash generic.arch.vagrant.sh < generic.arch.vagrant.chroot.sh && systemctl reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.02.01-x86_64.iso", - "iso_checksum": "ded3152b5b369a7a1697f1081147bfb27c0245de685e55a5b033f6620833809b", + "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.07.01-x86_64.iso", + "iso_checksum": "4ab6a48f6baf63524733d851f63f78944fff6448aa3d2e780316eb2263212e1f", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1563,7 +1694,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1583,8 +1714,8 @@ "" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/25/Server/x86_64/iso/Fedora-Server-netinst-x86_64-25-1.3.iso", "iso_checksum": "86bc3694f4938382753d1e9536f2140a6c9c1978207766340c679a89509073c7", @@ -1599,7 +1730,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1619,8 +1750,8 @@ "" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/26/Server/x86_64/iso/Fedora-Server-netinst-x86_64-26-1.5.iso", "iso_checksum": "e260921ef5c7bd5ee2a7b2f2f1156af6483014c73984e4cf37f2b6690e0155e5", @@ -1635,7 +1766,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1655,10 +1786,10 @@ "" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://mirrors.kernel.org/fedora/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", + "iso_url": "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", "iso_checksum": "2b93836c38833b26891345388ff5ddea60529b27a616b4539d432a3520d1c90b", "iso_checksum_type": "sha256", "ssh_username": "root", @@ -1671,7 +1802,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1691,8 +1822,8 @@ "" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://mirrors.kernel.org/fedora/releases/28/Server/x86_64/iso/Fedora-Server-netinst-x86_64-28-1.1.iso", "iso_checksum": "ea1efdc692356b3346326f82e2f468903e8da59324fdee8b10eac4fea83f23fe", @@ -1707,7 +1838,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1727,8 +1858,8 @@ "" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://dl.fedoraproject.org/pub/fedora/linux/releases/29/Server/x86_64/iso/Fedora-Server-netinst-x86_64-29-1.2.iso", "iso_checksum": "aa7fb0e6e5b71774ebdaab0dae76bdd9246a5bc7aedc28b7f1103aaaf9750654", @@ -1743,7 +1874,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1762,11 +1893,11 @@ "" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.0/amd64/iso-cd/debian-8.11.0-amd64-netinst.iso", - "iso_checksum": "ea799ed959d77359783e7922ed4c94a7437b083a4ce6f09e9fe41a7af6ba60df", + "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.1/amd64/iso-cd/debian-8.11.1-amd64-netinst.iso", + "iso_checksum": "ea444d6f8ac95fd51d2aedb8015c57410d1ad19b494cedec6914c17fda02733c", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1778,7 +1909,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1797,11 +1928,11 @@ "" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://mirrors.kernel.org/debian-cd/9.8.0/amd64/iso-cd/debian-9.8.0-amd64-netinst.iso", - "iso_checksum": "73bd56fb4548efa384bf32fd25808b99198f81c23cf19ab9e6507d898cd58dce", + "iso_url": "https://ftp.acc.umu.se/mirror/cdimage/archive/9.9.0/amd64/iso-cd/debian-9.9.0-amd64-netinst.iso", + "iso_checksum": "d4a22c81c76a66558fb92e690ef70a5d67c685a08216701b15746586520f6e8e", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1813,7 +1944,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1843,11 +1974,11 @@ "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/generic.ubuntu1604.vagrant.cfg --- " ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1859,7 +1990,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1881,8 +2012,8 @@ "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/generic.ubuntu1610.vagrant.cfg --- " ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "http://old-releases.ubuntu.com/releases/16.10/ubuntu-16.10-server-amd64.iso", "iso_checksum": "72b0d421da77f1e0c549b4efe6fc6c184e9909d6792f0d1e59b56d63e9705659", @@ -1897,7 +2028,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1919,8 +2050,8 @@ "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/generic.ubuntu1704.vagrant.cfg --- " ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "http://old-releases.ubuntu.com/releases/17.04/ubuntu-17.04-server-amd64.iso", "iso_checksum": "ca5d9a8438e2434b9a3ac2be67b5c5fa2c1f8e3e40b954519462935195464034", @@ -1935,7 +2066,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -1957,8 +2088,8 @@ "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/generic.ubuntu1710.vagrant.cfg --- " ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "http://old-releases.ubuntu.com/releases/17.10/ubuntu-17.10.1-server-amd64.iso", "iso_checksum": "8ff73f1b622276758475c3bd5190b382774626de5a82c50930519381f6c3a3f8", @@ -1973,7 +2104,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -2009,8 +2140,8 @@ " --- " ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "http://cdimage.ubuntu.com/ubuntu/releases/18.04.2/release/ubuntu-18.04.2-server-amd64.iso", "iso_checksum": "a2cb36dc010d98ad9253ea5ad5a07fd6b409e3412c48f1860536970b073c98f5", @@ -2025,7 +2156,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -2061,8 +2192,8 @@ " --- " ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://mirror.leaseweb.net/ubuntu-cdimage/releases/18.10/release/ubuntu-18.10-server-amd64.iso", "iso_checksum": "cf9250781dadd919f23c9d9612212cad653e35fccc2fbcf6853f67ad09e067ba", @@ -2077,7 +2208,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -2100,11 +2231,11 @@ "bash generic.gentoo.vagrant.sh" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", - "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190219T214502Z.iso", - "iso_checksum": "a47f26868a8613eab634c7d1a13a10587d7018489680627aa25c26e3ebb92823", + "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190721T214502Z.iso", + "iso_checksum": "92ea51f200ea25efc268bb593ff4dca9cc77f69632e82b4a69e366905493d9cc", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2116,7 +2247,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -2146,11 +2277,11 @@ "bsdinstall script /tmp/installerconfig && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-amd64-disc1.iso", - "iso_checksum": "710d237907f1753dbfbecb1186e401d9635156eeef6914f24f632f3219e59d3b", + "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.3/FreeBSD-11.3-RELEASE-amd64-disc1.iso", + "iso_checksum": "d268db365e26305ec3d51b29211caad903749c33a4a8f2cf661d671f8e0ba0b0", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2162,7 +2293,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -2182,11 +2313,11 @@ "/install -a -f /install.conf && chroot /mnt < /install-chroot.sh && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://ftp.usa.openbsd.org/pub/OpenBSD/6.4/amd64/cd64.iso", - "iso_checksum": "1a280cd45ea5fe8d818b61f9d8702c58d5edeff9aee1575f7445b505f45a8c77", + "iso_url": "https://ftp.openbsd.org/pub/OpenBSD/6.5/amd64/cd65.iso", + "iso_checksum": "c0ed31c5f50de4cc80bed01e6080beab96df4ee50a5ad14be88faf40a20c43ed", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2198,7 +2329,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -2228,8 +2359,8 @@ "bsdinstall script /tmp/installerconfig && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-disc1.iso", "iso_checksum": "63abec8aeb915f1a021dd2df6c7767251f9b6e87f403b7ddf9a423446d0a5453", @@ -2244,7 +2375,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -2260,8 +2391,8 @@ " text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.rhel6.vagrant.ks" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://archive.org/download/rhel-server-6.10-x86_64-dvd/rhel-server-6.10-x86_64-dvd.iso", "iso_checksum": "1e15f9202d2cdd4b2bdf9d6503a8543347f0cb8cc06ba9a0dfd2df4fdef5c727", @@ -2276,7 +2407,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -2292,11 +2423,11 @@ "text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.rhel8.vagrant.ks" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://archive.org/download/rhel-8.0-beta-1-x86_64-dvd/rhel-8.0-beta-1-x86_64-dvd.iso", - "iso_checksum": "06bec9e7de3ebfcdb879804be8c452b69ba3e046daedac3731e1ccd169cfd316", + "iso_url": "https://archive.org/download/rhel-8.0-x86_64-dvd/rhel-8.0-x86_64-dvd.iso", + "iso_checksum": "005d4f88fff6d63b0fc01a10822380ef52570edd8834321de7be63002cc6cc43", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2308,7 +2439,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -2338,8 +2469,8 @@ "bsdinstall script /tmp/installerconfig && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://installer.hardenedbsd.org/hardened_11_stable_master-LAST/HardenedBSD-11-STABLE-v1100056.13-amd64-disc1.iso", "iso_checksum": "8b2c90dc41ec68b561028af885eecb66bfd36223970d1c594923d1d54bf83467", @@ -2354,7 +2485,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -2397,11 +2528,11 @@ "sh /tmp/installerconfig && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.4.1_REL.iso", - "iso_checksum": "bd7b5421cc205b4c25ea9ac9e5a53fe6c04fcb133311966796f7f3ce4941ccb8", + "iso_url": "https://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.6.1_REL.iso", + "iso_checksum": "45b43aa56c19d07327e2944fe7fa82c46da0bac4b8046a82bdc1ab3080f95274", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2415,7 +2546,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "use_legacy_network_adapter": true, @@ -2485,8 +2616,8 @@ "x" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", "iso_url": "https://ftp.netbsd.org/pub/NetBSD/iso/8.0/NetBSD-8.0-amd64.iso", "iso_checksum": "5978be870ed0bc0bf69e82f904b3cfb4a0806627181aa1f1bbc782c3c9fb37e1", @@ -2503,7 +2634,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "use_legacy_network_adapter": true, @@ -2534,11 +2665,11 @@ "bsdinstall script /tmp/installerconfig && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://installer.hardenedbsd.org/hardened_12_stable_master-LAST/HardenedBSD-12-STABLE-v1200058.3-amd64-disc1.iso", - "iso_checksum": "246ab0182b634b3f5d3a3b4ba40e0c66b6210bb288a745e519f085d00a6bab60", + "iso_url": "https://installer.hardenedbsd.org/hardened_12_stable_master-LAST/HardenedBSD-12-STABLE-v1200059.1-amd64-disc1.iso", + "iso_checksum": "b2bc9a0c5067100d9592dc228ed76a652464730b6bb673c88de2eab145ed172b", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2550,7 +2681,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -2576,11 +2707,11 @@ "chroot /mnt rc-update add hv_kvp_daemon default && chroot /mnt rc-update add hv_vss_daemon default && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.9/releases/x86_64/alpine-virt-3.9.0-x86_64.iso", - "iso_checksum": "e87e0256d10ca2125455fb5023687b2346740a8cbae54972312fe1626f07494c", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.9/releases/x86_64/alpine-virt-3.9.4-x86_64.iso", + "iso_checksum": "4122dce1092564aa88415c21702d6cb973a7d29f91658d24316f7f0aac3a6761", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2592,7 +2723,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -2611,11 +2742,11 @@ "" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/debian-testing-amd64-netinst.iso", - "iso_checksum_url": "https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/SHA256SUMS", + "iso_url": "https://gensho.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-10.0.0-amd64-netinst.iso", + "iso_checksum": "3dbb597b7f11dbda71cda08d4c1339c1eb565e784c75409987fa2b91182d9240", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2627,7 +2758,7 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false @@ -2663,11 +2794,47 @@ " --- " ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 2, + "memory": 1024, + "cpus": 2, + "http_directory": "http", + "iso_url": "http://cdimage.ubuntu.com/ubuntu/releases/19.04/release/ubuntu-19.04-server-amd64.iso", + "iso_checksum": "7e8a0d07522f591dfee9bc9fcd7c05466763161e6cb0117906655bce1750b2fa", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", + "generation": 1, + "headless": true, + "communicator": "ssh", + "skip_compaction": false, + "enable_secure_boot": false, + "enable_mac_spoofing": false, + "enable_dynamic_memory": false, + "guest_additions_mode": "disable", + "enable_virtualization_extensions": false + }, + { + "type": "hyperv-iso", + "name": "generic-fedora30-hyperv", + "vm_name": "generic-fedora30-hyperv", + "temp_path": "output/", + "output_directory": "output/generic-fedora30-hyperv", + "boot_wait": "20s", + "boot_command": [ + " ", + "inst.ks=http://{{.HTTPIP}}:{{.HTTPPort}}/generic.fedora30.vagrant.ks ", + "biosdevname=0 ", + "net.ifnames=0 ", + "" + ], + "disk_size": 32768, + "memory": 1024, + "cpus": 2, "http_directory": "http", - "iso_url": "http://cdimage.ubuntu.com/ubuntu-server/daily/current/disco-server-amd64.iso", - "iso_checksum_url": "http://cdimage.ubuntu.com/ubuntu-server/daily/pending/SHA256SUMS", + "iso_url": "https://dl.fedoraproject.org/pub/fedora/linux/releases/30/Server/x86_64/iso/Fedora-Server-netinst-x86_64-30-1.2.iso", + "iso_checksum": "5e4eac4566d8c572bfb3bcf54b7d6c82006ec3c6c882a2c9235c6d3494d7b100", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2679,7 +2846,116 @@ "communicator": "ssh", "skip_compaction": false, "enable_secure_boot": false, - "enable_mac_spoofing": true, + "enable_mac_spoofing": false, + "enable_dynamic_memory": false, + "guest_additions_mode": "disable", + "enable_virtualization_extensions": false + }, + { + "type": "hyperv-iso", + "name": "generic-oracle8-hyperv", + "vm_name": "generic-oracle8-hyperv", + "temp_path": "output/", + "output_directory": "output/generic-oracle8-hyperv", + "boot_wait": "20s", + "boot_command": [ + "text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.oracle8.vagrant.ks" + ], + "disk_size": 32768, + "memory": 1024, + "cpus": 2, + "http_directory": "http", + "iso_url": "https://download.oracle.com/otn-pub/otn_software/linux/OracleLinux-R8-U0-BETA-x86_64-dvd.iso", + "iso_checksum": "3872f95ad0b119839f01aa665d2342701fff66fefdac040b039fcb61c65b2c44", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", + "generation": 1, + "headless": true, + "communicator": "ssh", + "skip_compaction": false, + "enable_secure_boot": false, + "enable_mac_spoofing": false, + "enable_dynamic_memory": false, + "guest_additions_mode": "disable", + "enable_virtualization_extensions": false + }, + { + "type": "hyperv-iso", + "name": "generic-alpine310-hyperv", + "vm_name": "generic-alpine310-hyperv", + "temp_path": "output/", + "output_directory": "output/generic-alpine310-hyperv", + "boot_wait": "60s", + "boot_command": [ + "", + "root", + "ifconfig eth0 up && udhcpc -i eth0", + "wget http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.alpine310.vagrant.cfg", + "sed -i -e \"/rc-service/d\" /sbin/setup-sshd", + "printf \"vagrant\\nvagrant\\ny\\n\" | setup-alpine -f /root/generic.alpine310.vagrant.cfg ; ", + "mount /dev/sda2 /mnt && ", + "echo 'PasswordAuthentication yes' >> /mnt/etc/ssh/sshd_config && ", + "echo 'PermitRootLogin yes' >> /mnt/etc/ssh/sshd_config && ", + "chroot /mnt apk add hvtools && chroot /mnt rc-update add hv_fcopy_daemon default && ", + "chroot /mnt rc-update add hv_kvp_daemon default && chroot /mnt rc-update add hv_vss_daemon default && reboot" + ], + "disk_size": 32768, + "memory": 1024, + "cpus": 2, + "http_directory": "http", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-virt-3.10.1-x86_64.iso", + "iso_checksum": "b5cce7d94652e547f07b7dc9e55b1f0b258180b474408e543241be12e0ae255d", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_timeout": "3600s", + "shutdown_command": "/sbin/poweroff", + "generation": 1, + "headless": true, + "communicator": "ssh", + "skip_compaction": false, + "enable_secure_boot": false, + "enable_mac_spoofing": false, + "enable_dynamic_memory": false, + "guest_additions_mode": "disable", + "enable_virtualization_extensions": false + }, + { + "type": "hyperv-iso", + "name": "generic-opensuse15-hyperv", + "vm_name": "generic-opensuse15-hyperv", + "temp_path": "output/", + "output_directory": "output/generic-opensuse15-hyperv", + "boot_wait": "20s", + "boot_command": [ + "", + "linux netsetup=dhcp install=https://mirrors.edge.kernel.org/opensuse/distribution/leap/15.1/repo/oss/ lang=en_US textmode=1 ", + "autoyast=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.opensuse15.vagrant.cfg", + "" + ], + "disk_size": 32768, + "memory": 1024, + "cpus": 2, + "http_directory": "http", + "iso_url": "https://mirrors.edge.kernel.org/opensuse/distribution/leap/15.1/iso/openSUSE-Leap-15.1-NET-x86_64.iso", + "iso_checksum": "609d0ad527ab13681b44e28326cd7941e87adfe8d522e2b31d0d7c71e9d92992", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S /sbin/halt -h -p", + "generation": 1, + "headless": true, + "communicator": "ssh", + "skip_compaction": false, + "enable_secure_boot": false, + "enable_mac_spoofing": false, "enable_dynamic_memory": false, "guest_additions_mode": "disable", "enable_virtualization_extensions": false diff --git a/generic-libvirt.json b/generic-libvirt.json index 74cfe3b91..c868d0eae 100644 --- a/generic-libvirt.json +++ b/generic-libvirt.json @@ -1189,6 +1189,137 @@ "generic-ubuntu1904-libvirt" ] }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/fixdns.sh", + "scripts/fedora30/dnf.sh" + ], + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-libvirt" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/base.sh" + ], + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-libvirt" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/kernel.sh", + "scripts/fedora30/vga.sh", + "scripts/fedora30/virtualbox.sh", + "scripts/fedora30/parallels.sh", + "scripts/fedora30/vmware.sh", + "scripts/fedora30/qemu.sh", + "scripts/fedora30/vagrant.sh", + "scripts/fedora30/tuning.sh" + ], + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-libvirt" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/oracle8/network.sh", + "scripts/oracle8/yum.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-oracle8-libvirt" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/oracle8/kernel.sh", + "scripts/oracle8/floppy.sh", + "scripts/oracle8/virtualbox.sh", + "scripts/oracle8/parallels.sh", + "scripts/oracle8/vmware.sh", + "scripts/oracle8/qemu.sh", + "scripts/oracle8/vagrant.sh", + "scripts/oracle8/tuning.sh", + "scripts/oracle8/cleanup.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-oracle8-libvirt" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/alpine310/network.sh", + "scripts/alpine310/apk.sh" + ], + "execute_command": "/bin/sh '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-alpine310-libvirt" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/alpine310/lsb.sh", + "scripts/alpine310/floppy.sh", + "scripts/alpine310/vagrant.sh", + "scripts/alpine310/sshd.sh", + "scripts/alpine310/virtualbox.sh", + "scripts/alpine310/parallels.sh", + "scripts/alpine310/vmware.sh", + "scripts/alpine310/qemu.sh", + "scripts/alpine310/cache.sh" + ], + "execute_command": "/bin/bash '{{.Path}}'", + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-alpine310-libvirt" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/opensuse15/zypper.sh", + "scripts/opensuse15/virtualbox.sh", + "scripts/opensuse15/parallels.sh", + "scripts/opensuse15/vmware.sh", + "scripts/opensuse15/qemu.sh", + "scripts/opensuse15/vagrant.sh", + "scripts/opensuse15/network.sh", + "scripts/opensuse15/floppy.sh", + "scripts/opensuse15/postfix.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-opensuse15-libvirt" + ] + }, { "scripts": [ "scripts/common/motd.sh", @@ -1363,8 +1494,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.3-x86_64.iso", - "iso_checksum": "9129a3982364254cf9dd563d75a6a4a396a8aa941671a51de4667de8423ffb37", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.5-x86_64.iso", + "iso_checksum": "b5936e27487e605ea3cbf040d444505ea7fd735021258d7b119faaa9b4b5b083", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1409,8 +1540,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.7/releases/x86_64/alpine-virt-3.7.1-x86_64.iso", - "iso_checksum": "69e30614159cc93b7327059b56a542faca8a2fd6f4a5ace33a2e5130c5c02e7f", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.7/releases/x86_64/alpine-virt-3.7.3-x86_64.iso", + "iso_checksum": "2f7a23fc31a6f67348e5614597b23ab8d9340e8a0f4368e96797b1a6c65fa6b8", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1455,8 +1586,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.2-x86_64.iso", - "iso_checksum": "77a609dd710ba0d3b0806a314f5c4ef1718ce140b522bf7c7ca081eba664db2c", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.4-x86_64.iso", + "iso_checksum": "20d20e0658b6cc361832cfb49367f0a4c33570ef1521f2e394e9164d2a9bd9df", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1605,8 +1736,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.02.01-x86_64.iso", - "iso_checksum": "ded3152b5b369a7a1697f1081147bfb27c0245de685e55a5b033f6620833809b", + "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.07.01-x86_64.iso", + "iso_checksum": "4ab6a48f6baf63524733d851f63f78944fff6448aa3d2e780316eb2263212e1f", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1728,7 +1859,7 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://mirrors.kernel.org/fedora/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", + "iso_url": "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", "iso_checksum": "2b93836c38833b26891345388ff5ddea60529b27a616b4539d432a3520d1c90b", "iso_checksum_type": "sha256", "ssh_username": "root", @@ -1850,8 +1981,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.0/amd64/iso-cd/debian-8.11.0-amd64-netinst.iso", - "iso_checksum": "ea799ed959d77359783e7922ed4c94a7437b083a4ce6f09e9fe41a7af6ba60df", + "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.1/amd64/iso-cd/debian-8.11.1-amd64-netinst.iso", + "iso_checksum": "ea444d6f8ac95fd51d2aedb8015c57410d1ad19b494cedec6914c17fda02733c", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1890,8 +2021,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://mirrors.kernel.org/debian-cd/9.8.0/amd64/iso-cd/debian-9.8.0-amd64-netinst.iso", - "iso_checksum": "73bd56fb4548efa384bf32fd25808b99198f81c23cf19ab9e6507d898cd58dce", + "iso_url": "https://ftp.acc.umu.se/mirror/cdimage/archive/9.9.0/amd64/iso-cd/debian-9.9.0-amd64-netinst.iso", + "iso_checksum": "d4a22c81c76a66558fb92e690ef70a5d67c685a08216701b15746586520f6e8e", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1943,8 +2074,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2236,8 +2367,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190219T214502Z.iso", - "iso_checksum": "a47f26868a8613eab634c7d1a13a10587d7018489680627aa25c26e3ebb92823", + "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190721T214502Z.iso", + "iso_checksum": "92ea51f200ea25efc268bb593ff4dca9cc77f69632e82b4a69e366905493d9cc", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2287,8 +2418,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-amd64-disc1.iso", - "iso_checksum": "710d237907f1753dbfbecb1186e401d9635156eeef6914f24f632f3219e59d3b", + "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.3/FreeBSD-11.3-RELEASE-amd64-disc1.iso", + "iso_checksum": "d268db365e26305ec3d51b29211caad903749c33a4a8f2cf661d671f8e0ba0b0", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2328,8 +2459,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://ftp.usa.openbsd.org/pub/OpenBSD/6.4/amd64/cd64.iso", - "iso_checksum": "1a280cd45ea5fe8d818b61f9d8702c58d5edeff9aee1575f7445b505f45a8c77", + "iso_url": "https://ftp.openbsd.org/pub/OpenBSD/6.5/amd64/cd65.iso", + "iso_checksum": "c0ed31c5f50de4cc80bed01e6080beab96df4ee50a5ad14be88faf40a20c43ed", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2453,8 +2584,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://archive.org/download/rhel-8.0-beta-1-x86_64-dvd/rhel-8.0-beta-1-x86_64-dvd.iso", - "iso_checksum": "06bec9e7de3ebfcdb879804be8c452b69ba3e046daedac3731e1ccd169cfd316", + "iso_url": "https://archive.org/download/rhel-8.0-x86_64-dvd/rhel-8.0-x86_64-dvd.iso", + "iso_checksum": "005d4f88fff6d63b0fc01a10822380ef52570edd8834321de7be63002cc6cc43", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2567,8 +2698,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.4.1_REL.iso", - "iso_checksum": "bd7b5421cc205b4c25ea9ac9e5a53fe6c04fcb133311966796f7f3ce4941ccb8", + "iso_url": "https://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.6.1_REL.iso", + "iso_checksum": "45b43aa56c19d07327e2944fe7fa82c46da0bac4b8046a82bdc1ab3080f95274", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2698,8 +2829,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://installer.hardenedbsd.org/hardened_12_stable_master-LAST/HardenedBSD-12-STABLE-v1200058.3-amd64-disc1.iso", - "iso_checksum": "246ab0182b634b3f5d3a3b4ba40e0c66b6210bb288a745e519f085d00a6bab60", + "iso_url": "https://installer.hardenedbsd.org/hardened_12_stable_master-LAST/HardenedBSD-12-STABLE-v1200059.1-amd64-disc1.iso", + "iso_checksum": "b2bc9a0c5067100d9592dc228ed76a652464730b6bb673c88de2eab145ed172b", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2744,8 +2875,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.9/releases/x86_64/alpine-virt-3.9.0-x86_64.iso", - "iso_checksum": "e87e0256d10ca2125455fb5023687b2346740a8cbae54972312fe1626f07494c", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.9/releases/x86_64/alpine-virt-3.9.4-x86_64.iso", + "iso_checksum": "4122dce1092564aa88415c21702d6cb973a7d29f91658d24316f7f0aac3a6761", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2784,8 +2915,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/debian-testing-amd64-netinst.iso", - "iso_checksum_url": "https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/SHA256SUMS", + "iso_url": "https://gensho.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-10.0.0-amd64-netinst.iso", + "iso_checksum": "3dbb597b7f11dbda71cda08d4c1339c1eb565e784c75409987fa2b91182d9240", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2841,14 +2972,178 @@ ], "http_directory": "http", "headless": true, - "iso_url": "http://cdimage.ubuntu.com/ubuntu-server/daily/current/disco-server-amd64.iso", - "iso_checksum_url": "http://cdimage.ubuntu.com/ubuntu-server/daily/pending/SHA256SUMS", + "iso_url": "http://cdimage.ubuntu.com/ubuntu/releases/19.04/release/ubuntu-19.04-server-amd64.iso", + "iso_checksum": "7e8a0d07522f591dfee9bc9fcd7c05466763161e6cb0117906655bce1750b2fa", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now" + }, + { + "type": "qemu", + "name": "generic-fedora30-libvirt", + "vm_name": "generic-fedora30-libvirt", + "output_directory": "output/generic-fedora30-libvirt", + "accelerator": "kvm", + "qemu_binary": "/usr/libexec/qemu-kvm", + "boot_wait": "20s", + "boot_command": [ + " ", + "inst.ks=http://{{.HTTPIP}}:{{.HTTPPort}}/generic.fedora30.vagrant.ks ", + "biosdevname=0 ", + "net.ifnames=0 ", + "" + ], + "format": "qcow2", + "disk_size": 32768, + "disk_discard": "unmap", + "disk_cache": "unsafe", + "disk_compression": true, + "disk_interface": "virtio-scsi", + "net_device": "virtio-net", + "cpus": 2, + "memory": 2048, + "qemuargs": [ + [ + "-drive", + "if=none,file=output/generic-fedora30-libvirt/generic-fedora30-libvirt,id=drive0,cache=unsafe,discard=unmap,detect-zeroes=unmap,format=qcow2" + ] + ], + "http_directory": "http", + "headless": true, + "iso_url": "https://dl.fedoraproject.org/pub/fedora/linux/releases/30/Server/x86_64/iso/Fedora-Server-netinst-x86_64-30-1.2.iso", + "iso_checksum": "5e4eac4566d8c572bfb3bcf54b7d6c82006ec3c6c882a2c9235c6d3494d7b100", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now" + }, + { + "type": "qemu", + "name": "generic-oracle8-libvirt", + "vm_name": "generic-oracle8-libvirt", + "output_directory": "output/generic-oracle8-libvirt", + "accelerator": "kvm", + "qemu_binary": "/usr/libexec/qemu-kvm", + "boot_wait": "20s", + "boot_command": [ + "text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.oracle8.vagrant.ks" + ], + "format": "qcow2", + "disk_size": 32768, + "disk_discard": "unmap", + "disk_cache": "unsafe", + "disk_compression": true, + "disk_interface": "virtio-scsi", + "net_device": "virtio-net", + "cpus": 2, + "memory": 2048, + "qemuargs": [ + [ + "-drive", + "if=none,file=output/generic-oracle8-libvirt/generic-oracle8-libvirt,id=drive0,cache=unsafe,discard=unmap,detect-zeroes=unmap,format=qcow2" + ] + ], + "http_directory": "http", + "headless": true, + "iso_url": "https://download.oracle.com/otn-pub/otn_software/linux/OracleLinux-R8-U0-BETA-x86_64-dvd.iso", + "iso_checksum": "3872f95ad0b119839f01aa665d2342701fff66fefdac040b039fcb61c65b2c44", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now" + }, + { + "type": "qemu", + "name": "generic-alpine310-libvirt", + "vm_name": "generic-alpine310-libvirt", + "output_directory": "output/generic-alpine310-libvirt", + "accelerator": "kvm", + "qemu_binary": "/usr/libexec/qemu-kvm", + "boot_wait": "60s", + "boot_command": [ + "", + "root", + "ifconfig eth0 up && udhcpc -i eth0", + "wget http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.alpine310.vagrant.cfg", + "sed -i -e \"/rc-service/d\" /sbin/setup-sshd", + "printf \"vagrant\\nvagrant\\ny\\n\" | setup-alpine -f /root/generic.alpine310.vagrant.cfg ; ", + "mount /dev/sda2 /mnt && ", + "echo 'PasswordAuthentication yes' >> /mnt/etc/ssh/sshd_config && ", + "echo 'PermitRootLogin yes' >> /mnt/etc/ssh/sshd_config && ", + "umount /mnt/boot && umount /mnt ; reboot" + ], + "format": "qcow2", + "disk_size": 32768, + "disk_discard": "unmap", + "disk_cache": "unsafe", + "disk_compression": true, + "disk_interface": "virtio-scsi", + "net_device": "virtio-net", + "cpus": 2, + "memory": 2048, + "qemuargs": [ + [ + "-drive", + "if=none,file=output/generic-alpine310-libvirt/generic-alpine310-libvirt,id=drive0,cache=unsafe,discard=unmap,detect-zeroes=unmap,format=qcow2" + ] + ], + "http_directory": "http", + "headless": true, + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-virt-3.10.1-x86_64.iso", + "iso_checksum": "b5cce7d94652e547f07b7dc9e55b1f0b258180b474408e543241be12e0ae255d", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "/sbin/poweroff" + }, + { + "type": "qemu", + "name": "generic-opensuse15-libvirt", + "vm_name": "generic-opensuse15-libvirt", + "output_directory": "output/generic-opensuse15-libvirt", + "accelerator": "kvm", + "qemu_binary": "/usr/libexec/qemu-kvm", + "boot_wait": "60s", + "boot_command": [ + "", + "linux netsetup=dhcp install=https://mirrors.edge.kernel.org/opensuse/distribution/leap/15.1/repo/oss/ lang=en_US textmode=1 ", + "autoyast=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.opensuse15.vagrant.cfg", + "" + ], + "format": "qcow2", + "disk_size": 32768, + "disk_discard": "unmap", + "disk_cache": "unsafe", + "disk_compression": true, + "disk_interface": "virtio-scsi", + "net_device": "virtio-net", + "cpus": 2, + "memory": 2048, + "qemuargs": [ + [ + "-drive", + "if=none,file=output/generic-opensuse15-libvirt/generic-opensuse15-libvirt,id=drive0,cache=unsafe,discard=unmap,detect-zeroes=unmap,format=qcow2" + ] + ], + "http_directory": "http", + "headless": true, + "iso_url": "https://mirrors.edge.kernel.org/opensuse/distribution/leap/15.1/iso/openSUSE-Leap-15.1-NET-x86_64.iso", + "iso_checksum": "609d0ad527ab13681b44e28326cd7941e87adfe8d522e2b31d0d7c71e9d92992", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S /sbin/halt -h -p" } ], "post-processors": [ diff --git a/generic-parallels.json b/generic-parallels.json index 71bf5be45..8c46ae983 100644 --- a/generic-parallels.json +++ b/generic-parallels.json @@ -1189,6 +1189,137 @@ "generic-ubuntu1904-parallels" ] }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/fixdns.sh", + "scripts/fedora30/dnf.sh" + ], + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-parallels" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/base.sh" + ], + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-parallels" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/kernel.sh", + "scripts/fedora30/vga.sh", + "scripts/fedora30/virtualbox.sh", + "scripts/fedora30/parallels.sh", + "scripts/fedora30/vmware.sh", + "scripts/fedora30/qemu.sh", + "scripts/fedora30/vagrant.sh", + "scripts/fedora30/tuning.sh" + ], + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-parallels" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/oracle8/network.sh", + "scripts/oracle8/yum.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-oracle8-parallels" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/oracle8/kernel.sh", + "scripts/oracle8/floppy.sh", + "scripts/oracle8/virtualbox.sh", + "scripts/oracle8/parallels.sh", + "scripts/oracle8/vmware.sh", + "scripts/oracle8/qemu.sh", + "scripts/oracle8/vagrant.sh", + "scripts/oracle8/tuning.sh", + "scripts/oracle8/cleanup.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-oracle8-parallels" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/alpine310/network.sh", + "scripts/alpine310/apk.sh" + ], + "execute_command": "/bin/sh '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-alpine310-parallels" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/alpine310/lsb.sh", + "scripts/alpine310/floppy.sh", + "scripts/alpine310/vagrant.sh", + "scripts/alpine310/sshd.sh", + "scripts/alpine310/virtualbox.sh", + "scripts/alpine310/parallels.sh", + "scripts/alpine310/vmware.sh", + "scripts/alpine310/qemu.sh", + "scripts/alpine310/cache.sh" + ], + "execute_command": "/bin/bash '{{.Path}}'", + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-alpine310-parallels" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/opensuse15/zypper.sh", + "scripts/opensuse15/virtualbox.sh", + "scripts/opensuse15/parallels.sh", + "scripts/opensuse15/vmware.sh", + "scripts/opensuse15/qemu.sh", + "scripts/opensuse15/vagrant.sh", + "scripts/opensuse15/network.sh", + "scripts/opensuse15/floppy.sh", + "scripts/opensuse15/postfix.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-opensuse15-parallels" + ] + }, { "scripts": [ "scripts/common/motd.sh", @@ -1412,8 +1543,8 @@ "hard_drive_interface": "ide", "guest_os_type": "linux", "http_directory": "http", - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.3-x86_64.iso", - "iso_checksum": "9129a3982364254cf9dd563d75a6a4a396a8aa941671a51de4667de8423ffb37", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.5-x86_64.iso", + "iso_checksum": "b5936e27487e605ea3cbf040d444505ea7fd735021258d7b119faaa9b4b5b083", "iso_checksum_type": "sha256", "skip_compaction": false, "ssh_username": "root", @@ -1470,8 +1601,8 @@ "hard_drive_interface": "ide", "guest_os_type": "linux", "http_directory": "http", - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.7/releases/x86_64/alpine-virt-3.7.1-x86_64.iso", - "iso_checksum": "69e30614159cc93b7327059b56a542faca8a2fd6f4a5ace33a2e5130c5c02e7f", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.7/releases/x86_64/alpine-virt-3.7.3-x86_64.iso", + "iso_checksum": "2f7a23fc31a6f67348e5614597b23ab8d9340e8a0f4368e96797b1a6c65fa6b8", "iso_checksum_type": "sha256", "skip_compaction": false, "ssh_username": "root", @@ -1528,8 +1659,8 @@ "hard_drive_interface": "ide", "guest_os_type": "linux", "http_directory": "http", - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.2-x86_64.iso", - "iso_checksum": "77a609dd710ba0d3b0806a314f5c4ef1718ce140b522bf7c7ca081eba664db2c", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.4-x86_64.iso", + "iso_checksum": "20d20e0658b6cc361832cfb49367f0a4c33570ef1521f2e394e9164d2a9bd9df", "iso_checksum_type": "sha256", "skip_compaction": false, "ssh_username": "root", @@ -1727,8 +1858,8 @@ "guest_os_type": "linux", "skip_compaction": false, "http_directory": "http", - "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.02.01-x86_64.iso", - "iso_checksum": "ded3152b5b369a7a1697f1081147bfb27c0245de685e55a5b033f6620833809b", + "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.07.01-x86_64.iso", + "iso_checksum": "4ab6a48f6baf63524733d851f63f78944fff6448aa3d2e780316eb2263212e1f", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1886,7 +2017,7 @@ "guest_os_type": "linux", "skip_compaction": false, "http_directory": "http", - "iso_url": "https://mirrors.kernel.org/fedora/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", + "iso_url": "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", "iso_checksum": "2b93836c38833b26891345388ff5ddea60529b27a616b4539d432a3520d1c90b", "iso_checksum_type": "sha256", "ssh_username": "root", @@ -2044,8 +2175,8 @@ "guest_os_type": "debian", "skip_compaction": false, "http_directory": "http", - "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.0/amd64/iso-cd/debian-8.11.0-amd64-netinst.iso", - "iso_checksum": "ea799ed959d77359783e7922ed4c94a7437b083a4ce6f09e9fe41a7af6ba60df", + "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.1/amd64/iso-cd/debian-8.11.1-amd64-netinst.iso", + "iso_checksum": "ea444d6f8ac95fd51d2aedb8015c57410d1ad19b494cedec6914c17fda02733c", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2096,8 +2227,8 @@ "guest_os_type": "debian", "skip_compaction": false, "http_directory": "http", - "iso_url": "https://mirrors.kernel.org/debian-cd/9.8.0/amd64/iso-cd/debian-9.8.0-amd64-netinst.iso", - "iso_checksum": "73bd56fb4548efa384bf32fd25808b99198f81c23cf19ab9e6507d898cd58dce", + "iso_url": "https://ftp.acc.umu.se/mirror/cdimage/archive/9.9.0/amd64/iso-cd/debian-9.9.0-amd64-netinst.iso", + "iso_checksum": "d4a22c81c76a66558fb92e690ef70a5d67c685a08216701b15746586520f6e8e", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2161,8 +2292,8 @@ "guest_os_type": "ubuntu", "skip_compaction": false, "http_directory": "http", - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2526,8 +2657,8 @@ "guest_os_type": "linux", "skip_compaction": false, "http_directory": "http", - "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190219T214502Z.iso", - "iso_checksum": "a47f26868a8613eab634c7d1a13a10587d7018489680627aa25c26e3ebb92823", + "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190721T214502Z.iso", + "iso_checksum": "92ea51f200ea25efc268bb593ff4dca9cc77f69632e82b4a69e366905493d9cc", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2589,8 +2720,8 @@ "guest_os_type": "freebsd", "skip_compaction": false, "http_directory": "http", - "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-amd64-disc1.iso", - "iso_checksum": "710d237907f1753dbfbecb1186e401d9635156eeef6914f24f632f3219e59d3b", + "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.3/FreeBSD-11.3-RELEASE-amd64-disc1.iso", + "iso_checksum": "d268db365e26305ec3d51b29211caad903749c33a4a8f2cf661d671f8e0ba0b0", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2642,8 +2773,8 @@ "guest_os_type": "other", "skip_compaction": false, "http_directory": "http", - "iso_url": "https://ftp.usa.openbsd.org/pub/OpenBSD/6.4/amd64/cd64.iso", - "iso_checksum": "1a280cd45ea5fe8d818b61f9d8702c58d5edeff9aee1575f7445b505f45a8c77", + "iso_url": "https://ftp.openbsd.org/pub/OpenBSD/6.5/amd64/cd65.iso", + "iso_checksum": "c0ed31c5f50de4cc80bed01e6080beab96df4ee50a5ad14be88faf40a20c43ed", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2802,8 +2933,8 @@ "hard_drive_interface": "ide", "guest_os_type": "rhel7", "http_directory": "http", - "iso_url": "https://archive.org/download/rhel-8.0-beta-1-x86_64-dvd/rhel-8.0-beta-1-x86_64-dvd.iso", - "iso_checksum": "06bec9e7de3ebfcdb879804be8c452b69ba3e046daedac3731e1ccd169cfd316", + "iso_url": "https://archive.org/download/rhel-8.0-x86_64-dvd/rhel-8.0-x86_64-dvd.iso", + "iso_checksum": "005d4f88fff6d63b0fc01a10822380ef52570edd8834321de7be63002cc6cc43", "iso_checksum_type": "sha256", "skip_compaction": false, "ssh_username": "root", @@ -2942,8 +3073,8 @@ "guest_os_type": "freebsd", "skip_compaction": false, "http_directory": "http", - "iso_url": "https://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.4.1_REL.iso", - "iso_checksum": "bd7b5421cc205b4c25ea9ac9e5a53fe6c04fcb133311966796f7f3ce4941ccb8", + "iso_url": "https://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.6.1_REL.iso", + "iso_checksum": "45b43aa56c19d07327e2944fe7fa82c46da0bac4b8046a82bdc1ab3080f95274", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -3088,41 +3219,33 @@ "set", "{{.Name}}", "--adaptive-hypervisor", - "off" - ], - [ - "set", - "{{.Name}}", - "--3d-accelerate", - "off" + "on" ], [ "set", "{{.Name}}", "--pmu-virt", - "off" + "on" ], [ "set", "{{.Name}}", "--faster-vm", - "off" + "on" ], [ "set", "{{.Name}}", - "--device-set", - "cdrom0", - "--iface", - "sata" + "--efi-boot", + "on" ] ], "hard_drive_interface": "ide", "guest_os_type": "freebsd", "skip_compaction": false, "http_directory": "http", - "iso_url": "https://installer.hardenedbsd.org/hardened_12_stable_master-LAST/HardenedBSD-12-STABLE-v1200058.3-amd64-disc1.iso", - "iso_checksum": "246ab0182b634b3f5d3a3b4ba40e0c66b6210bb288a745e519f085d00a6bab60", + "iso_url": "https://installer.hardenedbsd.org/hardened_12_stable_master-LAST/HardenedBSD-12-STABLE-v1200059.1-amd64-disc1.iso", + "iso_checksum": "b2bc9a0c5067100d9592dc228ed76a652464730b6bb673c88de2eab145ed172b", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -3178,8 +3301,8 @@ "hard_drive_interface": "ide", "guest_os_type": "linux", "http_directory": "http", - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.9/releases/x86_64/alpine-virt-3.9.0-x86_64.iso", - "iso_checksum": "e87e0256d10ca2125455fb5023687b2346740a8cbae54972312fe1626f07494c", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.9/releases/x86_64/alpine-virt-3.9.4-x86_64.iso", + "iso_checksum": "4122dce1092564aa88415c21702d6cb973a7d29f91658d24316f7f0aac3a6761", "iso_checksum_type": "sha256", "skip_compaction": false, "ssh_username": "root", @@ -3231,8 +3354,8 @@ "guest_os_type": "debian", "skip_compaction": false, "http_directory": "http", - "iso_url": "https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/debian-testing-amd64-netinst.iso", - "iso_checksum_url": "https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/SHA256SUMS", + "iso_url": "https://gensho.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-10.0.0-amd64-netinst.iso", + "iso_checksum": "3dbb597b7f11dbda71cda08d4c1339c1eb565e784c75409987fa2b91182d9240", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -3300,9 +3423,111 @@ "guest_os_type": "ubuntu", "skip_compaction": false, "http_directory": "http", - "iso_url": "http://cdimage.ubuntu.com/ubuntu-server/daily/current/disco-server-amd64.iso", - "iso_checksum_url": "http://cdimage.ubuntu.com/ubuntu-server/daily/pending/SHA256SUMS", + "iso_url": "http://cdimage.ubuntu.com/ubuntu/releases/19.04/release/ubuntu-19.04-server-amd64.iso", + "iso_checksum": "7e8a0d07522f591dfee9bc9fcd7c05466763161e6cb0117906655bce1750b2fa", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", + "parallels_tools_flavor": "lin", + "parallels_tools_mode": "upload", + "parallels_tools_guest_path": "/root/parallels-tools-linux.iso", + "prlctl_version_file": "/root/parallels-tools-version.txt" + }, + { + "type": "parallels-iso", + "name": "generic-fedora30-parallels", + "vm_name": "generic-fedora30-parallels", + "output_directory": "output/generic-fedora30-parallels", + "boot_wait": "20s", + "boot_command": [ + " ", + "inst.ks=http://{{.HTTPIP}}:{{.HTTPPort}}/generic.fedora30.vagrant.ks ", + "biosdevname=0 ", + "net.ifnames=0 ", + "" + ], + "disk_size": 32768, + "cpus": 2, + "memory": 1024, + "prlctl": [ + [ + "set", + "{{.Name}}", + "--adaptive-hypervisor", + "on" + ], + [ + "set", + "{{.Name}}", + "--pmu-virt", + "on" + ], + [ + "set", + "{{.Name}}", + "--faster-vm", + "on" + ] + ], + "hard_drive_interface": "ide", + "guest_os_type": "linux", + "skip_compaction": false, + "http_directory": "http", + "iso_url": "https://dl.fedoraproject.org/pub/fedora/linux/releases/30/Server/x86_64/iso/Fedora-Server-netinst-x86_64-30-1.2.iso", + "iso_checksum": "5e4eac4566d8c572bfb3bcf54b7d6c82006ec3c6c882a2c9235c6d3494d7b100", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", + "parallels_tools_flavor": "lin", + "parallels_tools_mode": "upload", + "parallels_tools_guest_path": "/root/parallels-tools-linux.iso", + "prlctl_version_file": "/root/parallels-tools-version.txt" + }, + { + "type": "parallels-iso", + "name": "generic-oracle8-parallels", + "vm_name": "generic-oracle8-parallels", + "output_directory": "output/generic-oracle8-parallels", + "boot_wait": "20s", + "boot_command": [ + "text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.oracle8.vagrant.ks" + ], + "disk_size": 32768, + "cpus": 1, + "memory": 1024, + "prlctl": [ + [ + "set", + "{{.Name}}", + "--adaptive-hypervisor", + "on" + ], + [ + "set", + "{{.Name}}", + "--pmu-virt", + "on" + ], + [ + "set", + "{{.Name}}", + "--faster-vm", + "on" + ] + ], + "hard_drive_interface": "ide", + "guest_os_type": "linux", + "http_directory": "http", + "iso_url": "https://download.oracle.com/otn-pub/otn_software/linux/OracleLinux-R8-U0-BETA-x86_64-dvd.iso", + "iso_checksum": "3872f95ad0b119839f01aa665d2342701fff66fefdac040b039fcb61c65b2c44", "iso_checksum_type": "sha256", + "skip_compaction": false, "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, @@ -3312,6 +3537,116 @@ "parallels_tools_mode": "upload", "parallels_tools_guest_path": "/root/parallels-tools-linux.iso", "prlctl_version_file": "/root/parallels-tools-version.txt" + }, + { + "type": "parallels-iso", + "name": "generic-alpine310-parallels", + "vm_name": "generic-alpine310-parallels", + "output_directory": "output/generic-alpine310-parallels", + "boot_wait": "60s", + "boot_command": [ + "", + "root", + "ifconfig eth0 up && udhcpc -i eth0", + "wget http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.alpine310.vagrant.cfg", + "sed -i -e \"/rc-service/d\" /sbin/setup-sshd", + "printf \"vagrant\\nvagrant\\ny\\n\" | setup-alpine -f /root/generic.alpine310.vagrant.cfg ; ", + "mount /dev/sda2 /mnt && ", + "echo 'PasswordAuthentication yes' >> /mnt/etc/ssh/sshd_config && ", + "echo 'PermitRootLogin yes' >> /mnt/etc/ssh/sshd_config && ", + "umount /mnt/boot && umount /mnt ; reboot" + ], + "disk_size": 32768, + "cpus": 2, + "memory": 1024, + "prlctl": [ + [ + "set", + "{{.Name}}", + "--adaptive-hypervisor", + "on" + ], + [ + "set", + "{{.Name}}", + "--pmu-virt", + "on" + ], + [ + "set", + "{{.Name}}", + "--faster-vm", + "on" + ] + ], + "hard_drive_interface": "ide", + "guest_os_type": "linux", + "http_directory": "http", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-virt-3.10.1-x86_64.iso", + "iso_checksum": "b5cce7d94652e547f07b7dc9e55b1f0b258180b474408e543241be12e0ae255d", + "iso_checksum_type": "sha256", + "skip_compaction": false, + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "/sbin/poweroff", + "parallels_tools_flavor": "lin", + "parallels_tools_mode": "upload", + "parallels_tools_guest_path": "/root/parallels-tools-linux.iso", + "prlctl_version_file": "/root/parallels-tools-version.txt" + }, + { + "type": "parallels-iso", + "name": "generic-opensuse15-parallels", + "vm_name": "generic-opensuse15-parallels", + "output_directory": "output/generic-opensuse15-parallels", + "boot_wait": "20s", + "boot_command": [ + "", + "linux netsetup=dhcp install=https://mirrors.edge.kernel.org/opensuse/distribution/leap/15.1/repo/oss/ lang=en_US textmode=1 ", + "autoyast=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.opensuse15.vagrant.cfg", + "" + ], + "disk_size": 32768, + "cpus": 2, + "memory": 1024, + "prlctl": [ + [ + "set", + "{{.Name}}", + "--adaptive-hypervisor", + "on" + ], + [ + "set", + "{{.Name}}", + "--pmu-virt", + "on" + ], + [ + "set", + "{{.Name}}", + "--faster-vm", + "on" + ] + ], + "hard_drive_interface": "ide", + "guest_os_type": "opensuse", + "http_directory": "http", + "iso_url": "https://mirrors.edge.kernel.org/opensuse/distribution/leap/15.1/iso/openSUSE-Leap-15.1-NET-x86_64.iso", + "iso_checksum": "609d0ad527ab13681b44e28326cd7941e87adfe8d522e2b31d0d7c71e9d92992", + "iso_checksum_type": "sha256", + "skip_compaction": false, + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S /sbin/halt -h -p", + "parallels_tools_flavor": "lin", + "parallels_tools_mode": "upload", + "parallels_tools_guest_path": "/root/parallels-tools-linux.iso", + "prlctl_version_file": "/root/parallels-tools-version.txt" } ], "post-processors": [ diff --git a/generic-virtualbox.json b/generic-virtualbox.json index 4151d1a8c..c5194541b 100644 --- a/generic-virtualbox.json +++ b/generic-virtualbox.json @@ -1190,6 +1190,137 @@ "generic-ubuntu1904-virtualbox" ] }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/fixdns.sh", + "scripts/fedora30/dnf.sh" + ], + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-virtualbox" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/base.sh" + ], + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-virtualbox" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/kernel.sh", + "scripts/fedora30/vga.sh", + "scripts/fedora30/virtualbox.sh", + "scripts/fedora30/parallels.sh", + "scripts/fedora30/vmware.sh", + "scripts/fedora30/qemu.sh", + "scripts/fedora30/vagrant.sh", + "scripts/fedora30/tuning.sh" + ], + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-virtualbox" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/oracle8/network.sh", + "scripts/oracle8/yum.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-oracle8-virtualbox" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/oracle8/kernel.sh", + "scripts/oracle8/floppy.sh", + "scripts/oracle8/virtualbox.sh", + "scripts/oracle8/parallels.sh", + "scripts/oracle8/vmware.sh", + "scripts/oracle8/qemu.sh", + "scripts/oracle8/vagrant.sh", + "scripts/oracle8/tuning.sh", + "scripts/oracle8/cleanup.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-oracle8-virtualbox" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/alpine310/network.sh", + "scripts/alpine310/apk.sh" + ], + "execute_command": "/bin/sh '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-alpine310-virtualbox" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/alpine310/lsb.sh", + "scripts/alpine310/floppy.sh", + "scripts/alpine310/vagrant.sh", + "scripts/alpine310/sshd.sh", + "scripts/alpine310/virtualbox.sh", + "scripts/alpine310/parallels.sh", + "scripts/alpine310/vmware.sh", + "scripts/alpine310/qemu.sh", + "scripts/alpine310/cache.sh" + ], + "execute_command": "/bin/bash '{{.Path}}'", + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-alpine310-virtualbox" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/opensuse15/zypper.sh", + "scripts/opensuse15/virtualbox.sh", + "scripts/opensuse15/parallels.sh", + "scripts/opensuse15/vmware.sh", + "scripts/opensuse15/qemu.sh", + "scripts/opensuse15/vagrant.sh", + "scripts/opensuse15/network.sh", + "scripts/opensuse15/floppy.sh", + "scripts/opensuse15/postfix.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-opensuse15-virtualbox" + ] + }, { "scripts": [ "scripts/common/motd.sh", @@ -1238,8 +1369,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1280,8 +1411,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S /sbin/halt -h -p", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1328,8 +1459,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "/sbin/poweroff", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1368,16 +1499,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.3-x86_64.iso", - "iso_checksum": "9129a3982364254cf9dd563d75a6a4a396a8aa941671a51de4667de8423ffb37", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.5-x86_64.iso", + "iso_checksum": "b5936e27487e605ea3cbf040d444505ea7fd735021258d7b119faaa9b4b5b083", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "/sbin/poweroff", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1416,16 +1547,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.7/releases/x86_64/alpine-virt-3.7.1-x86_64.iso", - "iso_checksum": "69e30614159cc93b7327059b56a542faca8a2fd6f4a5ace33a2e5130c5c02e7f", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.7/releases/x86_64/alpine-virt-3.7.3-x86_64.iso", + "iso_checksum": "2f7a23fc31a6f67348e5614597b23ab8d9340e8a0f4368e96797b1a6c65fa6b8", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "/sbin/poweroff", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1464,16 +1595,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.2-x86_64.iso", - "iso_checksum": "77a609dd710ba0d3b0806a314f5c4ef1718ce140b522bf7c7ca081eba664db2c", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.4-x86_64.iso", + "iso_checksum": "20d20e0658b6cc361832cfb49367f0a4c33570ef1521f2e394e9164d2a9bd9df", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "/sbin/poweroff", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1511,8 +1642,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1550,8 +1681,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1589,8 +1720,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1622,16 +1753,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.02.01-x86_64.iso", - "iso_checksum": "ded3152b5b369a7a1697f1081147bfb27c0245de685e55a5b033f6620833809b", + "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.07.01-x86_64.iso", + "iso_checksum": "4ab6a48f6baf63524733d851f63f78944fff6448aa3d2e780316eb2263212e1f", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "7200s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1673,8 +1804,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1716,8 +1847,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1751,7 +1882,7 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://mirrors.kernel.org/fedora/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", + "iso_url": "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", "iso_checksum": "2b93836c38833b26891345388ff5ddea60529b27a616b4539d432a3520d1c90b", "iso_checksum_type": "sha256", "ssh_username": "root", @@ -1802,8 +1933,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1845,8 +1976,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1879,16 +2010,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.0/amd64/iso-cd/debian-8.11.0-amd64-netinst.iso", - "iso_checksum": "ea799ed959d77359783e7922ed4c94a7437b083a4ce6f09e9fe41a7af6ba60df", + "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.1/amd64/iso-cd/debian-8.11.1-amd64-netinst.iso", + "iso_checksum": "ea444d6f8ac95fd51d2aedb8015c57410d1ad19b494cedec6914c17fda02733c", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1921,16 +2052,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://mirrors.kernel.org/debian-cd/9.8.0/amd64/iso-cd/debian-9.8.0-amd64-netinst.iso", - "iso_checksum": "73bd56fb4548efa384bf32fd25808b99198f81c23cf19ab9e6507d898cd58dce", + "iso_url": "https://ftp.acc.umu.se/mirror/cdimage/archive/9.9.0/amd64/iso-cd/debian-9.9.0-amd64-netinst.iso", + "iso_checksum": "d4a22c81c76a66558fb92e690ef70a5d67c685a08216701b15746586520f6e8e", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -1976,16 +2107,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2031,8 +2162,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2078,8 +2209,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2125,8 +2256,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2184,8 +2315,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2243,8 +2374,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2281,16 +2412,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190219T214502Z.iso", - "iso_checksum": "a47f26868a8613eab634c7d1a13a10587d7018489680627aa25c26e3ebb92823", + "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190721T214502Z.iso", + "iso_checksum": "92ea51f200ea25efc268bb593ff4dca9cc77f69632e82b4a69e366905493d9cc", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "7200s", "shutdown_command": "shutdown -hP now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2334,16 +2465,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-amd64-disc1.iso", - "iso_checksum": "710d237907f1753dbfbecb1186e401d9635156eeef6914f24f632f3219e59d3b", + "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.3/FreeBSD-11.3-RELEASE-amd64-disc1.iso", + "iso_checksum": "d268db365e26305ec3d51b29211caad903749c33a4a8f2cf661d671f8e0ba0b0", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "shutdown -p now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2377,16 +2508,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://ftp.usa.openbsd.org/pub/OpenBSD/6.4/amd64/cd64.iso", - "iso_checksum": "1a280cd45ea5fe8d818b61f9d8702c58d5edeff9aee1575f7445b505f45a8c77", + "iso_url": "https://ftp.openbsd.org/pub/OpenBSD/6.5/amd64/cd65.iso", + "iso_checksum": "c0ed31c5f50de4cc80bed01e6080beab96df4ee50a5ad14be88faf40a20c43ed", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "shutdown -h -p now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2438,8 +2569,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "shutdown -p now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2477,8 +2608,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2508,16 +2639,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://archive.org/download/rhel-8.0-beta-1-x86_64-dvd/rhel-8.0-beta-1-x86_64-dvd.iso", - "iso_checksum": "06bec9e7de3ebfcdb879804be8c452b69ba3e046daedac3731e1ccd169cfd316", + "iso_url": "https://archive.org/download/rhel-8.0-x86_64-dvd/rhel-8.0-x86_64-dvd.iso", + "iso_checksum": "005d4f88fff6d63b0fc01a10822380ef52570edd8834321de7be63002cc6cc43", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2569,8 +2700,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "shutdown -p now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2626,16 +2757,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.4.1_REL.iso", - "iso_checksum": "bd7b5421cc205b4c25ea9ac9e5a53fe6c04fcb133311966796f7f3ce4941ccb8", + "iso_url": "https://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.6.1_REL.iso", + "iso_checksum": "45b43aa56c19d07327e2944fe7fa82c46da0bac4b8046a82bdc1ab3080f95274", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "shutdown -p now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2716,8 +2847,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "/sbin/shutdown -h -p now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2761,16 +2892,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://installer.hardenedbsd.org/hardened_12_stable_master-LAST/HardenedBSD-12-STABLE-v1200058.3-amd64-disc1.iso", - "iso_checksum": "246ab0182b634b3f5d3a3b4ba40e0c66b6210bb288a745e519f085d00a6bab60", + "iso_url": "https://installer.hardenedbsd.org/hardened_12_stable_master-LAST/HardenedBSD-12-STABLE-v1200059.1-amd64-disc1.iso", + "iso_checksum": "b2bc9a0c5067100d9592dc228ed76a652464730b6bb673c88de2eab145ed172b", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "shutdown -p now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2809,16 +2940,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.9/releases/x86_64/alpine-virt-3.9.0-x86_64.iso", - "iso_checksum": "e87e0256d10ca2125455fb5023687b2346740a8cbae54972312fe1626f07494c", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.9/releases/x86_64/alpine-virt-3.9.4-x86_64.iso", + "iso_checksum": "4122dce1092564aa88415c21702d6cb973a7d29f91658d24316f7f0aac3a6761", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "/sbin/poweroff", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -2851,8 +2982,8 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/debian-testing-amd64-netinst.iso", - "iso_checksum_url": "https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/SHA256SUMS", + "iso_url": "https://gensho.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-10.0.0-amd64-netinst.iso", + "iso_checksum": "3dbb597b7f11dbda71cda08d4c1339c1eb565e784c75409987fa2b91182d9240", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2910,16 +3041,188 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "http://cdimage.ubuntu.com/ubuntu-server/daily/current/disco-server-amd64.iso", - "iso_checksum_url": "http://cdimage.ubuntu.com/ubuntu-server/daily/pending/SHA256SUMS", + "iso_url": "http://cdimage.ubuntu.com/ubuntu/releases/19.04/release/ubuntu-19.04-server-amd64.iso", + "iso_checksum": "7e8a0d07522f591dfee9bc9fcd7c05466763161e6cb0117906655bce1750b2fa", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", + "guest_additions_path": "VBoxGuestAdditions.iso", + "virtualbox_version_file": "VBoxVersion.txt" + }, + { + "type": "virtualbox-iso", + "name": "generic-fedora30-virtualbox", + "vm_name": "generic-fedora30-virtualbox", + "output_directory": "output/generic-fedora30-virtualbox", + "boot_wait": "20s", + "boot_command": [ + " ", + "inst.ks=http://{{.HTTPIP}}:{{.HTTPPort}}/generic.fedora30.vagrant.ks ", + "biosdevname=0 ", + "net.ifnames=0 ", + "" + ], + "disk_size": 32768, + "cpus": 2, + "memory": 2048, + "vboxmanage": [ + [ + "modifyvm", + "{{.Name}}", + "--vram", + "64" + ] + ], + "guest_os_type": "Fedora_64", + "http_directory": "http", + "headless": true, + "vrdp_bind_address": "127.0.0.1", + "vrdp_port_min": 11000, + "vrdp_port_max": 12000, + "iso_url": "https://dl.fedoraproject.org/pub/fedora/linux/releases/30/Server/x86_64/iso/Fedora-Server-netinst-x86_64-30-1.2.iso", + "iso_checksum": "5e4eac4566d8c572bfb3bcf54b7d6c82006ec3c6c882a2c9235c6d3494d7b100", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", + "guest_additions_path": "VBoxGuestAdditions.iso", + "virtualbox_version_file": "VBoxVersion.txt" + }, + { + "type": "virtualbox-iso", + "name": "generic-oracle8-virtualbox", + "vm_name": "generic-oracle8-virtualbox", + "output_directory": "output/generic-oracle8-virtualbox", + "boot_wait": "20s", + "boot_command": [ + "text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.oracle8.vagrant.ks" + ], + "disk_size": 32768, + "cpus": 2, + "memory": 2048, + "vboxmanage": [ + [ + "modifyvm", + "{{.Name}}", + "--vram", + "64" + ] + ], + "guest_os_type": "Oracle_64", + "http_directory": "http", + "headless": true, + "vrdp_bind_address": "127.0.0.1", + "vrdp_port_min": 11000, + "vrdp_port_max": 12000, + "iso_url": "https://download.oracle.com/otn-pub/otn_software/linux/OracleLinux-R8-U0-BETA-x86_64-dvd.iso", + "iso_checksum": "3872f95ad0b119839f01aa665d2342701fff66fefdac040b039fcb61c65b2c44", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", + "guest_additions_path": "VBoxGuestAdditions.iso", + "virtualbox_version_file": "VBoxVersion.txt" + }, + { + "type": "virtualbox-iso", + "name": "generic-alpine310-virtualbox", + "vm_name": "generic-alpine310-virtualbox", + "output_directory": "output/generic-alpine310-virtualbox", + "boot_wait": "60s", + "boot_command": [ + "", + "root", + "ifconfig eth0 up && udhcpc -i eth0", + "wget http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.alpine310.vagrant.cfg", + "sed -i -e \"/rc-service/d\" /sbin/setup-sshd", + "printf \"vagrant\\nvagrant\\ny\\n\" | setup-alpine -f /root/generic.alpine310.vagrant.cfg ; ", + "mount /dev/sda2 /mnt && ", + "echo 'PasswordAuthentication yes' >> /mnt/etc/ssh/sshd_config && ", + "echo 'PermitRootLogin yes' >> /mnt/etc/ssh/sshd_config && ", + "umount /mnt/boot && umount /mnt ; reboot" + ], + "disk_size": 32768, + "cpus": 2, + "memory": 2048, + "vboxmanage": [ + [ + "modifyvm", + "{{.Name}}", + "--vram", + "64" + ] + ], + "guest_os_type": "Linux_64", + "http_directory": "http", + "headless": true, + "vrdp_bind_address": "127.0.0.1", + "vrdp_port_min": 11000, + "vrdp_port_max": 12000, + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-virt-3.10.1-x86_64.iso", + "iso_checksum": "b5cce7d94652e547f07b7dc9e55b1f0b258180b474408e543241be12e0ae255d", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "/sbin/poweroff", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", + "guest_additions_path": "VBoxGuestAdditions.iso", + "virtualbox_version_file": "VBoxVersion.txt" + }, + { + "type": "virtualbox-iso", + "name": "generic-opensuse15-virtualbox", + "vm_name": "generic-opensuse15-virtualbox", + "output_directory": "output/generic-opensuse15-virtualbox", + "boot_wait": "20s", + "boot_command": [ + "", + "linux netsetup=dhcp install=https://mirrors.edge.kernel.org/opensuse/distribution/leap/15.1/repo/oss/ lang=en_US textmode=1 ", + "autoyast=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.opensuse15.vagrant.cfg", + "" + ], + "disk_size": 32768, + "cpus": 2, + "memory": 2048, + "vboxmanage": [ + [ + "modifyvm", + "{{.Name}}", + "--vram", + "64" + ] + ], + "guest_os_type": "OpenSUSE_64", + "http_directory": "http", + "headless": true, + "vrdp_bind_address": "127.0.0.1", + "vrdp_port_min": 11000, + "vrdp_port_max": 12000, + "iso_url": "https://mirrors.edge.kernel.org/opensuse/distribution/leap/15.1/iso/openSUSE-Leap-15.1-NET-x86_64.iso", + "iso_checksum": "609d0ad527ab13681b44e28326cd7941e87adfe8d522e2b31d0d7c71e9d92992", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S /sbin/halt -h -p", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" } diff --git a/generic-vmware.json b/generic-vmware.json index c55a88a47..e7a78061a 100644 --- a/generic-vmware.json +++ b/generic-vmware.json @@ -1189,6 +1189,137 @@ "generic-ubuntu1904-vmware" ] }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/fixdns.sh", + "scripts/fedora30/dnf.sh" + ], + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-vmware" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/base.sh" + ], + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-vmware" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/fedora30/kernel.sh", + "scripts/fedora30/vga.sh", + "scripts/fedora30/virtualbox.sh", + "scripts/fedora30/parallels.sh", + "scripts/fedora30/vmware.sh", + "scripts/fedora30/qemu.sh", + "scripts/fedora30/vagrant.sh", + "scripts/fedora30/tuning.sh" + ], + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-fedora30-vmware" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/oracle8/network.sh", + "scripts/oracle8/yum.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-oracle8-vmware" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/oracle8/kernel.sh", + "scripts/oracle8/floppy.sh", + "scripts/oracle8/virtualbox.sh", + "scripts/oracle8/parallels.sh", + "scripts/oracle8/vmware.sh", + "scripts/oracle8/qemu.sh", + "scripts/oracle8/vagrant.sh", + "scripts/oracle8/tuning.sh", + "scripts/oracle8/cleanup.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-oracle8-vmware" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/alpine310/network.sh", + "scripts/alpine310/apk.sh" + ], + "execute_command": "/bin/sh '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-alpine310-vmware" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/alpine310/lsb.sh", + "scripts/alpine310/floppy.sh", + "scripts/alpine310/vagrant.sh", + "scripts/alpine310/sshd.sh", + "scripts/alpine310/virtualbox.sh", + "scripts/alpine310/parallels.sh", + "scripts/alpine310/vmware.sh", + "scripts/alpine310/qemu.sh", + "scripts/alpine310/cache.sh" + ], + "execute_command": "/bin/bash '{{.Path}}'", + "pause_before": "120s", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-alpine310-vmware" + ] + }, + { + "type": "shell", + "scripts": [ + "scripts/opensuse15/zypper.sh", + "scripts/opensuse15/virtualbox.sh", + "scripts/opensuse15/parallels.sh", + "scripts/opensuse15/vmware.sh", + "scripts/opensuse15/qemu.sh", + "scripts/opensuse15/vagrant.sh", + "scripts/opensuse15/network.sh", + "scripts/opensuse15/floppy.sh", + "scripts/opensuse15/postfix.sh" + ], + "execute_command": "{{.Vars}} /bin/bash '{{.Path}}'", + "start_retry_timeout": "15m", + "expect_disconnect": "true", + "only": [ + "generic-opensuse15-vmware" + ] + }, { "scripts": [ "scripts/common/motd.sh", @@ -1379,8 +1510,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.3-x86_64.iso", - "iso_checksum": "9129a3982364254cf9dd563d75a6a4a396a8aa941671a51de4667de8423ffb37", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.5-x86_64.iso", + "iso_checksum": "b5936e27487e605ea3cbf040d444505ea7fd735021258d7b119faaa9b4b5b083", "iso_checksum_type": "sha256", "skip_compaction": false, "ssh_username": "root", @@ -1433,8 +1564,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.7/releases/x86_64/alpine-virt-3.7.1-x86_64.iso", - "iso_checksum": "69e30614159cc93b7327059b56a542faca8a2fd6f4a5ace33a2e5130c5c02e7f", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.7/releases/x86_64/alpine-virt-3.7.3-x86_64.iso", + "iso_checksum": "2f7a23fc31a6f67348e5614597b23ab8d9340e8a0f4368e96797b1a6c65fa6b8", "iso_checksum_type": "sha256", "skip_compaction": false, "ssh_username": "root", @@ -1487,8 +1618,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.2-x86_64.iso", - "iso_checksum": "77a609dd710ba0d3b0806a314f5c4ef1718ce140b522bf7c7ca081eba664db2c", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.4-x86_64.iso", + "iso_checksum": "20d20e0658b6cc361832cfb49367f0a4c33570ef1521f2e394e9164d2a9bd9df", "iso_checksum_type": "sha256", "skip_compaction": false, "ssh_username": "root", @@ -1642,8 +1773,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.02.01-x86_64.iso", - "iso_checksum": "ded3152b5b369a7a1697f1081147bfb27c0245de685e55a5b033f6620833809b", + "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.07.01-x86_64.iso", + "iso_checksum": "4ab6a48f6baf63524733d851f63f78944fff6448aa3d2e780316eb2263212e1f", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1768,7 +1899,7 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://mirrors.kernel.org/fedora/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", + "iso_url": "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", "iso_checksum": "2b93836c38833b26891345388ff5ddea60529b27a616b4539d432a3520d1c90b", "iso_checksum_type": "sha256", "ssh_username": "root", @@ -1893,8 +2024,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.0/amd64/iso-cd/debian-8.11.0-amd64-netinst.iso", - "iso_checksum": "ea799ed959d77359783e7922ed4c94a7437b083a4ce6f09e9fe41a7af6ba60df", + "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.1/amd64/iso-cd/debian-8.11.1-amd64-netinst.iso", + "iso_checksum": "ea444d6f8ac95fd51d2aedb8015c57410d1ad19b494cedec6914c17fda02733c", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1934,8 +2065,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://mirrors.kernel.org/debian-cd/9.8.0/amd64/iso-cd/debian-9.8.0-amd64-netinst.iso", - "iso_checksum": "73bd56fb4548efa384bf32fd25808b99198f81c23cf19ab9e6507d898cd58dce", + "iso_url": "https://ftp.acc.umu.se/mirror/cdimage/archive/9.9.0/amd64/iso-cd/debian-9.9.0-amd64-netinst.iso", + "iso_checksum": "d4a22c81c76a66558fb92e690ef70a5d67c685a08216701b15746586520f6e8e", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -1988,8 +2119,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2290,8 +2421,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190219T214502Z.iso", - "iso_checksum": "a47f26868a8613eab634c7d1a13a10587d7018489680627aa25c26e3ebb92823", + "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190721T214502Z.iso", + "iso_checksum": "92ea51f200ea25efc268bb593ff4dca9cc77f69632e82b4a69e366905493d9cc", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2342,8 +2473,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-amd64-disc1.iso", - "iso_checksum": "710d237907f1753dbfbecb1186e401d9635156eeef6914f24f632f3219e59d3b", + "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.3/FreeBSD-11.3-RELEASE-amd64-disc1.iso", + "iso_checksum": "d268db365e26305ec3d51b29211caad903749c33a4a8f2cf661d671f8e0ba0b0", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2384,8 +2515,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://ftp.usa.openbsd.org/pub/OpenBSD/6.4/amd64/cd64.iso", - "iso_checksum": "1a280cd45ea5fe8d818b61f9d8702c58d5edeff9aee1575f7445b505f45a8c77", + "iso_url": "https://ftp.openbsd.org/pub/OpenBSD/6.5/amd64/cd65.iso", + "iso_checksum": "c0ed31c5f50de4cc80bed01e6080beab96df4ee50a5ad14be88faf40a20c43ed", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2512,8 +2643,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://archive.org/download/rhel-8.0-beta-1-x86_64-dvd/rhel-8.0-beta-1-x86_64-dvd.iso", - "iso_checksum": "06bec9e7de3ebfcdb879804be8c452b69ba3e046daedac3731e1ccd169cfd316", + "iso_url": "https://archive.org/download/rhel-8.0-x86_64-dvd/rhel-8.0-x86_64-dvd.iso", + "iso_checksum": "005d4f88fff6d63b0fc01a10822380ef52570edd8834321de7be63002cc6cc43", "iso_checksum_type": "sha256", "skip_compaction": false, "ssh_username": "root", @@ -2629,8 +2760,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.4.1_REL.iso", - "iso_checksum": "bd7b5421cc205b4c25ea9ac9e5a53fe6c04fcb133311966796f7f3ce4941ccb8", + "iso_url": "https://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.6.1_REL.iso", + "iso_checksum": "45b43aa56c19d07327e2944fe7fa82c46da0bac4b8046a82bdc1ab3080f95274", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2762,8 +2893,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://installer.hardenedbsd.org/hardened_12_stable_master-LAST/HardenedBSD-12-STABLE-v1200058.3-amd64-disc1.iso", - "iso_checksum": "246ab0182b634b3f5d3a3b4ba40e0c66b6210bb288a745e519f085d00a6bab60", + "iso_url": "https://installer.hardenedbsd.org/hardened_12_stable_master-LAST/HardenedBSD-12-STABLE-v1200059.1-amd64-disc1.iso", + "iso_checksum": "b2bc9a0c5067100d9592dc228ed76a652464730b6bb673c88de2eab145ed172b", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2815,8 +2946,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.9/releases/x86_64/alpine-virt-3.9.0-x86_64.iso", - "iso_checksum": "e87e0256d10ca2125455fb5023687b2346740a8cbae54972312fe1626f07494c", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.9/releases/x86_64/alpine-virt-3.9.4-x86_64.iso", + "iso_checksum": "4122dce1092564aa88415c21702d6cb973a7d29f91658d24316f7f0aac3a6761", "iso_checksum_type": "sha256", "skip_compaction": false, "ssh_username": "root", @@ -2857,8 +2988,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/debian-testing-amd64-netinst.iso", - "iso_checksum_url": "https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/SHA256SUMS", + "iso_url": "https://gensho.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-10.0.0-amd64-netinst.iso", + "iso_checksum": "3dbb597b7f11dbda71cda08d4c1339c1eb565e784c75409987fa2b91182d9240", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2915,8 +3046,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "http://cdimage.ubuntu.com/ubuntu-server/daily/current/disco-server-amd64.iso", - "iso_checksum_url": "http://cdimage.ubuntu.com/ubuntu-server/daily/pending/SHA256SUMS", + "iso_url": "http://cdimage.ubuntu.com/ubuntu/releases/19.04/release/ubuntu-19.04-server-amd64.iso", + "iso_checksum": "7e8a0d07522f591dfee9bc9fcd7c05466763161e6cb0117906655bce1750b2fa", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -2924,6 +3055,182 @@ "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", "tools_upload_flavor": "linux" + }, + { + "type": "vmware-iso", + "name": "generic-fedora30-vmware", + "vm_name": "generic-fedora30-vmware", + "vmdk_name": "generic-fedora30-vmware", + "output_directory": "output/generic-fedora30-vmware", + "boot_wait": "20s", + "boot_command": [ + " ", + "inst.ks=http://{{.HTTPIP}}:{{.HTTPPort}}/generic.fedora30.vagrant.ks ", + "biosdevname=0 ", + "net.ifnames=0 ", + "" + ], + "disk_size": 32768, + "disk_type_id": "0", + "cpus": 2, + "memory": 2048, + "vmx_data_post": { + "cleanShutdown": "TRUE", + "softPowerOff": "FALSE", + "ethernet0.virtualDev": "e1000", + "ethernet0.startConnected": "TRUE", + "ethernet0.wakeonpcktrcv": "false" + }, + "guest_os_type": "fedora-64", + "skip_compaction": false, + "http_directory": "http", + "headless": true, + "vnc_disable_password": true, + "vnc_bind_address": "127.0.0.1", + "vmx_remove_ethernet_interfaces": true, + "iso_url": "https://dl.fedoraproject.org/pub/fedora/linux/releases/30/Server/x86_64/iso/Fedora-Server-netinst-x86_64-30-1.2.iso", + "iso_checksum": "5e4eac4566d8c572bfb3bcf54b7d6c82006ec3c6c882a2c9235c6d3494d7b100", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", + "tools_upload_flavor": "linux" + }, + { + "type": "vmware-iso", + "name": "generic-oracle8-vmware", + "vm_name": "generic-oracle8-vmware", + "vmdk_name": "generic-oracle8-vmware", + "output_directory": "output/generic-oracle8-vmware", + "boot_wait": "20s", + "boot_command": [ + "text biosdevname=0 net.ifnames=0 ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.oracle8.vagrant.ks" + ], + "disk_size": 32768, + "disk_type_id": "0", + "disk_adapter_type": "sata", + "cpus": 2, + "memory": 2048, + "vmx_data_post": { + "cleanShutdown": "TRUE", + "softPowerOff": "FALSE", + "ethernet0.virtualDev": "e1000", + "ethernet0.startConnected": "TRUE", + "ethernet0.wakeonpcktrcv": "false" + }, + "guest_os_type": "oraclelinux-64", + "http_directory": "http", + "headless": true, + "vnc_disable_password": true, + "vnc_bind_address": "127.0.0.1", + "vmx_remove_ethernet_interfaces": true, + "iso_url": "https://download.oracle.com/otn-pub/otn_software/linux/OracleLinux-R8-U0-BETA-x86_64-dvd.iso", + "iso_checksum": "3872f95ad0b119839f01aa665d2342701fff66fefdac040b039fcb61c65b2c44", + "iso_checksum_type": "sha256", + "skip_compaction": false, + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", + "tools_upload_flavor": "linux" + }, + { + "type": "vmware-iso", + "name": "generic-alpine310-vmware", + "vm_name": "generic-alpine310-vmware", + "vmdk_name": "generic-alpine310-vmware", + "output_directory": "output/generic-alpine310-vmware", + "boot_wait": "60s", + "boot_command": [ + "", + "root", + "ifconfig eth0 up && udhcpc -i eth0", + "wget http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.alpine310.vagrant.cfg", + "sed -i -e \"/rc-service/d\" /sbin/setup-sshd", + "printf \"vagrant\\nvagrant\\ny\\n\" | setup-alpine -f /root/generic.alpine310.vagrant.cfg ; ", + "mount /dev/sda2 /mnt && ", + "echo 'PasswordAuthentication yes' >> /mnt/etc/ssh/sshd_config && ", + "echo 'PermitRootLogin yes' >> /mnt/etc/ssh/sshd_config && ", + "umount /mnt/boot && umount /mnt ; reboot" + ], + "disk_size": 32768, + "disk_type_id": "0", + "cpus": 2, + "memory": 2048, + "vmx_data": { + "softpoweroff": "FALSE", + "powertype.poweroff": "hard", + "powertype.poweron": "hard", + "powertype.reset": "hard", + "powertype.suspend": "hard" + }, + "vmx_data_post": { + "cleanShutdown": "TRUE", + "softPowerOff": "FALSE", + "ethernet0.virtualDev": "e1000", + "ethernet0.startConnected": "TRUE", + "ethernet0.wakeonpcktrcv": "false" + }, + "guest_os_type": "otherlinux-64", + "http_directory": "http", + "headless": true, + "vnc_disable_password": true, + "vnc_bind_address": "127.0.0.1", + "vmx_remove_ethernet_interfaces": true, + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-virt-3.10.1-x86_64.iso", + "iso_checksum": "b5cce7d94652e547f07b7dc9e55b1f0b258180b474408e543241be12e0ae255d", + "iso_checksum_type": "sha256", + "skip_compaction": false, + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "/sbin/poweroff", + "tools_upload_flavor": "linux" + }, + { + "type": "vmware-iso", + "name": "generic-opensuse15-vmware", + "vm_name": "generic-opensuse15-vmware", + "vmdk_name": "generic-opensuse15-vmware", + "output_directory": "output/generic-opensuse15-vmware", + "boot_wait": "20s", + "boot_command": [ + "", + "linux netsetup=dhcp install=https://mirrors.edge.kernel.org/opensuse/distribution/leap/15.1/repo/oss/ lang=en_US textmode=1 ", + "autoyast=http://{{ .HTTPIP }}:{{ .HTTPPort }}/generic.opensuse15.vagrant.cfg", + "" + ], + "disk_size": 32768, + "disk_type_id": "0", + "cpus": 2, + "memory": 2048, + "vmx_data_post": { + "cleanShutdown": "TRUE", + "softPowerOff": "FALSE", + "ethernet0.virtualDev": "e1000", + "ethernet0.startConnected": "TRUE", + "ethernet0.wakeonpcktrcv": "false" + }, + "guest_os_type": "opensuse-64", + "http_directory": "http", + "headless": true, + "vnc_disable_password": true, + "vnc_bind_address": "127.0.0.1", + "vmx_remove_ethernet_interfaces": true, + "iso_url": "https://mirrors.edge.kernel.org/opensuse/distribution/leap/15.1/iso/openSUSE-Leap-15.1-NET-x86_64.iso", + "iso_checksum": "609d0ad527ab13681b44e28326cd7941e87adfe8d522e2b31d0d7c71e9d92992", + "iso_checksum_type": "sha256", + "skip_compaction": false, + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "3600s", + "shutdown_command": "echo 'vagrant' | sudo -S /sbin/halt -h -p", + "tools_upload_flavor": "linux" } ], "post-processors": [ diff --git a/http/generic.alpine310.vagrant.cfg b/http/generic.alpine310.vagrant.cfg new file mode 100644 index 000000000..bb5e5c2de --- /dev/null +++ b/http/generic.alpine310.vagrant.cfg @@ -0,0 +1,16 @@ +KEYMAPOPTS="us us" +HOSTNAMEOPTS="-n alpine310.localdomain" +INTERFACESOPTS="auto lo +iface lo inet loopback + +auto eth0 +iface eth0 inet dhcp + hostname alpine310.localdomain +" +DNSOPTS="-d local -n 4.2.2.1 4.2.2.2 208.67.220.220" +TIMEZONEOPTS="-z US/Pacific" +PROXYOPTS="none" +APKREPOSOPTS="https://dl-4.alpinelinux.org/alpine/v3.10/main" +SSHDOPTS="-c openssh" +NTPOPTS="-c openntpd" +DISKOPTS="-s 0 -m sys /dev/sda" diff --git a/http/generic.arch.vagrant.chroot.sh b/http/generic.arch.vagrant.chroot.sh index 609996587..874332478 100644 --- a/http/generic.arch.vagrant.chroot.sh +++ b/http/generic.arch.vagrant.chroot.sh @@ -51,28 +51,29 @@ cd /home/vagrant/ # which will probably need to be updated when the major version changes. KERN=\`uname -r | awk -F'-' '{print \$1}' | sed -e 's/\.0$//g'\` +MAJOR=\`uname -r | awk -F'.' '{print \$1}'\` # hypervvsh -git clone https://aur.archlinux.org/hypervvssd.git hypervvssd && cd hypervvssd +sudo git clone https://aur.archlinux.org/hypervvssd.git hypervvssd && cd hypervvssd sed --in-place "s/^pkgver=.*/pkgver=\$KERN/g" PKGBUILD sed --in-place "s/pkgver = .*/pkgver = \$KERN/g" .SRCINFO -sed --in-place "s/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v4.x\/linux-.*.tar.gz/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v4.x\/linux-\$KERN.tar.gz/g" .SRCINFO +sed --in-place "s/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v\$MAJOR.x\/linux-.*.tar.gz/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v\$MAJOR.x\/linux-\$KERN.tar.gz/g" .SRCINFO makepkg --cleanbuild --noconfirm --syncdeps --install cd /home/vagrant/ && rm -rf hypervvssd # hypervkvpd -git clone https://aur.archlinux.org/hypervkvpd.git hypervkvpd && cd hypervkvpd +sudo git clone https://aur.archlinux.org/hypervkvpd.git hypervkvpd && cd hypervkvpd sed --in-place "s/^pkgver=.*/pkgver=\$KERN/g" PKGBUILD sed --in-place "s/pkgver = .*/pkgver = \$KERN/g" .SRCINFO -sed --in-place "s/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v4.x\/linux-.*.tar.gz/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v4.x\/linux-\$KERN.tar.gz/g" .SRCINFO +sed --in-place "s/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v\$MAJOR.x\/linux-.*.tar.gz/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v\$MAJOR.x\/linux-\$KERN.tar.gz/g" .SRCINFO makepkg --cleanbuild --noconfirm --syncdeps --install cd /home/vagrant/ && rm -rf hypervkvpd # hypervfcopyd -git clone https://aur.archlinux.org/hypervfcopyd.git hypervfcopyd && cd hypervfcopyd +sudo git clone https://aur.archlinux.org/hypervfcopyd.git hypervfcopyd && cd hypervfcopyd sed --in-place "s/^pkgver=.*/pkgver=\$KERN/g" PKGBUILD sed --in-place "s/pkgver = .*/pkgver = \$KERN/g" .SRCINFO -sed --in-place "s/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v4.x\/linux-.*.tar.gz/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v4.x\/linux-\$KERN.tar.gz/g" .SRCINFO +sed --in-place "s/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v\$MAJOR.x\/linux-.*.tar.gz/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v\$MAJOR.x\/linux-\$KERN.tar.gz/g" .SRCINFO makepkg --cleanbuild --noconfirm --syncdeps --install cd /home/vagrant/ && rm -rf hypervfcopyd diff --git a/http/generic.arch.vagrant.sh b/http/generic.arch.vagrant.sh index e41dee07f..bb335078c 100644 --- a/http/generic.arch.vagrant.sh +++ b/http/generic.arch.vagrant.sh @@ -23,16 +23,13 @@ mount "${device}2" /mnt # Ensure the kernel.org mirror is always listed, so things work, even when the archlinux # website goes offline. -printf "Server = https://mirrors.kernel.org/archlinux/\$repo/os/\$arch\n" > /tmp/mirrolist.50 printf "Server = https://mirrors.kernel.org/archlinux/\$repo/os/\$arch\n" > /etc/pacman.d/mirrorlist curl -fsS https://www.archlinux.org/mirrorlist/?country=all > /tmp/mirrolist -grep '^#Server' /tmp/mirrolist | grep "https" | sort -R | head -n 5 | sed 's/^#//' >> /tmp/mirrolist.50 -rankmirrors -v /tmp/mirrolist.50 | tee --append /etc/pacman.d/mirrorlist +grep '^#Server' /tmp/mirrolist | grep "https" | sort -R | head -n 5 | sed 's/^#//' >> /etc/pacman.d/mirrorlist pacstrap /mnt base grub bash sudo openssh swapon "${device}1" genfstab -p /mnt >> /mnt/etc/fstab arch-chroot /mnt /bin/bash swapoff "${device}1" - diff --git a/http/generic.debian10.vagrant.cfg b/http/generic.debian10.vagrant.cfg index b1a44b56a..32c5ec171 100644 --- a/http/generic.debian10.vagrant.cfg +++ b/http/generic.debian10.vagrant.cfg @@ -48,6 +48,8 @@ d-i pkgsel/language-packs multiselect en d-i user-setup/allow-password-weak boolean true d-i user-setup/encrypt-home boolean false d-i netcfg/hostname string debian10.localdomain +d-i libpam0g/restart-services string cron +d-i libraries/restart-without-asking boolean true d-i preseed/late_command string \ sed -i -e "s/.*PermitRootLogin.*/PermitRootLogin yes/g" /target/etc/ssh/sshd_config ; \ dmesg | grep -E "Hypervisor detected: Microsoft HyperV|Hypervisor detected: Microsoft Hyper-V" ; \ diff --git a/http/generic.debian8.vagrant.cfg b/http/generic.debian8.vagrant.cfg index 1abf301f8..1aef4c725 100644 --- a/http/generic.debian8.vagrant.cfg +++ b/http/generic.debian8.vagrant.cfg @@ -1,4 +1,9 @@ choose-mirror-bin mirror/http/proxy string +d-i mirror/protocol string http +d-i mirror/http/proxy string +d-i mirror/country string manual +d-i mirror/http/hostname string archive.debian.org +d-i mirror/http/directory string /debian d-i base-installer/kernel/override-image string linux-server d-i keyboard-configuration/xkb-keymap select us d-i time/zone string US/Pacific @@ -52,6 +57,6 @@ d-i preseed/late_command string sed -i -e "s/.*PermitRootLogin.*/PermitRootLogin yes/g" /target/etc/ssh/sshd_config ; \ dmesg | grep -E "Hypervisor detected: Microsoft HyperV|Hypervisor detected: Microsoft Hyper-V" ; \ if [ $? -eq 0 ]; then \ - chroot /target /bin/bash -c 'service ssh stop ; echo "deb http://deb.debian.org/debian jessie main" >> /etc/apt/sources.list ; apt-get update ; apt-get install hyperv-daemons' ; \ + chroot /target /bin/bash -c 'service ssh stop ; echo "deb http://archive.debian.org/debian jessie main" >> /etc/apt/sources.list ; apt-get update ; apt-get install hyperv-daemons' ; \ fi tasksel tasksel/first multiselect standard, server diff --git a/http/generic.fedora27.vagrant.ks b/http/generic.fedora27.vagrant.ks index e95da4d75..2961c3f93 100644 --- a/http/generic.fedora27.vagrant.ks +++ b/http/generic.fedora27.vagrant.ks @@ -1,8 +1,7 @@ install text reboot --eject -url --url=https://mirrors.kernel.org/fedora/releases/27/Everything/x86_64/os/ -# url --url=https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Everything/x86_64/os/ +url --url=https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Everything/x86_64/os/ lang en_US.UTF-8 keyboard us timezone US/Pacific diff --git a/http/generic.fedora30.vagrant.ks b/http/generic.fedora30.vagrant.ks new file mode 100644 index 000000000..f6097dfa6 --- /dev/null +++ b/http/generic.fedora30.vagrant.ks @@ -0,0 +1,46 @@ +install +text +reboot --eject +lang en_US.UTF-8 +keyboard us +timezone US/Pacific +rootpw --plaintext vagrant +user --name=vagrant --password=vagrant --plaintext +zerombr +autopart --type=plain --nohome +clearpart --all --initlabel +firewall --enabled --service=ssh +authconfig --enableshadow --passalgo=sha512 +network --device eth0 --bootproto dhcp --noipv6 --hostname=fedora30.localdomain +# bootloader --timeout=1 --append="net.ifnames=0 biosdevname=0 elevator=noop no_timer_check vga=normal nomodeset text" +bootloader --timeout=1 --append="net.ifnames=0 biosdevname=0 elevator=noop no_timer_check vga=792 nomodeset text" + +# When this release is no longer available from mirrors, enable the archive url. +url --url=https://dl.fedoraproject.org/pub/fedora/linux/releases/30/Server/x86_64/os/ +# url --url=https://mirrors.kernel.org/fedora/releases/30/Everything/x86_64/os/ +# url --url=https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/30/Everything/x86_64/os/ + +%packages +net-tools +@core +%end + +%post + +# Create the vagrant user account. +/usr/sbin/useradd vagrant +echo "vagrant" | passwd --stdin vagrant + +# Make the future vagrant user a sudo master. +sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers +echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/vagrant +chmod 0440 /etc/sudoers.d/vagrant + +VIRT=`dmesg | grep "Hypervisor detected" | awk -F': ' '{print $2}'` +if [[ $VIRT == "Microsoft HyperV" || $VIRT == "Microsoft Hyper-V" ]]; then + dnf --assumeyes install hyperv-daemons + systemctl enable hypervvssd.service + systemctl enable hypervkvpd.service +fi + +%end diff --git a/http/generic.freebsd11.vagrant.cfg b/http/generic.freebsd11.vagrant.cfg index 096bcbaf4..c132d9e2f 100644 --- a/http/generic.freebsd11.vagrant.cfg +++ b/http/generic.freebsd11.vagrant.cfg @@ -45,8 +45,8 @@ vagrant ALL=(ALL) NOPASSWD: ALL EOF chmod 440 /usr/local/etc/sudoers.d/vagrant -sed -i -e "s/.*UseDNS.*/UseDNS no/g" /etc/ssh/sshd_config -sed -i -e "s/.*PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config +sed -i "" -e "s/.*UseDNS.*/UseDNS no/g" /etc/ssh/sshd_config +sed -i "" -e "s/.*PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config chsh -s bash root chsh -s bash vagrant diff --git a/http/generic.freebsd12.vagrant.cfg b/http/generic.freebsd12.vagrant.cfg index e88c4f89a..c056f2960 100644 --- a/http/generic.freebsd12.vagrant.cfg +++ b/http/generic.freebsd12.vagrant.cfg @@ -45,8 +45,8 @@ vagrant ALL=(ALL) NOPASSWD: ALL EOF chmod 440 /usr/local/etc/sudoers.d/vagrant -sed -i -e "s/.*UseDNS.*/UseDNS no/g" /etc/ssh/sshd_config -sed -i -e "s/.*PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config +sed -i "" -e "s/.*UseDNS.*/UseDNS no/g" /etc/ssh/sshd_config +sed -i "" -e "s/.*PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config chsh -s bash root chsh -s bash vagrant diff --git a/http/generic.gentoo.vagrant.chroot.sh b/http/generic.gentoo.vagrant.chroot.sh index f4daf7609..cd8187263 100644 --- a/http/generic.gentoo.vagrant.chroot.sh +++ b/http/generic.gentoo.vagrant.chroot.sh @@ -2,6 +2,7 @@ echo 'Creating File System Table' cat <<-EOF > /etc/fstab +/dev/sda1 /boot/efi vfat noauto,noatime 1 2 /dev/sda2 /boot ext4 defaults 0 0 /dev/sda3 none swap defaults 0 0 /dev/sda4 / ext4 defaults 0 0 @@ -20,7 +21,7 @@ FEATURES="\${FEATURES} parallel-fetch" USE="nls alsa usb unicode" USE_PYTHON="3.6 2.7" PYTHON_TARGETS="python3_6 python2_7" -GRUB_PLATFORMS="emu pc" +GRUB_PLATFORMS="emu efi-32 efi-64 pc" PORTDIR="/usr/portage" DISTDIR="${PORTDIR}/distfiles" PKGDIR="${PORTDIR}/packages" @@ -48,8 +49,9 @@ mkdir -p "/etc/portage/package.unmask" echo 'Emerging Dependencies' cd /usr/portage -emerge sys-kernel/gentoo-sources sys-boot/grub app-editors/vim app-admin/sudo \ -sys-apps/netplug sys-apps/dmidecode +profile="`grep stable profiles/profiles.desc | grep no-multilib | grep amd64 | awk -F' ' '{print \$2}' | grep -E 'no-multilib\$' | tail -1`" +rm -f /etc/portage/make.profile && ln -s /usr/portage/profiles/$profile /etc/portage/make.profile +emerge sys-kernel/gentoo-sources sys-boot/grub app-editors/vim app-admin/sudo sys-apps/netplug sys-apps/dmidecode # If necessary, include the Hyper-V modules in the initramfs and then load them at boot. if [ "$(dmidecode -s system-manufacturer)" == "Microsoft Corporation" ]; then @@ -225,28 +227,31 @@ CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y CONFIG_ARCH_SUPPORTS_INT128=y # CONFIG_NUMA_BALANCING is not set CONFIG_CGROUPS=y -# CONFIG_MEMCG is not set -# CONFIG_BLK_CGROUP is not set +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +CONFIG_MEMCG_SWAP_ENABLED=y +CONFIG_BLK_CGROUP=y +CONFIG_BLK_DEV_THROTTLING=y CONFIG_CGROUP_SCHED=y CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_CFS_BANDWIDTH is not set -# CONFIG_RT_GROUP_SCHED is not set -# CONFIG_CGROUP_PIDS is not set +CONFIG_CFS_BANDWIDTH=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_CGROUP_PIDS=y # CONFIG_CGROUP_RDMA is not set CONFIG_CGROUP_FREEZER=y -# CONFIG_CGROUP_HUGETLB is not set +CONFIG_CGROUP_HUGETLB=y CONFIG_CPUSETS=y CONFIG_PROC_PID_CPUSET=y -# CONFIG_CGROUP_DEVICE is not set +CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y -# CONFIG_CGROUP_PERF is not set +CONFIG_CGROUP_PERF=y # CONFIG_CGROUP_DEBUG is not set # CONFIG_SOCK_CGROUP_DATA is not set # CONFIG_CHECKPOINT_RESTORE is not set CONFIG_NAMESPACES=y CONFIG_UTS_NS=y CONFIG_IPC_NS=y -# CONFIG_USER_NS is not set +CONFIG_USER_NS=y CONFIG_PID_NS=y CONFIG_NET_NS=y CONFIG_SCHED_AUTOGROUP=y @@ -471,6 +476,7 @@ CONFIG_BLK_MQ_VIRTIO=y CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_DEADLINE=y CONFIG_IOSCHED_CFQ=y +CONFIG_CFQ_GROUP_IOSCHED=y # CONFIG_DEFAULT_DEADLINE is not set CONFIG_DEFAULT_CFQ=y # CONFIG_DEFAULT_NOOP is not set @@ -966,11 +972,11 @@ CONFIG_SYN_COOKIES=y # CONFIG_NET_FOU is not set # CONFIG_NET_FOU_IP_TUNNELS is not set # CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set +CONFIG_INET_ESP=y # CONFIG_INET_IPCOMP is not set # CONFIG_INET_XFRM_TUNNEL is not set CONFIG_INET_TUNNEL=y -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +CONFIG_INET_XFRM_MODE_TRANSPORT=y # CONFIG_INET_XFRM_MODE_TUNNEL is not set # CONFIG_INET_XFRM_MODE_BEET is not set # CONFIG_INET_DIAG is not set @@ -1043,15 +1049,16 @@ CONFIG_NF_CONNTRACK_FTP=y CONFIG_NF_CONNTRACK_IRC=y # CONFIG_NF_CONNTRACK_NETBIOS_NS is not set CONFIG_NF_CONNTRACK_SIP=y +CONFIG_NF_CONNTRACK_TFTP=y CONFIG_NF_CT_NETLINK=y # CONFIG_NETFILTER_NETLINK_GLUE_CT is not set CONFIG_NF_NAT=m CONFIG_NF_NAT_NEEDED=y # CONFIG_NF_NAT_AMANDA is not set -CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_FTP=y CONFIG_NF_NAT_IRC=m CONFIG_NF_NAT_SIP=m -# CONFIG_NF_NAT_TFTP is not set +CONFIG_NF_NAT_TFTP=y # CONFIG_NF_NAT_REDIRECT is not set # CONFIG_NF_TABLES is not set CONFIG_NETFILTER_XTABLES=y @@ -1076,12 +1083,17 @@ CONFIG_NETFILTER_XT_TARGET_TCPMSS=y # # Xtables matches # -CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y CONFIG_NETFILTER_XT_MATCH_POLICY=y CONFIG_NETFILTER_XT_MATCH_STATE=y +CONFIG_NETFILTER_XT_MATCH_IPVS=y # CONFIG_IP_SET is not set -# CONFIG_IP_VS is not set +CONFIG_IP_VS=y +CONFIG_IP_VS_NFCT=y +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_RR=y # # IP: Netfilter Configuration @@ -1093,18 +1105,18 @@ CONFIG_NF_CONNTRACK_IPV4=y CONFIG_NF_LOG_ARP=m CONFIG_NF_LOG_IPV4=m CONFIG_NF_REJECT_IPV4=y -CONFIG_NF_NAT_IPV4=m +CONFIG_NF_NAT_IPV4=y CONFIG_NF_NAT_MASQUERADE_IPV4=m # CONFIG_NF_NAT_PPTP is not set # CONFIG_NF_NAT_H323 is not set CONFIG_IP_NF_IPTABLES=y CONFIG_IP_NF_FILTER=y CONFIG_IP_NF_TARGET_REJECT=y -CONFIG_IP_NF_NAT=m -CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_NAT=y +CONFIG_IP_NF_TARGET_MASQUERADE=y CONFIG_IP_NF_MANGLE=y # CONFIG_IP_NF_RAW is not set - +CONFIG_IP_NF_TARGET_REDIRECT=y # # IPv6: Netfilter Configuration # @@ -1126,7 +1138,9 @@ CONFIG_IP6_NF_MANGLE=y # CONFIG_TIPC is not set # CONFIG_ATM is not set # CONFIG_L2TP is not set -# CONFIG_BRIDGE is not set +CONFIG_BRIDGE=y +CONFIG_BRIDGE_NETFILTER=y +CONFIG_BRIDGE_VLAN_FILTERING=y CONFIG_HAVE_NET_DSA=y # CONFIG_NET_DSA is not set # CONFIG_VLAN_8021Q is not set @@ -1182,7 +1196,7 @@ CONFIG_NET_CLS=y # CONFIG_NET_CLS_RSVP is not set # CONFIG_NET_CLS_RSVP6 is not set # CONFIG_NET_CLS_FLOW is not set -# CONFIG_NET_CLS_CGROUP is not set +CONFIG_NET_CLS_CGROUP=y # CONFIG_NET_CLS_BPF is not set # CONFIG_NET_CLS_FLOWER is not set # CONFIG_NET_CLS_MATCHALL is not set @@ -1229,7 +1243,7 @@ CONFIG_VIRTIO_VSOCKETS_COMMON=y CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_XPS=y -# CONFIG_CGROUP_NET_PRIO is not set +CONFIG_CGROUP_NET_PRIO=y # CONFIG_CGROUP_NET_CLASSID is not set CONFIG_NET_RX_BUSY_POLL=y CONFIG_BQL=y @@ -1682,7 +1696,7 @@ CONFIG_BLK_DEV_DM=y # CONFIG_DM_DEBUG is not set # CONFIG_DM_CRYPT is not set # CONFIG_DM_SNAPSHOT is not set -# CONFIG_DM_THIN_PROVISIONING is not set +CONFIG_DM_THIN_PROVISIONING=y # CONFIG_DM_CACHE is not set # CONFIG_DM_ERA is not set CONFIG_DM_MIRROR=y @@ -1717,12 +1731,13 @@ CONFIG_NETDEVICES=y CONFIG_MII=y CONFIG_NET_CORE=y # CONFIG_BONDING is not set -# CONFIG_DUMMY is not set +CONFIG_DUMMY=y # CONFIG_EQUALIZER is not set # CONFIG_NET_FC is not set # CONFIG_IFB is not set # CONFIG_NET_TEAM is not set -# CONFIG_MACVLAN is not set +CONFIG_MACVLAN=y +CONFIG_IPVLAN=y # CONFIG_VXLAN is not set # CONFIG_MACSEC is not set CONFIG_NETCONSOLE=y @@ -1732,7 +1747,7 @@ CONFIG_NET_POLL_CONTROLLER=y # CONFIG_RIONET is not set CONFIG_TUN=m # CONFIG_TUN_VNET_CROSS_LE is not set -CONFIG_VETH=m +CONFIG_VETH=y CONFIG_VIRTIO_NET=y # CONFIG_NLMON is not set # CONFIG_ARCNET is not set @@ -3999,8 +4014,9 @@ CONFIG_FS_IOMAP=y CONFIG_EXT2_FS=y # CONFIG_EXT2_FS_XATTR is not set CONFIG_EXT3_FS=y -# CONFIG_EXT3_FS_POSIX_ACL is not set -# CONFIG_EXT3_FS_SECURITY is not set +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y CONFIG_EXT4_FS=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y @@ -4045,7 +4061,7 @@ CONFIG_QUOTACTL_COMPAT=y CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m CONFIG_CUSE=m -# CONFIG_OVERLAY_FS is not set +CONFIG_OVERLAY_FS=y # # Caches @@ -4746,7 +4762,7 @@ make modules_install echo 'Configuring Grub' DEVID=`blkid -s UUID -o value /dev/sda4` printf "\nGRUB_DEVICE_UUID=\"$DEVID\"\n" >> /etc/default/grub -grub-install /dev/sda +grub-install --efi-directory=/boot/efi /dev/sda grub-mkconfig -o /boot/grub/grub.cfg echo 'Configuring Network Services' diff --git a/http/generic.gentoo.vagrant.sh b/http/generic.gentoo.vagrant.sh index e341aa124..2a7d712f7 100644 --- a/http/generic.gentoo.vagrant.sh +++ b/http/generic.gentoo.vagrant.sh @@ -5,15 +5,17 @@ echo 'Preparing Filesystem to Install Gentoo' echo 'Partitioning Filesystems' declare -i current=1 parted -a opt -s /dev/sda -- "mklabel gpt" -parted -a opt -s /dev/sda -- "mkpart BIOS ext4 $(( current )) $(( current += 128 ))m" -parted -a opt -s /dev/sda -- "mkpart BOOT ext4 $(( current )) $(( current += 256 ))m" +parted -a opt -s /dev/sda -- "mkpart EFI fat16 $(( current )) $(( current += 128 ))m" +parted -a opt -s /dev/sda -- "mkpart BOOT ext4 $(( current )) $(( current += 512 ))m" parted -a opt -s /dev/sda -- "mkpart SWAP linux-swap $(( current ))m $(( current += 4096 ))m" parted -a opt -s /dev/sda -- "mkpart ROOT ext4 $(( current ))m -1" parted -a opt -s /dev/sda -- "set 1 bios_grub on" parted -a opt -s /dev/sda -- "set 2 boot on" echo 'Formatting Filesystems' -echo /dev/sda[0-9]* | xargs -n1 -- mkfs -t ext4 +mkfs.fat -F 32 -n efi-boot /dev/sda1 +mkfs -t ext4 /dev/sda2 +mkfs -t ext4 /dev/sda4 echo 'Mounting Filesystems in /mnt/gentoo' mkswap /dev/sda3 @@ -21,26 +23,1122 @@ swapon /dev/sda3 mount /dev/sda4 /mnt/gentoo/ mkdir -p /mnt/gentoo/{boot,var,usr,tmp,home} mount /dev/sda2 /mnt/gentoo/boot -mkdir -p /mnt/gentoo/boot/grub +mkdir -p /mnt/gentoo/boot/{grub,efi} +mount /dev/sda1 /mnt/gentoo/boot/efi + +gpg --import <<-EOF +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v2.0.22 (GNU/Linux) + +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 +Pr2G/zynWBNbN+JpZfiZ+IoDehYnCqogr9UkHSj90vfIXnXZBJqI+ffstrd4q3hV +1BWFjOx0Atq0BLbJICDNGgZhC2jieEoSse9x/wC5qLzZvhtncQo8bK98G0iNtLyf +ZL32DtW6BNpcNk5FaD5PK7aG7KIJDKfx/tw/ZJRUZss50xzq2C+UUTapcVc+C32w +dWyhNKjo0dmHuGlI3IW2opYyMfnmYBnSQhGIyomSfk5izRG/PgUZc/sya0/WtbTT +TCAv8T28zyEjVv5N0+nCD+A/aRwykEsppSCOLzT1hVhQYNQ5qnVKDYn4gBOQwMJA +uPbDec6wJ6SnXJL+uCjP98KKmLzBkXfyhA3/dLYFf++NwFPcwX9WxgoAtEgxtk6y +zvfT2ZiqwfVBicYire9/rYSrwd3wimFgpRM0kdIsqxbHXtCclvLQdBayj0Mrb0bb +Riu+o4XGUCfYQHbHzk5tP4Bfk2kSBfs1HrRYR2VudG9vIGVidWlsZCByZXBvc2l0 +b3J5IHNpZ25pbmcga2V5IChBdXRvbWF0ZWQgU2lnbmluZyBLZXkpIDxpbmZyYXN0 +cnVjdHVyZUBnZW50b28ub3JnPokBXwQTAQoASRYhBBj3A9cCsblZE3MUjFXTI47A +UDluBQJcofqEKxpodHRwczovL3d3dy5nZW50b28ub3JnL2dsZXAvZ2xlcC0wMDc5 +Lmh0bWwACgkQVdMjjsBQOW4GgQf/YRJbSEWQr66zifC5Q09a9gYMoamGc5eJ7+xL +IW9M3K00JLltXxr00eq4dtVmQPBjKe6B0rtJKT1u8YO44/prRZX8UlfhsbJ49xNh +aFDGrUSQeS2Zh2d0FhdPuLc0NmOOoUz37Lixskus7gi8xolEVcLdjJojiqO4Tae0 +nzZw1aixHDZtk1ybjTXyUhpdSS8Jibmi1TJzx3IIUdwH0YTwoVvzAY6CuSTv7gbB +tT8I01pCZp+b42b/OZUMqr63iBicpRfUpGFuADfe6bXl/CbPcCEP8IutUhC6gaLK +kdEEdlw8DtqwUdn0vtLxbxD1CNH8BZo1fE3Ex9oa7z8bu4CwcYkCVAQTAQoAPgIb +AQULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBNzQW3HquUGZUn9ErNtrjB+W2L9t +BQJcK3jFBQkPPYs8AAoJENtrjB+W2L9tV+IP/1bK95b9Y8+ufrYiBI3RRGIDnwFl +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 +NYCKeX+qDefc2RZV3cmlbfvEW6ofiQIzBBABCgAdFiEEbrzteGt3Yt8DKJ9gFL7f +0MW+zakFAlr1cdEACgkQFL7f0MW+zalnUQ/9HZCU7fsiA6uewixIPxOCOlUzbdVN +t+FdJgYEV5hSoV53WutF3HLSpoRuKACuJxy1zecf8ttz2/mHQSbb0c1zn7d3BZRO ++9KN48ADIFgDy34FQJQOsDrK/1fWq6Otgl9apkkzbzWDGNyBFoR1JZaFlNiIXyb8 +kG1ho8Uags+Awi71xnJuIL3R5L3cdNzQGOZ4NnrO7gxzcBOH6nevaIzRSqRrK/vq +XKpPp4Clh2Rd0ndr5IVZ4blc0Ua/VUCV+fuEb6fMUTTjRS/tg1F59ShCWHTr5L1H +hGhhOTOXxk17b5U99vRKlMpjqIS9eQyhoL7iUEws7o1pdmJ9mI3NndRwOn9Eg9Rg +GJAa9hJmYB+lwexLJqfMxxnkOAD9bdSuMU9/O5oKl1oYowplJxT6o5WSs5YT0cKS +SUahGyjH0kvwMypvQ/TqXyrIjG51GrOVORmSP++IgXSjiKq5InYj1k4VOkc+cOur +HMc8wmCN3PErg1MEYzs47I9WmeO/ymqxharCGXUjePiOAf9l42a4cLjchtOj4jd9 ++Fda9Dkjqd4nysbbNbiFxuJDENmSqSokEzqOSUbTBwTHn5hsFfjymReoi49Z5h91 +NE0JkUKcNNhLNyuSJYb4RqxTQLbhQz9thLLNPlk7F8xQcSbGD1vQvVraSWjyeD3h +hlUDaWlZeTSVW3WJCFoEEQEKAEQWIQSg2B0j/3rzDfRnID6FCCUvmzAVNgUCWNQy +tyYaaHR0cHM6Ly9rZXliYXNlLnB1Yi9oNS9wZ3AvcG9saWN5LnR4dAAKCRCFCCUv +mzAVNme2P/4kal/hL+X4yL3J6/kP5Y6XHWJlqacLzlv7zCqYMhBflN7ciTTdLEDk +yO94AKBYyu33UwyutF5Aw9Q2sEWARfGbBu+qKmtesPRxorMxiA14EW7xp4PIokEm +vYbOukatZEWqGunNo10hkroZ8uQb2LRK4ip8lDE3FyFP5geqY42CVyd/A6puw/ZQ +8qIl2KZpAL9CjHybJmmz/5oNXZfrRyR4Vg5CRbe7o9gMsbRsU0VSzqjTeOzU7ttW +mIrD0EvNG2RwmF+fOE1+VbAJFeiNuKQOb5WJ75XinUp5hWf4FMjvLhF3XLTLLbig +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 +b2qiGKRSpSG6rD25eeNZoY07Ltsq4HwJUQQCHq/ZunNHbYyCZ6p1wcjYb9dV3Yh9 +6yFEQiXCpGSAYDHKLLp92zCvYR2EPgNnby21iBuFuu8Q7n2Kc5kcfKS3qX0GuhR4 +A/+WtQCfd30K5JHdIGg2zbdB/w70Gai2sWmRyrQlTuyWcD78cOLbUo6ujFvL+/CN +Q/Yv1gud671HhU4goZu8bQjM169PIOdV7v7d6tKDrWh4Qh2BjokCOwQTAQIAJQUC +SpRbOQIbAwUJB4TOAAYLCQgHAwIEFQIIAwMWAgECHgECF4AACgkQu1cuDi0YKRAW +rxAAjej44THZ94L/RHurNd7oA2QER1cMYgUtiCBWq049Lb8LV9hh5nvLtAIEPLtY +YRiKfyb51IvC8pU058cqFnk0u5FOy8L9PKV9LiOjKxn025UUKClmUChnE2d290I9 +pfRF1ByANGQY/0Tz2qquCUAI4kNzYNoQoraVDbjAr3DCbSUoAc2zd3mrP1NDY+ik +Ef////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +//////////////////////////////////////////////+JAlIEEwECADwCGwMG +CwkIBwMCBBUCCAMDFgIBAh4BAheAFiEEE+u9vt56Endd/bG6u1cuDi0YKRAFAlmc +Sd8FCRLKVacACgkQu1cuDi0YKRARrw/9EX4Gc/Xzm0sWACVhJtRxYyCra9o4Q/Zt +GJZWIb+iYVNtUZ5ahG+Q0R5KgAgPDhg0xOOB66CRm+gjlOqpMlrZ5Gf6oDxUP4tZ +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 +vrunAxffXYAF2lY= +=Why+ +-----END PGP PUBLIC KEY BLOCK----- +EOF cd /mnt/gentoo # Download the current-stage3-amd64-nomultilib and the portage tarballs, unpack them, and then delete the archive files. -echo 'Downloading Tarballs' -tarball=$(wget -q https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/ -O - | grep -E -o -e "stage3-amd64-nomultilib-[0-9]{8}T[0-9]{6}Z.tar.xz" | uniq) -wget --tries=5 -q https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/$tarball || exit 1 -wget --tries=5 -q https://mirrors.kernel.org/gentoo/snapshots/portage-latest.tar.bz2 || exit 1 +echo 'Downloading Image Overlay' +# host="https://gentoo.osuosl.org" +host="https://mirrors.kernel.org/gentoo" +# host="https://mirror.yandex.ru/gentoo-distfiles/" +tarball=$(wget -q $host/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/ -O - | grep -E -o -e "stage3-amd64-nomultilib-[0-9]{8}T[0-9]{6}Z.tar.xz" | uniq) +wget --tries=5 --progress=dot:binary $host/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/$tarball || exit 1 +wget --tries=5 -q $host/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/$tarball.DIGESTS.asc || exit 1 -# An alternate download location for when the kernel.org mirror isn't sync'ed properly. -#tarball=$(wget -q https://gentoo.osuosl.org/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/ -O - | grep -E -o -e "stage3-amd64-nomultilib-[0-9]{8}T[0-9]{6}Z.tar.xz" | uniq) -#wget --tries=5 -q https://gentoo.osuosl.org/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/$tarball || exit 1 -#wget --tries=5 -q https://gentoo.osuosl.org/snapshots/portage-latest.tar.bz2 || exit 1 +echo 'Downloading Portage' +wget --tries=5 --progress=dot:binary $host/snapshots/portage-latest.tar.bz2 || exit 1 +wget --tries=5 -q $host/snapshots/portage-latest.tar.bz2.gpgsig || exit 1 + +echo 'Signature Verification' +gpg --verify $tarball.DIGESTS.asc || (echo 'Tarball Verification Failed.'; sleep 3600; exit 1) +gpg --verify portage-latest.tar.bz2.gpgsig portage-latest.tar.bz2 || (echo 'Portage Verification Failed'; sleep 3600; exit 1) +(grep --after-context=1 SHA512 $tarball.DIGESTS.asc | grep -vE "CONTENTS|^#|^\-\-$" | sha512sum --check) || (echo 'Tarball Hash Check Failed'; sleep 3600; exit 1) echo 'Extracting Gentoo Tarball' -tar xJpf $tarball && rm -f $tarball +tar xJpf $tarball && rm -f $tarball $tarball.DIGESTS.asc echo 'Extracting Portage Tarball' -tar xjpf portage-latest.tar.bz2 -C '/mnt/gentoo/usr' && rm -f portage-latest.tar.bz2 +tar xjpf portage-latest.tar.bz2 -C '/mnt/gentoo/usr' && rm -f portage-latest.tar.bz2 portage-latest.tar.bz2.gpgsig # Copy the resolv config and rebind the dynamic system directories. mount -t proc /proc /mnt/gentoo/proc @@ -53,6 +1151,9 @@ cp /etc/resolv.conf /mnt/gentoo/etc # Execute the chroot script. chroot /mnt/gentoo /bin/bash < /root/generic.gentoo.vagrant.chroot.sh +# If the chroot starts failing, use this command instead to see where it is failing. +# (chroot /mnt/gentoo /bin/bash -ex < /root/generic.gentoo.vagrant.chroot.sh) || exit 1 + # And then reboot. echo "Chroot finished, ready to restart." reboot diff --git a/http/generic.openbsd6.install.cfg b/http/generic.openbsd6.install.cfg index f115986fe..9158b9b79 100644 --- a/http/generic.openbsd6.install.cfg +++ b/http/generic.openbsd6.install.cfg @@ -5,7 +5,7 @@ Setup a user = vagrant Password for user vagrant = vagrant Location of sets = https HTTP Server = ftp.usa.openbsd.org -Server directory = pub/OpenBSD/6.4/amd64/ +Server directory = pub/OpenBSD/6.5/amd64/ Set name(s) = -game* Set name(s) = -x* What timezone are you in = US/Pacific diff --git a/http/generic.opensuse15.vagrant.cfg b/http/generic.opensuse15.vagrant.cfg new file mode 100644 index 000000000..c8a74babf --- /dev/null +++ b/http/generic.opensuse15.vagrant.cfg @@ -0,0 +1,240 @@ + + + + + + + + false + true + true + false + false + + + + + + false + 10 + true + + + false + 10 + true + + + false + 10 + true + + + + + english-us + + + + en_US + en_US + + + + localtime + US/Pacific + + + + + true + + + true + false + swap + true + defaults + false + swap + device + 130 + 1 + + false + 4096M + + + true + false + btrfs + true + false + / + device + 131 + 2 + + false + max + + boot/grub2/i386-pc + boot/grub2/x86_64-efi + + + + + CT_DISK + all + + + + + grub2 + + true + 10 + true + + + + + false + true + + false + true + localdomain + opensuse15.localdomain + + + + dhcp + enp0s3 + hotplug + + + dhcp + ens33 + hotplug + + + dhcp + eth0 + hotplug + + + + + + true + true + 0/0,tcp,22 + 0/0,tcp,22 + 0/0,tcp,22 + + + + + https://download.opensuse.org/distribution/leap/15.1/repo/oss/ + false + kernel-default + + minimal_base + sw_management + yast2_install_wf + + + grub2 + glibc-locale + iputils + kernel-default + kernel-default-devel + gcc + make + sudo + yast2 + yast2-firstboot + zypper + yast2-trans-en_US + wget + curl + grub2-branding-openSUSE + + + virtualbox-guest-kmp-default + virtualbox-guest-tools + + + + + multi-user + + + + + + + + + + + 1000 + vagrant + + + + + + + /home + -1 + /bin/bash + /etc/skel + 022 + + + + + vagrant + root + + + vagrant + 1000 + /home/vagrant + + + + -1 + 99999 + 0 + 7 + + /bin/bash + 1000 + vagrant + vagrant + + + + + false + + + + + + + + + diff --git a/http/generic.oracle7.docker.ks b/http/generic.oracle7.docker.ks new file mode 100644 index 000000000..0ffa7d31b --- /dev/null +++ b/http/generic.oracle7.docker.ks @@ -0,0 +1,42 @@ +install +cdrom + +lang en_US.UTF-8 +keyboard us +timezone US/Pacific + +text +skipx + +firstboot --disabled +selinux --enforcing +firewall --enabled --service=ssh + +network --device eth0 --bootproto dhcp --noipv6 --hostname=oracle7.localdomain + +zerombr +clearpart --all --initlabel +bootloader --location=mbr --append="net.ifnames=0 biosdevname=0 elevator=noop no_timer_check" +autopart + +rootpw locked +authconfig --enableshadow --passalgo=sha512 + +reboot --eject + +%packages --instLangs=en --nobase +@core +authconfig +sudo +# Microcode updates don't work in a VM +#-microcode_ctl +# Firmware packages aren't needed in a VM +#-*firmware +kernel-abi-whitelists +%end + +%post + +#echo "locked" | passwd --stdin + +%end diff --git a/http/generic.oracle8.docker.ks b/http/generic.oracle8.docker.ks new file mode 100644 index 000000000..7d588b5e8 --- /dev/null +++ b/http/generic.oracle8.docker.ks @@ -0,0 +1,37 @@ +install +cdrom + +lang en_US.UTF-8 +keyboard us +timezone US/Pacific + +text +skipx + +firstboot --disabled +selinux --enforcing +firewall --enabled --service=ssh + +network --device eth0 --bootproto dhcp --noipv6 --hostname=oracle8.localdomain + +zerombr +clearpart --all --initlabel +bootloader --location=mbr --append="net.ifnames=0 biosdevname=0 no_timer_check" +autopart + +rootpw locked +authconfig --enableshadow --passalgo=sha512 + +reboot --eject + +%packages --instLangs=en +@core +authconfig +sudo +%end + +%post + +#echo "locked" | passwd --stdin + +%end diff --git a/http/generic.oracle8.vagrant.ks b/http/generic.oracle8.vagrant.ks new file mode 100644 index 000000000..1348e1a00 --- /dev/null +++ b/http/generic.oracle8.vagrant.ks @@ -0,0 +1,55 @@ +install +cdrom + +lang en_US.UTF-8 +keyboard us +timezone US/Pacific + +text +skipx + +firstboot --disabled +selinux --enforcing +firewall --enabled --service=ssh + +network --device eth0 --bootproto dhcp --noipv6 --hostname=oracle8.localdomain + +zerombr +clearpart --all --initlabel +bootloader --location=mbr --append="net.ifnames=0 biosdevname=0 no_timer_check" +autopart + +rootpw vagrant +authconfig --enableshadow --passalgo=sha512 + +reboot --eject + +%packages --instLangs=en +@core +authconfig +sudo +%end + +%post + +# Create the vagrant user account. +/usr/sbin/useradd vagrant +echo "vagrant" | passwd --stdin vagrant + +# Make the future vagrant user a sudo master. +sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers +echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/vagrant +chmod 0440 /etc/sudoers.d/vagrant + +VIRT=`dmesg | grep "Hypervisor detected" | awk -F': ' '{print $2}'` +if [[ $VIRT == "Microsoft HyperV" || $VIRT == "Microsoft Hyper-V" ]]; then + dnf --assumeyes install hyperv-daemons + systemctl enable hypervvssd.service + systemctl enable hypervkvpd.service + + # Change the default boot kernel to the base model, otherwise the Hyper-V daemons will fail to start. + KERN=`grep menuentry /boot/grub2/grub.cfg | awk -F"'" '{print $2}' | grep -v -E "^$|Unbreakable|rescue"` + sed -i -e "s/saved_entry=.*/saved_entry=$KERN/g" /boot/grub2/grubenv +fi + +%end diff --git a/http/generic.rhel8.vagrant.ks b/http/generic.rhel8.vagrant.ks index 5e2b6eb27..cf1b5fad0 100644 --- a/http/generic.rhel8.vagrant.ks +++ b/http/generic.rhel8.vagrant.ks @@ -16,7 +16,7 @@ network --device eth0 --bootproto dhcp --noipv6 --hostname=rhel8.localdomain zerombr clearpart --all --initlabel -bootloader --location=mbr --append="net.ifnames=0 biosdevname=0 elevator=noop no_timer_check" +bootloader --location=mbr --append="net.ifnames=0 biosdevname=0 no_timer_check" autopart rootpw vagrant @@ -50,7 +50,7 @@ if [[ $VIRT == "Microsoft HyperV" || $VIRT == "Microsoft Hyper-V" ]]; then HYPERV_RPMS=`find /mnt/AppStream/Packages/ -iname "hyperv*rpm"` - yum --assumeyes install $HYPERV_RPMS + dnf --assumeyes install $HYPERV_RPMS systemctl enable hypervkvpd.service systemctl enable hypervvssd.service diff --git a/http/generic.ubuntu1710.vagrant.cfg b/http/generic.ubuntu1710.vagrant.cfg index c66d565c7..6bc9a9806 100644 --- a/http/generic.ubuntu1710.vagrant.cfg +++ b/http/generic.ubuntu1710.vagrant.cfg @@ -2,7 +2,7 @@ d-i base-installer/kernel/override-image string linux-server d-i keyboard-configuration/xkb-keymap select us d-i time/zone string US/Pacific d-i debian-installer/locale string en_US -d-i debian-installer/add-kernel-opts string net.ifnames=0 biosdevname=0 +d-i debian-installer/add-kernel-opts string net.ifnames=0 biosdevname=0 d-i finish-install/reboot_in_progress note d-i grub-installer/bootdev string default d-i partman-auto/method string regular @@ -52,17 +52,14 @@ d-i pkgsel/upgrade select none d-i mirror/http/proxy string d-i mirror/country string manual -d-i mirror/http/hostname string us.archive.ubuntu.com -#d-i mirror/http/hostname string old-releases.ubuntu.com +d-i mirror/http/hostname string old-releases.ubuntu.com d-i mirror/http/directory string /ubuntu -d-i apt-setup/security_host string security.ubuntu.com -#d-i apt-setup/security_host string old-releases.ubuntu.com +d-i apt-setup/security_host string old-releases.ubuntu.com d-i apt-setup/security_path string /ubuntu # Add the following when the mirrors no longer support 17.10 updates. -#sed -i -e "s/security.ubuntu.com/old-releases.ubuntu.com/g" /target/etc/apt/sources.list ; \ -#sed -i -e "s/us.archive.ubuntu.com/old-releases.ubuntu.com/g" /target/etc/apt/sources.list - d-i preseed/late_command string \ - sed -i -e "s/.*PermitRootLogin.*/PermitRootLogin yes/g" /target/etc/ssh/sshd_config + sed -i -e "s/.*PermitRootLogin.*/PermitRootLogin yes/g" /target/etc/ssh/sshd_config ; \ + sed -i -e "s/security.ubuntu.com/old-releases.ubuntu.com/g" /target/etc/apt/sources.list ; \ + sed -i -e "s/us.archive.ubuntu.com/old-releases.ubuntu.com/g" /target/etc/apt/sources.list diff --git a/http/generic.ubuntu1804.vagrant.cfg b/http/generic.ubuntu1804.vagrant.cfg index b8b59d0a7..569aa3fe1 100644 --- a/http/generic.ubuntu1804.vagrant.cfg +++ b/http/generic.ubuntu1804.vagrant.cfg @@ -2,7 +2,7 @@ d-i base-installer/kernel/override-image string linux-server d-i keyboard-configuration/xkb-keymap select us d-i time/zone string US/Pacific d-i debian-installer/locale string en_US -d-i debian-installer/add-kernel-opts string net.ifnames=0 biosdevname=0 +d-i debian-installer/add-kernel-opts string net.ifnames=0 biosdevname=0 d-i finish-install/reboot_in_progress note d-i grub-installer/bootdev string default d-i partman-auto/method string regular @@ -61,6 +61,7 @@ d-i apt-setup/security_host string security.ubuntu.com d-i apt-setup/security_path string /ubuntu # Add the following when the mirrors no longer support 18.04 updates. +#; \ #sed -i -e "s/security.ubuntu.com/old-releases.ubuntu.com/g" /target/etc/apt/sources.list ; \ #sed -i -e "s/us.archive.ubuntu.com/old-releases.ubuntu.com/g" /target/etc/apt/sources.list diff --git a/http/generic.ubuntu1904.vagrant.cfg b/http/generic.ubuntu1904.vagrant.cfg index d469bc0f8..f7b533f65 100644 --- a/http/generic.ubuntu1904.vagrant.cfg +++ b/http/generic.ubuntu1904.vagrant.cfg @@ -44,7 +44,7 @@ d-i user-setup/encrypt-home boolean false d-i netcfg/hostname string ubuntu1904.localdomain tasksel tasksel/first multiselect standard, server -d-i pkgsel/include string curl openssh-server sudo sed linux-tools-$(uname -r) linux-cloud-tools-$(uname -r) linux-cloud-tools-common linux-cloud-tools-generic linux-cloud-tools-virtual +d-i pkgsel/include string curl openssh-server sudo sed linux-tools-$(uname -r) d-i pkgsel/install-language-support boolean false d-i pkgsel/language-packs multiselect en d-i pkgsel/update-policy select none @@ -61,6 +61,7 @@ d-i apt-setup/security_host string security.ubuntu.com d-i apt-setup/security_path string /ubuntu # Add the following when the mirrors no longer support 19.04 updates. +#; \ #sed -i -e "s/security.ubuntu.com/old-releases.ubuntu.com/g" /target/etc/apt/sources.list ; \ #sed -i -e "s/us.archive.ubuntu.com/old-releases.ubuntu.com/g" /target/etc/apt/sources.list diff --git a/http/magma.arch.vagrant.chroot.sh b/http/magma.arch.vagrant.chroot.sh index 7e3d88db4..1163e6c4b 100644 --- a/http/magma.arch.vagrant.chroot.sh +++ b/http/magma.arch.vagrant.chroot.sh @@ -51,28 +51,29 @@ cd /home/vagrant/ # which will probably need to be updated when the major version changes. KERN=\`uname -r | awk -F'-' '{print \$1}' | sed -e 's/\.0$//g'\` +MAJOR=\`uname -r | awk -F'.' '{print \$1}'\` # hypervvsh -git clone https://aur.archlinux.org/hypervvssd.git hypervvssd && cd hypervvssd +sudo git clone https://aur.archlinux.org/hypervvssd.git hypervvssd && cd hypervvssd sed --in-place "s/^pkgver=.*/pkgver=\$KERN/g" PKGBUILD sed --in-place "s/pkgver = .*/pkgver = \$KERN/g" .SRCINFO -sed --in-place "s/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v4.x\/linux-.*.tar.gz/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v4.x\/linux-\$KERN.tar.gz/g" .SRCINFO +sed --in-place "s/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v\$MAJOR.x\/linux-.*.tar.gz/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v\$MAJOR.x\/linux-\$KERN.tar.gz/g" .SRCINFO makepkg --cleanbuild --noconfirm --syncdeps --install cd /home/vagrant/ && rm -rf hypervvssd # hypervkvpd -git clone https://aur.archlinux.org/hypervkvpd.git hypervkvpd && cd hypervkvpd +sudo git clone https://aur.archlinux.org/hypervkvpd.git hypervkvpd && cd hypervkvpd sed --in-place "s/^pkgver=.*/pkgver=\$KERN/g" PKGBUILD sed --in-place "s/pkgver = .*/pkgver = \$KERN/g" .SRCINFO -sed --in-place "s/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v4.x\/linux-.*.tar.gz/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v4.x\/linux-\$KERN.tar.gz/g" .SRCINFO +sed --in-place "s/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v\$MAJOR.x\/linux-.*.tar.gz/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v\$MAJOR.x\/linux-\$KERN.tar.gz/g" .SRCINFO makepkg --cleanbuild --noconfirm --syncdeps --install cd /home/vagrant/ && rm -rf hypervkvpd # hypervfcopyd -git clone https://aur.archlinux.org/hypervfcopyd.git hypervfcopyd && cd hypervfcopyd +sudo git clone https://aur.archlinux.org/hypervfcopyd.git hypervfcopyd && cd hypervfcopyd sed --in-place "s/^pkgver=.*/pkgver=\$KERN/g" PKGBUILD sed --in-place "s/pkgver = .*/pkgver = \$KERN/g" .SRCINFO -sed --in-place "s/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v4.x\/linux-.*.tar.gz/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v4.x\/linux-\$KERN.tar.gz/g" .SRCINFO +sed --in-place "s/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v\$MAJOR.x\/linux-.*.tar.gz/https:\/\/www.kernel.org\/pub\/linux\/kernel\/v\$MAJOR.x\/linux-\$KERN.tar.gz/g" .SRCINFO makepkg --cleanbuild --noconfirm --syncdeps --install cd /home/vagrant/ && rm -rf hypervfcopyd diff --git a/http/magma.arch.vagrant.sh b/http/magma.arch.vagrant.sh index 8affcec5c..bb335078c 100644 --- a/http/magma.arch.vagrant.sh +++ b/http/magma.arch.vagrant.sh @@ -23,12 +23,10 @@ mount "${device}2" /mnt # Ensure the kernel.org mirror is always listed, so things work, even when the archlinux # website goes offline. -printf "Server = https://mirrors.kernel.org/archlinux/\$repo/os/\$arch\n" > /tmp/mirrolist.50 printf "Server = https://mirrors.kernel.org/archlinux/\$repo/os/\$arch\n" > /etc/pacman.d/mirrorlist curl -fsS https://www.archlinux.org/mirrorlist/?country=all > /tmp/mirrolist -grep '^#Server' /tmp/mirrolist | grep "https" | sort -R | head -n 5 | sed 's/^#//' >> /tmp/mirrolist.50 -rankmirrors -v /tmp/mirrolist.50 | tee --append /etc/pacman.d/mirrorlist +grep '^#Server' /tmp/mirrolist | grep "https" | sort -R | head -n 5 | sed 's/^#//' >> /etc/pacman.d/mirrorlist pacstrap /mnt base grub bash sudo openssh swapon "${device}1" diff --git a/http/magma.debian8.vagrant.cfg b/http/magma.debian8.vagrant.cfg index dd974895c..f93ce7b48 100644 --- a/http/magma.debian8.vagrant.cfg +++ b/http/magma.debian8.vagrant.cfg @@ -1,9 +1,14 @@ choose-mirror-bin mirror/http/proxy string +d-i mirror/protocol string http +d-i mirror/http/proxy string +d-i mirror/country string manual +d-i mirror/http/hostname string archive.debian.org +d-i mirror/http/directory string /debian d-i base-installer/kernel/override-image string linux-server d-i keyboard-configuration/xkb-keymap select us d-i time/zone string US/Pacific d-i debian-installer/locale string en_US -d-i debian-installer/add-kernel-opts string net.ifnames=0 biosdevname=0 +d-i debian-installer/add-kernel-opts string net.ifnames=0 biosdevname=0 d-i finish-install/reboot_in_progress note d-i grub-installer/bootdev string default d-i grub-installer/only_debian boolean true diff --git a/http/magma.fedora27.vagrant.ks b/http/magma.fedora27.vagrant.ks index cf78a659f..dfaf6d9d9 100644 --- a/http/magma.fedora27.vagrant.ks +++ b/http/magma.fedora27.vagrant.ks @@ -1,8 +1,7 @@ install text reboot --eject -url --url=https://mirrors.kernel.org/fedora/releases/27/Everything/x86_64/os/ -# url --url=https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Everything/x86_64/os/ +url --url=https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Everything/x86_64/os/ lang en_US.UTF-8 keyboard us timezone US/Pacific diff --git a/http/magma.gentoo.vagrant.chroot.sh b/http/magma.gentoo.vagrant.chroot.sh index f4daf7609..cd8187263 100644 --- a/http/magma.gentoo.vagrant.chroot.sh +++ b/http/magma.gentoo.vagrant.chroot.sh @@ -2,6 +2,7 @@ echo 'Creating File System Table' cat <<-EOF > /etc/fstab +/dev/sda1 /boot/efi vfat noauto,noatime 1 2 /dev/sda2 /boot ext4 defaults 0 0 /dev/sda3 none swap defaults 0 0 /dev/sda4 / ext4 defaults 0 0 @@ -20,7 +21,7 @@ FEATURES="\${FEATURES} parallel-fetch" USE="nls alsa usb unicode" USE_PYTHON="3.6 2.7" PYTHON_TARGETS="python3_6 python2_7" -GRUB_PLATFORMS="emu pc" +GRUB_PLATFORMS="emu efi-32 efi-64 pc" PORTDIR="/usr/portage" DISTDIR="${PORTDIR}/distfiles" PKGDIR="${PORTDIR}/packages" @@ -48,8 +49,9 @@ mkdir -p "/etc/portage/package.unmask" echo 'Emerging Dependencies' cd /usr/portage -emerge sys-kernel/gentoo-sources sys-boot/grub app-editors/vim app-admin/sudo \ -sys-apps/netplug sys-apps/dmidecode +profile="`grep stable profiles/profiles.desc | grep no-multilib | grep amd64 | awk -F' ' '{print \$2}' | grep -E 'no-multilib\$' | tail -1`" +rm -f /etc/portage/make.profile && ln -s /usr/portage/profiles/$profile /etc/portage/make.profile +emerge sys-kernel/gentoo-sources sys-boot/grub app-editors/vim app-admin/sudo sys-apps/netplug sys-apps/dmidecode # If necessary, include the Hyper-V modules in the initramfs and then load them at boot. if [ "$(dmidecode -s system-manufacturer)" == "Microsoft Corporation" ]; then @@ -225,28 +227,31 @@ CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y CONFIG_ARCH_SUPPORTS_INT128=y # CONFIG_NUMA_BALANCING is not set CONFIG_CGROUPS=y -# CONFIG_MEMCG is not set -# CONFIG_BLK_CGROUP is not set +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +CONFIG_MEMCG_SWAP_ENABLED=y +CONFIG_BLK_CGROUP=y +CONFIG_BLK_DEV_THROTTLING=y CONFIG_CGROUP_SCHED=y CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_CFS_BANDWIDTH is not set -# CONFIG_RT_GROUP_SCHED is not set -# CONFIG_CGROUP_PIDS is not set +CONFIG_CFS_BANDWIDTH=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_CGROUP_PIDS=y # CONFIG_CGROUP_RDMA is not set CONFIG_CGROUP_FREEZER=y -# CONFIG_CGROUP_HUGETLB is not set +CONFIG_CGROUP_HUGETLB=y CONFIG_CPUSETS=y CONFIG_PROC_PID_CPUSET=y -# CONFIG_CGROUP_DEVICE is not set +CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y -# CONFIG_CGROUP_PERF is not set +CONFIG_CGROUP_PERF=y # CONFIG_CGROUP_DEBUG is not set # CONFIG_SOCK_CGROUP_DATA is not set # CONFIG_CHECKPOINT_RESTORE is not set CONFIG_NAMESPACES=y CONFIG_UTS_NS=y CONFIG_IPC_NS=y -# CONFIG_USER_NS is not set +CONFIG_USER_NS=y CONFIG_PID_NS=y CONFIG_NET_NS=y CONFIG_SCHED_AUTOGROUP=y @@ -471,6 +476,7 @@ CONFIG_BLK_MQ_VIRTIO=y CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_DEADLINE=y CONFIG_IOSCHED_CFQ=y +CONFIG_CFQ_GROUP_IOSCHED=y # CONFIG_DEFAULT_DEADLINE is not set CONFIG_DEFAULT_CFQ=y # CONFIG_DEFAULT_NOOP is not set @@ -966,11 +972,11 @@ CONFIG_SYN_COOKIES=y # CONFIG_NET_FOU is not set # CONFIG_NET_FOU_IP_TUNNELS is not set # CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set +CONFIG_INET_ESP=y # CONFIG_INET_IPCOMP is not set # CONFIG_INET_XFRM_TUNNEL is not set CONFIG_INET_TUNNEL=y -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +CONFIG_INET_XFRM_MODE_TRANSPORT=y # CONFIG_INET_XFRM_MODE_TUNNEL is not set # CONFIG_INET_XFRM_MODE_BEET is not set # CONFIG_INET_DIAG is not set @@ -1043,15 +1049,16 @@ CONFIG_NF_CONNTRACK_FTP=y CONFIG_NF_CONNTRACK_IRC=y # CONFIG_NF_CONNTRACK_NETBIOS_NS is not set CONFIG_NF_CONNTRACK_SIP=y +CONFIG_NF_CONNTRACK_TFTP=y CONFIG_NF_CT_NETLINK=y # CONFIG_NETFILTER_NETLINK_GLUE_CT is not set CONFIG_NF_NAT=m CONFIG_NF_NAT_NEEDED=y # CONFIG_NF_NAT_AMANDA is not set -CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_FTP=y CONFIG_NF_NAT_IRC=m CONFIG_NF_NAT_SIP=m -# CONFIG_NF_NAT_TFTP is not set +CONFIG_NF_NAT_TFTP=y # CONFIG_NF_NAT_REDIRECT is not set # CONFIG_NF_TABLES is not set CONFIG_NETFILTER_XTABLES=y @@ -1076,12 +1083,17 @@ CONFIG_NETFILTER_XT_TARGET_TCPMSS=y # # Xtables matches # -CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y CONFIG_NETFILTER_XT_MATCH_POLICY=y CONFIG_NETFILTER_XT_MATCH_STATE=y +CONFIG_NETFILTER_XT_MATCH_IPVS=y # CONFIG_IP_SET is not set -# CONFIG_IP_VS is not set +CONFIG_IP_VS=y +CONFIG_IP_VS_NFCT=y +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_RR=y # # IP: Netfilter Configuration @@ -1093,18 +1105,18 @@ CONFIG_NF_CONNTRACK_IPV4=y CONFIG_NF_LOG_ARP=m CONFIG_NF_LOG_IPV4=m CONFIG_NF_REJECT_IPV4=y -CONFIG_NF_NAT_IPV4=m +CONFIG_NF_NAT_IPV4=y CONFIG_NF_NAT_MASQUERADE_IPV4=m # CONFIG_NF_NAT_PPTP is not set # CONFIG_NF_NAT_H323 is not set CONFIG_IP_NF_IPTABLES=y CONFIG_IP_NF_FILTER=y CONFIG_IP_NF_TARGET_REJECT=y -CONFIG_IP_NF_NAT=m -CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_NAT=y +CONFIG_IP_NF_TARGET_MASQUERADE=y CONFIG_IP_NF_MANGLE=y # CONFIG_IP_NF_RAW is not set - +CONFIG_IP_NF_TARGET_REDIRECT=y # # IPv6: Netfilter Configuration # @@ -1126,7 +1138,9 @@ CONFIG_IP6_NF_MANGLE=y # CONFIG_TIPC is not set # CONFIG_ATM is not set # CONFIG_L2TP is not set -# CONFIG_BRIDGE is not set +CONFIG_BRIDGE=y +CONFIG_BRIDGE_NETFILTER=y +CONFIG_BRIDGE_VLAN_FILTERING=y CONFIG_HAVE_NET_DSA=y # CONFIG_NET_DSA is not set # CONFIG_VLAN_8021Q is not set @@ -1182,7 +1196,7 @@ CONFIG_NET_CLS=y # CONFIG_NET_CLS_RSVP is not set # CONFIG_NET_CLS_RSVP6 is not set # CONFIG_NET_CLS_FLOW is not set -# CONFIG_NET_CLS_CGROUP is not set +CONFIG_NET_CLS_CGROUP=y # CONFIG_NET_CLS_BPF is not set # CONFIG_NET_CLS_FLOWER is not set # CONFIG_NET_CLS_MATCHALL is not set @@ -1229,7 +1243,7 @@ CONFIG_VIRTIO_VSOCKETS_COMMON=y CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_XPS=y -# CONFIG_CGROUP_NET_PRIO is not set +CONFIG_CGROUP_NET_PRIO=y # CONFIG_CGROUP_NET_CLASSID is not set CONFIG_NET_RX_BUSY_POLL=y CONFIG_BQL=y @@ -1682,7 +1696,7 @@ CONFIG_BLK_DEV_DM=y # CONFIG_DM_DEBUG is not set # CONFIG_DM_CRYPT is not set # CONFIG_DM_SNAPSHOT is not set -# CONFIG_DM_THIN_PROVISIONING is not set +CONFIG_DM_THIN_PROVISIONING=y # CONFIG_DM_CACHE is not set # CONFIG_DM_ERA is not set CONFIG_DM_MIRROR=y @@ -1717,12 +1731,13 @@ CONFIG_NETDEVICES=y CONFIG_MII=y CONFIG_NET_CORE=y # CONFIG_BONDING is not set -# CONFIG_DUMMY is not set +CONFIG_DUMMY=y # CONFIG_EQUALIZER is not set # CONFIG_NET_FC is not set # CONFIG_IFB is not set # CONFIG_NET_TEAM is not set -# CONFIG_MACVLAN is not set +CONFIG_MACVLAN=y +CONFIG_IPVLAN=y # CONFIG_VXLAN is not set # CONFIG_MACSEC is not set CONFIG_NETCONSOLE=y @@ -1732,7 +1747,7 @@ CONFIG_NET_POLL_CONTROLLER=y # CONFIG_RIONET is not set CONFIG_TUN=m # CONFIG_TUN_VNET_CROSS_LE is not set -CONFIG_VETH=m +CONFIG_VETH=y CONFIG_VIRTIO_NET=y # CONFIG_NLMON is not set # CONFIG_ARCNET is not set @@ -3999,8 +4014,9 @@ CONFIG_FS_IOMAP=y CONFIG_EXT2_FS=y # CONFIG_EXT2_FS_XATTR is not set CONFIG_EXT3_FS=y -# CONFIG_EXT3_FS_POSIX_ACL is not set -# CONFIG_EXT3_FS_SECURITY is not set +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y CONFIG_EXT4_FS=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y @@ -4045,7 +4061,7 @@ CONFIG_QUOTACTL_COMPAT=y CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m CONFIG_CUSE=m -# CONFIG_OVERLAY_FS is not set +CONFIG_OVERLAY_FS=y # # Caches @@ -4746,7 +4762,7 @@ make modules_install echo 'Configuring Grub' DEVID=`blkid -s UUID -o value /dev/sda4` printf "\nGRUB_DEVICE_UUID=\"$DEVID\"\n" >> /etc/default/grub -grub-install /dev/sda +grub-install --efi-directory=/boot/efi /dev/sda grub-mkconfig -o /boot/grub/grub.cfg echo 'Configuring Network Services' diff --git a/http/magma.gentoo.vagrant.sh b/http/magma.gentoo.vagrant.sh index 864f6c5a1..104caada6 100644 --- a/http/magma.gentoo.vagrant.sh +++ b/http/magma.gentoo.vagrant.sh @@ -5,15 +5,17 @@ echo 'Preparing Filesystem to Install Gentoo' echo 'Partitioning Filesystems' declare -i current=1 parted -a opt -s /dev/sda -- "mklabel gpt" -parted -a opt -s /dev/sda -- "mkpart BIOS ext4 $(( current )) $(( current += 128 ))m" -parted -a opt -s /dev/sda -- "mkpart BOOT ext4 $(( current )) $(( current += 256 ))m" +parted -a opt -s /dev/sda -- "mkpart EFI fat16 $(( current )) $(( current += 128 ))m" +parted -a opt -s /dev/sda -- "mkpart BOOT ext4 $(( current )) $(( current += 512 ))m" parted -a opt -s /dev/sda -- "mkpart SWAP linux-swap $(( current ))m $(( current += 4096 ))m" parted -a opt -s /dev/sda -- "mkpart ROOT ext4 $(( current ))m -1" parted -a opt -s /dev/sda -- "set 1 bios_grub on" parted -a opt -s /dev/sda -- "set 2 boot on" echo 'Formatting Filesystems' -echo /dev/sda[0-9]* | xargs -n1 -- mkfs -t ext4 +mkfs.fat -F 32 -n efi-boot /dev/sda1 +mkfs -t ext4 /dev/sda2 +mkfs -t ext4 /dev/sda4 echo 'Mounting Filesystems in /mnt/gentoo' mkswap /dev/sda3 @@ -21,26 +23,1122 @@ swapon /dev/sda3 mount /dev/sda4 /mnt/gentoo/ mkdir -p /mnt/gentoo/{boot,var,usr,tmp,home} mount /dev/sda2 /mnt/gentoo/boot -mkdir -p /mnt/gentoo/boot/grub +mkdir -p /mnt/gentoo/boot/{grub,efi} +mount /dev/sda1 /mnt/gentoo/boot/efi + +gpg --import <<-EOF +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v2.0.22 (GNU/Linux) + +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 +Pr2G/zynWBNbN+JpZfiZ+IoDehYnCqogr9UkHSj90vfIXnXZBJqI+ffstrd4q3hV +1BWFjOx0Atq0BLbJICDNGgZhC2jieEoSse9x/wC5qLzZvhtncQo8bK98G0iNtLyf +ZL32DtW6BNpcNk5FaD5PK7aG7KIJDKfx/tw/ZJRUZss50xzq2C+UUTapcVc+C32w +dWyhNKjo0dmHuGlI3IW2opYyMfnmYBnSQhGIyomSfk5izRG/PgUZc/sya0/WtbTT +TCAv8T28zyEjVv5N0+nCD+A/aRwykEsppSCOLzT1hVhQYNQ5qnVKDYn4gBOQwMJA +uPbDec6wJ6SnXJL+uCjP98KKmLzBkXfyhA3/dLYFf++NwFPcwX9WxgoAtEgxtk6y +zvfT2ZiqwfVBicYire9/rYSrwd3wimFgpRM0kdIsqxbHXtCclvLQdBayj0Mrb0bb +Riu+o4XGUCfYQHbHzk5tP4Bfk2kSBfs1HrRYR2VudG9vIGVidWlsZCByZXBvc2l0 +b3J5IHNpZ25pbmcga2V5IChBdXRvbWF0ZWQgU2lnbmluZyBLZXkpIDxpbmZyYXN0 +cnVjdHVyZUBnZW50b28ub3JnPokBXwQTAQoASRYhBBj3A9cCsblZE3MUjFXTI47A +UDluBQJcofqEKxpodHRwczovL3d3dy5nZW50b28ub3JnL2dsZXAvZ2xlcC0wMDc5 +Lmh0bWwACgkQVdMjjsBQOW4GgQf/YRJbSEWQr66zifC5Q09a9gYMoamGc5eJ7+xL +IW9M3K00JLltXxr00eq4dtVmQPBjKe6B0rtJKT1u8YO44/prRZX8UlfhsbJ49xNh +aFDGrUSQeS2Zh2d0FhdPuLc0NmOOoUz37Lixskus7gi8xolEVcLdjJojiqO4Tae0 +nzZw1aixHDZtk1ybjTXyUhpdSS8Jibmi1TJzx3IIUdwH0YTwoVvzAY6CuSTv7gbB +tT8I01pCZp+b42b/OZUMqr63iBicpRfUpGFuADfe6bXl/CbPcCEP8IutUhC6gaLK +kdEEdlw8DtqwUdn0vtLxbxD1CNH8BZo1fE3Ex9oa7z8bu4CwcYkCVAQTAQoAPgIb +AQULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBNzQW3HquUGZUn9ErNtrjB+W2L9t +BQJcK3jFBQkPPYs8AAoJENtrjB+W2L9tV+IP/1bK95b9Y8+ufrYiBI3RRGIDnwFl +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 +NYCKeX+qDefc2RZV3cmlbfvEW6ofiQIzBBABCgAdFiEEbrzteGt3Yt8DKJ9gFL7f +0MW+zakFAlr1cdEACgkQFL7f0MW+zalnUQ/9HZCU7fsiA6uewixIPxOCOlUzbdVN +t+FdJgYEV5hSoV53WutF3HLSpoRuKACuJxy1zecf8ttz2/mHQSbb0c1zn7d3BZRO ++9KN48ADIFgDy34FQJQOsDrK/1fWq6Otgl9apkkzbzWDGNyBFoR1JZaFlNiIXyb8 +kG1ho8Uags+Awi71xnJuIL3R5L3cdNzQGOZ4NnrO7gxzcBOH6nevaIzRSqRrK/vq +XKpPp4Clh2Rd0ndr5IVZ4blc0Ua/VUCV+fuEb6fMUTTjRS/tg1F59ShCWHTr5L1H +hGhhOTOXxk17b5U99vRKlMpjqIS9eQyhoL7iUEws7o1pdmJ9mI3NndRwOn9Eg9Rg +GJAa9hJmYB+lwexLJqfMxxnkOAD9bdSuMU9/O5oKl1oYowplJxT6o5WSs5YT0cKS +SUahGyjH0kvwMypvQ/TqXyrIjG51GrOVORmSP++IgXSjiKq5InYj1k4VOkc+cOur +HMc8wmCN3PErg1MEYzs47I9WmeO/ymqxharCGXUjePiOAf9l42a4cLjchtOj4jd9 ++Fda9Dkjqd4nysbbNbiFxuJDENmSqSokEzqOSUbTBwTHn5hsFfjymReoi49Z5h91 +NE0JkUKcNNhLNyuSJYb4RqxTQLbhQz9thLLNPlk7F8xQcSbGD1vQvVraSWjyeD3h +hlUDaWlZeTSVW3WJCFoEEQEKAEQWIQSg2B0j/3rzDfRnID6FCCUvmzAVNgUCWNQy +tyYaaHR0cHM6Ly9rZXliYXNlLnB1Yi9oNS9wZ3AvcG9saWN5LnR4dAAKCRCFCCUv +mzAVNme2P/4kal/hL+X4yL3J6/kP5Y6XHWJlqacLzlv7zCqYMhBflN7ciTTdLEDk +yO94AKBYyu33UwyutF5Aw9Q2sEWARfGbBu+qKmtesPRxorMxiA14EW7xp4PIokEm +vYbOukatZEWqGunNo10hkroZ8uQb2LRK4ip8lDE3FyFP5geqY42CVyd/A6puw/ZQ +8qIl2KZpAL9CjHybJmmz/5oNXZfrRyR4Vg5CRbe7o9gMsbRsU0VSzqjTeOzU7ttW +mIrD0EvNG2RwmF+fOE1+VbAJFeiNuKQOb5WJ75XinUp5hWf4FMjvLhF3XLTLLbig +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 +b2qiGKRSpSG6rD25eeNZoY07Ltsq4HwJUQQCHq/ZunNHbYyCZ6p1wcjYb9dV3Yh9 +6yFEQiXCpGSAYDHKLLp92zCvYR2EPgNnby21iBuFuu8Q7n2Kc5kcfKS3qX0GuhR4 +A/+WtQCfd30K5JHdIGg2zbdB/w70Gai2sWmRyrQlTuyWcD78cOLbUo6ujFvL+/CN +Q/Yv1gud671HhU4goZu8bQjM169PIOdV7v7d6tKDrWh4Qh2BjokCOwQTAQIAJQUC +SpRbOQIbAwUJB4TOAAYLCQgHAwIEFQIIAwMWAgECHgECF4AACgkQu1cuDi0YKRAW +rxAAjej44THZ94L/RHurNd7oA2QER1cMYgUtiCBWq049Lb8LV9hh5nvLtAIEPLtY +YRiKfyb51IvC8pU058cqFnk0u5FOy8L9PKV9LiOjKxn025UUKClmUChnE2d290I9 +pfRF1ByANGQY/0Tz2qquCUAI4kNzYNoQoraVDbjAr3DCbSUoAc2zd3mrP1NDY+ik +Ef////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +//////////////////////////////////////////////+JAlIEEwECADwCGwMG +CwkIBwMCBBUCCAMDFgIBAh4BAheAFiEEE+u9vt56Endd/bG6u1cuDi0YKRAFAlmc +Sd8FCRLKVacACgkQu1cuDi0YKRARrw/9EX4Gc/Xzm0sWACVhJtRxYyCra9o4Q/Zt +GJZWIb+iYVNtUZ5ahG+Q0R5KgAgPDhg0xOOB66CRm+gjlOqpMlrZ5Gf6oDxUP4tZ +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 +vrunAxffXYAF2lY= +=Why+ +-----END PGP PUBLIC KEY BLOCK----- +EOF cd /mnt/gentoo # Download the current-stage3-amd64-nomultilib and the portage tarballs, unpack them, and then delete the archive files. -echo 'Downloading Tarballs' -tarball=$(wget -q https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/ -O - | grep -E -o -e "stage3-amd64-nomultilib-[0-9]{8}T[0-9]{6}Z.tar.xz" | uniq) -wget --tries=5 -q https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/$tarball || exit 1 -wget --tries=5 -q https://mirrors.kernel.org/gentoo/snapshots/portage-latest.tar.bz2 || exit 1 +echo 'Downloading Image Overlay' +# host="https://gentoo.osuosl.org" +host="https://mirrors.kernel.org/gentoo" +# host="https://mirror.yandex.ru/gentoo-distfiles/" +tarball=$(wget -q $host/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/ -O - | grep -E -o -e "stage3-amd64-nomultilib-[0-9]{8}T[0-9]{6}Z.tar.xz" | uniq) +wget --tries=5 --progress=dot:binary $host/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/$tarball || exit 1 +wget --tries=5 -q $host/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/$tarball.DIGESTS.asc || exit 1 -# An alternate download location for when the kernel.org mirror isn't sync'ed properly. -#tarball=$(wget -q https://gentoo.osuosl.org/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/ -O - | grep -E -o -e "stage3-amd64-nomultilib-[0-9]{8}T[0-9]{6}Z.tar.xz" | uniq) -#wget --tries=5 -q https://gentoo.osuosl.org/releases/amd64/autobuilds/current-stage3-amd64-nomultilib/$tarball || exit 1 -#wget --tries=5 -q https://gentoo.osuosl.org/snapshots/portage-latest.tar.bz2 || exit 1 +echo 'Downloading Portage' +wget --tries=5 --progress=dot:binary $host/snapshots/portage-latest.tar.bz2 || exit 1 +wget --tries=5 -q $host/snapshots/portage-latest.tar.bz2.gpgsig || exit 1 + +echo 'Signature Verification' +gpg --verify $tarball.DIGESTS.asc || (echo 'Tarball Verification Failed.'; sleep 3600; exit 1) +gpg --verify portage-latest.tar.bz2.gpgsig portage-latest.tar.bz2 || (echo 'Portage Verification Failed'; sleep 3600; exit 1) +(grep --after-context=1 SHA512 $tarball.DIGESTS.asc | grep -vE "CONTENTS|^#|^\-\-$" | sha512sum --check) || (echo 'Tarball Hash Check Failed'; sleep 3600; exit 1) echo 'Extracting Gentoo Tarball' -tar xJpf $tarball && rm -f $tarball +tar xJpf $tarball && rm -f $tarball $tarball.DIGESTS.asc echo 'Extracting Portage Tarball' -tar xjpf portage-latest.tar.bz2 -C '/mnt/gentoo/usr' && rm -f portage-latest.tar.bz2 +tar xjpf portage-latest.tar.bz2 -C '/mnt/gentoo/usr' && rm -f portage-latest.tar.bz2 portage-latest.tar.bz2.gpgsig # Copy the resolv config and rebind the dynamic system directories. mount -t proc /proc /mnt/gentoo/proc @@ -53,6 +1151,9 @@ cp /etc/resolv.conf /mnt/gentoo/etc # Execute the chroot script. chroot /mnt/gentoo /bin/bash < /root/magma.gentoo.vagrant.chroot.sh +# If the chroot starts failing, use this command instead to see where it is failing. +# (chroot /mnt/gentoo /bin/bash -ex < /root/magma.gentoo.vagrant.chroot.sh) || exit 1 + # And then reboot. echo "Chroot finished, ready to restart." reboot diff --git a/http/magma.openbsd6.install.cfg b/http/magma.openbsd6.install.cfg index fe0d32821..0daa7009d 100644 --- a/http/magma.openbsd6.install.cfg +++ b/http/magma.openbsd6.install.cfg @@ -5,7 +5,7 @@ Setup a user = vagrant Password for user vagrant = vagrant Location of sets = https HTTP Server = ftp.usa.openbsd.org -Server directory = pub/OpenBSD/6.4/amd64/ +Server directory = pub/OpenBSD/6.5/amd64/ Set name(s) = -game* Set name(s) = -x* What timezone are you in = US/Pacific diff --git a/lineage-hyperv.json b/lineage-hyperv.json index 39d726ebb..978e5475b 100644 --- a/lineage-hyperv.json +++ b/lineage-hyperv.json @@ -105,11 +105,11 @@ "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/lineage.ubuntu1604.vagrant.cfg --- " ], "disk_size": 98304, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -151,11 +151,11 @@ "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/lineage.ubuntu1604.vagrant.cfg --- " ], "disk_size": 98304, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", diff --git a/lineage-libvirt.json b/lineage-libvirt.json index 86edca472..d285fe9c9 100644 --- a/lineage-libvirt.json +++ b/lineage-libvirt.json @@ -124,8 +124,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -177,8 +177,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", diff --git a/lineage-virtualbox.json b/lineage-virtualbox.json index 8170af023..f74709b6d 100644 --- a/lineage-virtualbox.json +++ b/lineage-virtualbox.json @@ -122,16 +122,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -177,16 +177,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" } diff --git a/lineage-vmware.json b/lineage-vmware.json index d21c376a6..823ce631a 100644 --- a/lineage-vmware.json +++ b/lineage-vmware.json @@ -124,8 +124,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -178,8 +178,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", diff --git a/magma-hyperv.json b/magma-hyperv.json index 752bcf5eb..e7b9a2b3a 100644 --- a/magma-hyperv.json +++ b/magma-hyperv.json @@ -465,8 +465,8 @@ " text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/magma.centos6.vagrant.ks" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", "iso_url": "https://mirrors.edge.kernel.org/centos/6.10/isos/x86_64/CentOS-6.10-x86_64-minimal.iso", "iso_checksum": "7c0dee2a0494dabd84809b72ddb4b761f9ef92b78a506aef709b531c54d30770", @@ -498,8 +498,8 @@ "text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/magma.centos7.vagrant.ks" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", "iso_url": "https://mirrors.edge.kernel.org/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso", "iso_checksum": "38d5d51d9d100fd73df031ffd6bd8b1297ce24660dc8c13a3b8b4534a4bd291c", @@ -541,11 +541,11 @@ "chroot /mnt rc-update add hv_kvp_daemon default && chroot /mnt rc-update add hv_vss_daemon default && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.3-x86_64.iso", - "iso_checksum": "9129a3982364254cf9dd563d75a6a4a396a8aa941671a51de4667de8423ffb37", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.5-x86_64.iso", + "iso_checksum": "b5936e27487e605ea3cbf040d444505ea7fd735021258d7b119faaa9b4b5b083", "iso_checksum_type": "sha256", "communicator": "ssh", "ssh_username": "root", @@ -576,11 +576,11 @@ "bash magma.arch.vagrant.sh < magma.arch.vagrant.chroot.sh && systemctl reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", - "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.02.01-x86_64.iso", - "iso_checksum": "ded3152b5b369a7a1697f1081147bfb27c0245de685e55a5b033f6620833809b", + "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.07.01-x86_64.iso", + "iso_checksum": "4ab6a48f6baf63524733d851f63f78944fff6448aa3d2e780316eb2263212e1f", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -612,10 +612,10 @@ "" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", - "iso_url": "https://mirrors.kernel.org/fedora/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", + "iso_url": "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", "iso_checksum": "2b93836c38833b26891345388ff5ddea60529b27a616b4539d432a3520d1c90b", "iso_checksum_type": "sha256", "ssh_username": "root", @@ -647,11 +647,11 @@ "" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", - "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.0/amd64/iso-cd/debian-8.11.0-amd64-netinst.iso", - "iso_checksum": "ea799ed959d77359783e7922ed4c94a7437b083a4ce6f09e9fe41a7af6ba60df", + "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.1/amd64/iso-cd/debian-8.11.1-amd64-netinst.iso", + "iso_checksum": "ea444d6f8ac95fd51d2aedb8015c57410d1ad19b494cedec6914c17fda02733c", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -693,11 +693,11 @@ "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/magma.ubuntu1604.vagrant.cfg --- " ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -731,8 +731,8 @@ "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/magma.ubuntu1610.vagrant.cfg --- " ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", "iso_url": "http://old-releases.ubuntu.com/releases/16.10/ubuntu-16.10-server-amd64.iso", "iso_checksum": "72b0d421da77f1e0c549b4efe6fc6c184e9909d6792f0d1e59b56d63e9705659", @@ -769,8 +769,8 @@ "ipv6.disable_ipv6=1 net.ifnames=0 biosdevname=0 preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/magma.ubuntu1704.vagrant.cfg --- " ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", "iso_url": "http://old-releases.ubuntu.com/releases/17.04/ubuntu-17.04-server-amd64.iso", "iso_checksum": "ca5d9a8438e2434b9a3ac2be67b5c5fa2c1f8e3e40b954519462935195464034", @@ -808,11 +808,11 @@ "bash magma.gentoo.vagrant.sh" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", - "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190219T214502Z.iso", - "iso_checksum": "a47f26868a8613eab634c7d1a13a10587d7018489680627aa25c26e3ebb92823", + "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190721T214502Z.iso", + "iso_checksum": "92ea51f200ea25efc268bb593ff4dca9cc77f69632e82b4a69e366905493d9cc", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -854,11 +854,11 @@ "bsdinstall script /tmp/installerconfig && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", - "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-amd64-disc1.iso", - "iso_checksum": "710d237907f1753dbfbecb1186e401d9635156eeef6914f24f632f3219e59d3b", + "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.3/FreeBSD-11.3-RELEASE-amd64-disc1.iso", + "iso_checksum": "d268db365e26305ec3d51b29211caad903749c33a4a8f2cf661d671f8e0ba0b0", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -890,11 +890,11 @@ "/install -a -f /install.conf && chroot /mnt < /install-chroot.sh && reboot" ], "disk_size": 32768, - "ram_size": 1024, - "cpu": 4, + "memory": 1024, + "cpus": 4, "http_directory": "http", - "iso_url": "https://ftp.usa.openbsd.org/pub/OpenBSD/6.4/amd64/cd64.iso", - "iso_checksum": "1a280cd45ea5fe8d818b61f9d8702c58d5edeff9aee1575f7445b505f45a8c77", + "iso_url": "https://ftp.openbsd.org/pub/OpenBSD/6.5/amd64/cd65.iso", + "iso_checksum": "c0ed31c5f50de4cc80bed01e6080beab96df4ee50a5ad14be88faf40a20c43ed", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", diff --git a/magma-libvirt.json b/magma-libvirt.json index e0f8a28d6..496bc1e06 100644 --- a/magma-libvirt.json +++ b/magma-libvirt.json @@ -490,8 +490,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.3-x86_64.iso", - "iso_checksum": "9129a3982364254cf9dd563d75a6a4a396a8aa941671a51de4667de8423ffb37", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.5-x86_64.iso", + "iso_checksum": "b5936e27487e605ea3cbf040d444505ea7fd735021258d7b119faaa9b4b5b083", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -603,8 +603,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.02.01-x86_64.iso", - "iso_checksum": "ded3152b5b369a7a1697f1081147bfb27c0245de685e55a5b033f6620833809b", + "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.07.01-x86_64.iso", + "iso_checksum": "4ab6a48f6baf63524733d851f63f78944fff6448aa3d2e780316eb2263212e1f", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -644,7 +644,7 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://mirrors.kernel.org/fedora/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", + "iso_url": "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", "iso_checksum": "2b93836c38833b26891345388ff5ddea60529b27a616b4539d432a3520d1c90b", "iso_checksum_type": "sha256", "ssh_username": "root", @@ -684,8 +684,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.0/amd64/iso-cd/debian-8.11.0-amd64-netinst.iso", - "iso_checksum": "ea799ed959d77359783e7922ed4c94a7437b083a4ce6f09e9fe41a7af6ba60df", + "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.1/amd64/iso-cd/debian-8.11.1-amd64-netinst.iso", + "iso_checksum": "ea444d6f8ac95fd51d2aedb8015c57410d1ad19b494cedec6914c17fda02733c", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -737,8 +737,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -871,8 +871,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190219T214502Z.iso", - "iso_checksum": "a47f26868a8613eab634c7d1a13a10587d7018489680627aa25c26e3ebb92823", + "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190721T214502Z.iso", + "iso_checksum": "92ea51f200ea25efc268bb593ff4dca9cc77f69632e82b4a69e366905493d9cc", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -922,8 +922,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-amd64-disc1.iso", - "iso_checksum": "710d237907f1753dbfbecb1186e401d9635156eeef6914f24f632f3219e59d3b", + "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.3/FreeBSD-11.3-RELEASE-amd64-disc1.iso", + "iso_checksum": "d268db365e26305ec3d51b29211caad903749c33a4a8f2cf661d671f8e0ba0b0", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -963,8 +963,8 @@ ], "http_directory": "http", "headless": true, - "iso_url": "https://ftp.usa.openbsd.org/pub/OpenBSD/6.4/amd64/cd64.iso", - "iso_checksum": "1a280cd45ea5fe8d818b61f9d8702c58d5edeff9aee1575f7445b505f45a8c77", + "iso_url": "https://ftp.openbsd.org/pub/OpenBSD/6.5/amd64/cd65.iso", + "iso_checksum": "c0ed31c5f50de4cc80bed01e6080beab96df4ee50a5ad14be88faf40a20c43ed", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", diff --git a/magma-virtualbox.json b/magma-virtualbox.json index b73122c51..d49ae8085 100644 --- a/magma-virtualbox.json +++ b/magma-virtualbox.json @@ -488,16 +488,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.3-x86_64.iso", - "iso_checksum": "9129a3982364254cf9dd563d75a6a4a396a8aa941671a51de4667de8423ffb37", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.5-x86_64.iso", + "iso_checksum": "b5936e27487e605ea3cbf040d444505ea7fd735021258d7b119faaa9b4b5b083", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "/sbin/poweroff", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -535,8 +535,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -574,8 +574,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -607,16 +607,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.02.01-x86_64.iso", - "iso_checksum": "ded3152b5b369a7a1697f1081147bfb27c0245de685e55a5b033f6620833809b", + "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.07.01-x86_64.iso", + "iso_checksum": "4ab6a48f6baf63524733d851f63f78944fff6448aa3d2e780316eb2263212e1f", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "7200s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -650,7 +650,7 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://mirrors.kernel.org/fedora/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", + "iso_url": "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", "iso_checksum": "2b93836c38833b26891345388ff5ddea60529b27a616b4539d432a3520d1c90b", "iso_checksum_type": "sha256", "ssh_username": "root", @@ -692,16 +692,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.0/amd64/iso-cd/debian-8.11.0-amd64-netinst.iso", - "iso_checksum": "ea799ed959d77359783e7922ed4c94a7437b083a4ce6f09e9fe41a7af6ba60df", + "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.1/amd64/iso-cd/debian-8.11.1-amd64-netinst.iso", + "iso_checksum": "ea444d6f8ac95fd51d2aedb8015c57410d1ad19b494cedec6914c17fda02733c", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -747,16 +747,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -802,8 +802,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -849,8 +849,8 @@ "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -887,16 +887,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190219T214502Z.iso", - "iso_checksum": "a47f26868a8613eab634c7d1a13a10587d7018489680627aa25c26e3ebb92823", + "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190721T214502Z.iso", + "iso_checksum": "92ea51f200ea25efc268bb593ff4dca9cc77f69632e82b4a69e366905493d9cc", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "7200s", "shutdown_command": "shutdown -hP now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -940,16 +940,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-amd64-disc1.iso", - "iso_checksum": "710d237907f1753dbfbecb1186e401d9635156eeef6914f24f632f3219e59d3b", + "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.3/FreeBSD-11.3-RELEASE-amd64-disc1.iso", + "iso_checksum": "d268db365e26305ec3d51b29211caad903749c33a4a8f2cf661d671f8e0ba0b0", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "shutdown -p now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" }, @@ -983,16 +983,16 @@ "vrdp_bind_address": "127.0.0.1", "vrdp_port_min": 11000, "vrdp_port_max": 12000, - "iso_url": "https://ftp.usa.openbsd.org/pub/OpenBSD/6.4/amd64/cd64.iso", - "iso_checksum": "1a280cd45ea5fe8d818b61f9d8702c58d5edeff9aee1575f7445b505f45a8c77", + "iso_url": "https://ftp.openbsd.org/pub/OpenBSD/6.5/amd64/cd65.iso", + "iso_checksum": "c0ed31c5f50de4cc80bed01e6080beab96df4ee50a5ad14be88faf40a20c43ed", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "3600s", "shutdown_command": "shutdown -h -p now", - "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.1.38/VBoxGuestAdditions_5.1.38.iso", - "guest_additions_sha256": "0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a", + "guest_additions_url": "http://download.virtualbox.org/virtualbox/5.2.30/VBoxGuestAdditions_5.2.30.iso", + "guest_additions_sha256": "dd07da975f346608b0f6843f4be4bfdf48b4610ef49a0c0e6aa689ef81c1bd69", "guest_additions_path": "VBoxGuestAdditions.iso", "virtualbox_version_file": "VBoxVersion.txt" } diff --git a/magma-vmware.json b/magma-vmware.json index 630fdbf4b..17680adc5 100644 --- a/magma-vmware.json +++ b/magma-vmware.json @@ -489,8 +489,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.3-x86_64.iso", - "iso_checksum": "9129a3982364254cf9dd563d75a6a4a396a8aa941671a51de4667de8423ffb37", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.5-x86_64.iso", + "iso_checksum": "b5936e27487e605ea3cbf040d444505ea7fd735021258d7b119faaa9b4b5b083", "iso_checksum_type": "sha256", "skip_compaction": false, "ssh_username": "root", @@ -606,8 +606,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.02.01-x86_64.iso", - "iso_checksum": "ded3152b5b369a7a1697f1081147bfb27c0245de685e55a5b033f6620833809b", + "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.07.01-x86_64.iso", + "iso_checksum": "4ab6a48f6baf63524733d851f63f78944fff6448aa3d2e780316eb2263212e1f", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -648,7 +648,7 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://mirrors.kernel.org/fedora/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", + "iso_url": "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", "iso_checksum": "2b93836c38833b26891345388ff5ddea60529b27a616b4539d432a3520d1c90b", "iso_checksum_type": "sha256", "ssh_username": "root", @@ -689,8 +689,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.0/amd64/iso-cd/debian-8.11.0-amd64-netinst.iso", - "iso_checksum": "ea799ed959d77359783e7922ed4c94a7437b083a4ce6f09e9fe41a7af6ba60df", + "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.1/amd64/iso-cd/debian-8.11.1-amd64-netinst.iso", + "iso_checksum": "ea444d6f8ac95fd51d2aedb8015c57410d1ad19b494cedec6914c17fda02733c", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -743,8 +743,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -883,8 +883,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190219T214502Z.iso", - "iso_checksum": "a47f26868a8613eab634c7d1a13a10587d7018489680627aa25c26e3ebb92823", + "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190721T214502Z.iso", + "iso_checksum": "92ea51f200ea25efc268bb593ff4dca9cc77f69632e82b4a69e366905493d9cc", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -935,8 +935,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-amd64-disc1.iso", - "iso_checksum": "710d237907f1753dbfbecb1186e401d9635156eeef6914f24f632f3219e59d3b", + "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.3/FreeBSD-11.3-RELEASE-amd64-disc1.iso", + "iso_checksum": "d268db365e26305ec3d51b29211caad903749c33a4a8f2cf661d671f8e0ba0b0", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -977,8 +977,8 @@ "vnc_disable_password": true, "vnc_bind_address": "127.0.0.1", "vmx_remove_ethernet_interfaces": true, - "iso_url": "https://ftp.usa.openbsd.org/pub/OpenBSD/6.4/amd64/cd64.iso", - "iso_checksum": "1a280cd45ea5fe8d818b61f9d8702c58d5edeff9aee1575f7445b505f45a8c77", + "iso_url": "https://ftp.openbsd.org/pub/OpenBSD/6.5/amd64/cd65.iso", + "iso_checksum": "c0ed31c5f50de4cc80bed01e6080beab96df4ee50a5ad14be88faf40a20c43ed", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", diff --git a/packer-cache.json b/packer-cache.json index 4f4e2a92b..9ae2c9cc4 100644 --- a/packer-cache.json +++ b/packer-cache.json @@ -55,8 +55,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.3-x86_64.iso", - "iso_checksum": "9129a3982364254cf9dd563d75a6a4a396a8aa941671a51de4667de8423ffb37", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.6/releases/x86_64/alpine-virt-3.6.5-x86_64.iso", + "iso_checksum": "b5936e27487e605ea3cbf040d444505ea7fd735021258d7b119faaa9b4b5b083", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -71,8 +71,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.7/releases/x86_64/alpine-virt-3.7.1-x86_64.iso", - "iso_checksum": "69e30614159cc93b7327059b56a542faca8a2fd6f4a5ace33a2e5130c5c02e7f", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.7/releases/x86_64/alpine-virt-3.7.3-x86_64.iso", + "iso_checksum": "2f7a23fc31a6f67348e5614597b23ab8d9340e8a0f4368e96797b1a6c65fa6b8", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -87,8 +87,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.2-x86_64.iso", - "iso_checksum": "77a609dd710ba0d3b0806a314f5c4ef1718ce140b522bf7c7ca081eba664db2c", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.4-x86_64.iso", + "iso_checksum": "20d20e0658b6cc361832cfb49367f0a4c33570ef1521f2e394e9164d2a9bd9df", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -167,8 +167,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://archive.org/download/rhel-8.0-beta-1-x86_64-dvd/rhel-8.0-beta-1-x86_64-dvd.iso", - "iso_checksum": "06bec9e7de3ebfcdb879804be8c452b69ba3e046daedac3731e1ccd169cfd316", + "iso_url": "https://archive.org/download/rhel-8.0-x86_64-dvd/rhel-8.0-x86_64-dvd.iso", + "iso_checksum": "005d4f88fff6d63b0fc01a10822380ef52570edd8834321de7be63002cc6cc43", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -183,8 +183,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.02.01-x86_64.iso", - "iso_checksum": "ded3152b5b369a7a1697f1081147bfb27c0245de685e55a5b033f6620833809b", + "iso_url": "https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-2019.07.01-x86_64.iso", + "iso_checksum": "4ab6a48f6baf63524733d851f63f78944fff6448aa3d2e780316eb2263212e1f", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -231,7 +231,7 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://mirrors.kernel.org/fedora/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", + "iso_url": "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/27/Server/x86_64/iso/Fedora-Server-netinst-x86_64-27-1.6.iso", "iso_checksum": "2b93836c38833b26891345388ff5ddea60529b27a616b4539d432a3520d1c90b", "iso_checksum_type": "sha256", "ssh_username": "root", @@ -279,8 +279,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.0/amd64/iso-cd/debian-8.11.0-amd64-netinst.iso", - "iso_checksum": "ea799ed959d77359783e7922ed4c94a7437b083a4ce6f09e9fe41a7af6ba60df", + "iso_url": "https://gensho.ftp.acc.umu.se/mirror/cdimage/archive/8.11.1/amd64/iso-cd/debian-8.11.1-amd64-netinst.iso", + "iso_checksum": "ea444d6f8ac95fd51d2aedb8015c57410d1ad19b494cedec6914c17fda02733c", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -313,8 +313,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://mirrors.kernel.org/debian-cd/9.8.0/amd64/iso-cd/debian-9.8.0-amd64-netinst.iso", - "iso_checksum": "73bd56fb4548efa384bf32fd25808b99198f81c23cf19ab9e6507d898cd58dce", + "iso_url": "https://ftp.acc.umu.se/mirror/cdimage/archive/9.9.0/amd64/iso-cd/debian-9.9.0-amd64-netinst.iso", + "iso_checksum": "d4a22c81c76a66558fb92e690ef70a5d67c685a08216701b15746586520f6e8e", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -329,8 +329,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.5/ubuntu-16.04.5-server-amd64.iso", - "iso_checksum": "c94de1cc2e10160f325eb54638a5b5aa38f181d60ee33dae9578d96d932ee5f8", + "iso_url": "https://mirrors.kernel.org/ubuntu-releases/16.04.6/ubuntu-16.04.6-server-amd64.iso", + "iso_checksum": "16afb1375372c57471ea5e29803a89a5a6bd1f6aabea2e5e34ac1ab7eb9786ac", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -425,8 +425,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190219T214502Z.iso", - "iso_checksum": "a47f26868a8613eab634c7d1a13a10587d7018489680627aa25c26e3ebb92823", + "iso_url": "https://mirrors.kernel.org/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20190721T214502Z.iso", + "iso_checksum": "92ea51f200ea25efc268bb593ff4dca9cc77f69632e82b4a69e366905493d9cc", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -441,8 +441,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-amd64-disc1.iso", - "iso_checksum": "710d237907f1753dbfbecb1186e401d9635156eeef6914f24f632f3219e59d3b", + "iso_url": "https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.3/FreeBSD-11.3-RELEASE-amd64-disc1.iso", + "iso_checksum": "d268db365e26305ec3d51b29211caad903749c33a4a8f2cf661d671f8e0ba0b0", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -489,8 +489,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.4.1_REL.iso", - "iso_checksum": "bd7b5421cc205b4c25ea9ac9e5a53fe6c04fcb133311966796f7f3ce4941ccb8", + "iso_url": "https://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.6.1_REL.iso", + "iso_checksum": "45b43aa56c19d07327e2944fe7fa82c46da0bac4b8046a82bdc1ab3080f95274", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -521,8 +521,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://installer.hardenedbsd.org/hardened_12_stable_master-LAST/HardenedBSD-12-STABLE-v1200058.3-amd64-disc1.iso", - "iso_checksum": "246ab0182b634b3f5d3a3b4ba40e0c66b6210bb288a745e519f085d00a6bab60", + "iso_url": "https://installer.hardenedbsd.org/hardened_12_stable_master-LAST/HardenedBSD-12-STABLE-v1200059.1-amd64-disc1.iso", + "iso_checksum": "b2bc9a0c5067100d9592dc228ed76a652464730b6bb673c88de2eab145ed172b", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -537,8 +537,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.9/releases/x86_64/alpine-virt-3.9.0-x86_64.iso", - "iso_checksum": "e87e0256d10ca2125455fb5023687b2346740a8cbae54972312fe1626f07494c", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.9/releases/x86_64/alpine-virt-3.9.4-x86_64.iso", + "iso_checksum": "4122dce1092564aa88415c21702d6cb973a7d29f91658d24316f7f0aac3a6761", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -553,8 +553,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/debian-testing-amd64-netinst.iso", - "iso_checksum_url": "https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/SHA256SUMS", + "iso_url": "https://gensho.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-10.0.0-amd64-netinst.iso", + "iso_checksum": "3dbb597b7f11dbda71cda08d4c1339c1eb565e784c75409987fa2b91182d9240", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -569,8 +569,72 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "http://cdimage.ubuntu.com/ubuntu-server/daily/current/disco-server-amd64.iso", - "iso_checksum_url": "http://cdimage.ubuntu.com/ubuntu-server/daily/pending/SHA256SUMS", + "iso_url": "http://cdimage.ubuntu.com/ubuntu/releases/19.04/release/ubuntu-19.04-server-amd64.iso", + "iso_checksum": "7e8a0d07522f591dfee9bc9fcd7c05466763161e6cb0117906655bce1750b2fa", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "10s", + "shutdown_command": "poweroff" + }, + { + "type": "vmware-iso", + "name": "fedora30", + "output_directory": "output/fedora30", + "headless": true, + "disk_size": 1, + "boot_wait": "5s", + "iso_url": "https://dl.fedoraproject.org/pub/fedora/linux/releases/30/Server/x86_64/iso/Fedora-Server-netinst-x86_64-30-1.2.iso", + "iso_checksum": "5e4eac4566d8c572bfb3bcf54b7d6c82006ec3c6c882a2c9235c6d3494d7b100", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "10s", + "shutdown_command": "poweroff" + }, + { + "type": "vmware-iso", + "name": "oracle8", + "output_directory": "output/oracle8", + "headless": true, + "disk_size": 1, + "boot_wait": "5s", + "iso_url": "https://download.oracle.com/otn-pub/otn_software/linux/OracleLinux-R8-U0-BETA-x86_64-dvd.iso", + "iso_checksum": "3872f95ad0b119839f01aa665d2342701fff66fefdac040b039fcb61c65b2c44", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "10s", + "shutdown_command": "poweroff" + }, + { + "type": "vmware-iso", + "name": "alpine310", + "output_directory": "output/alpine310", + "headless": true, + "disk_size": 1, + "boot_wait": "5s", + "iso_url": "https://dl-4.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-virt-3.10.1-x86_64.iso", + "iso_checksum": "b5cce7d94652e547f07b7dc9e55b1f0b258180b474408e543241be12e0ae255d", + "iso_checksum_type": "sha256", + "ssh_username": "root", + "ssh_password": "vagrant", + "ssh_port": 22, + "ssh_wait_timeout": "10s", + "shutdown_command": "poweroff" + }, + { + "type": "vmware-iso", + "name": "opensuse15", + "output_directory": "output/opensuse15", + "headless": true, + "disk_size": 1, + "boot_wait": "5s", + "iso_url": "https://mirrors.edge.kernel.org/opensuse/distribution/leap/15.1/iso/openSUSE-Leap-15.1-NET-x86_64.iso", + "iso_checksum": "609d0ad527ab13681b44e28326cd7941e87adfe8d522e2b31d0d7c71e9d92992", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", @@ -585,8 +649,8 @@ "headless": true, "disk_size": 1, "boot_wait": "5s", - "iso_url": "https://ftp.usa.openbsd.org/pub/OpenBSD/6.4/amd64/cd64.iso", - "iso_checksum": "1a280cd45ea5fe8d818b61f9d8702c58d5edeff9aee1575f7445b505f45a8c77", + "iso_url": "https://ftp.openbsd.org/pub/OpenBSD/6.5/amd64/cd65.iso", + "iso_checksum": "c0ed31c5f50de4cc80bed01e6080beab96df4ee50a5ad14be88faf40a20c43ed", "iso_checksum_type": "sha256", "ssh_username": "root", "ssh_password": "vagrant", diff --git a/res/providers/packer.sh b/res/providers/packer.sh index c758c9648..fcc335fc4 100755 --- a/res/providers/packer.sh +++ b/res/providers/packer.sh @@ -28,7 +28,7 @@ go get github.com/hashicorp/packer && cd $GOPATH/src/github.com/hashicorp/packer # To build a specific version, or branch uncomment as needed. # git checkout v1.3.4 -# git checkout gogetter +git checkout except_post_processor_tests # Customize # sed -i -e "s/common.Retry(10, 10, 3/common.Retry(10, 10, 20/g" post-processor/vagrant-cloud/step_upload.go diff --git a/res/providers/providers.sh b/res/providers/providers.sh index fa386a018..43a39250f 100755 --- a/res/providers/providers.sh +++ b/res/providers/providers.sh @@ -232,47 +232,18 @@ function provide-vagrant() { } function provide-packer() { - # Install Golang Compiler - yum --assumeyes install golang - # Setup the Go Path - export GOPATH=$HOME/go/ + # Attempt to find out the latest Packer version automatically. + export PACKER_VERSION=`curl --silent https://www.packer.io/ | grep button | grep Download | sed -e "s/.*Download \([0-9]*\.[0-9]*\.[0-9]*\).*/\1/g"` - # Remove Previous Builds - rm --recursive --force $GOPATH + # Download Packer + curl --location --output "$BASE/packer_${PACKER_VERSION}_linux_amd64.zip" "https://releases.hashicorp.com/packer/${PACKER_VERSION}/packer_${PACKER_VERSION}_linux_amd64.zip" - # Fetch and Compile Gox - go get github.com/mitchellh/gox && cd $GOPATH/src/github.com/mitchellh/gox - go build -o bin/gox . - - # Fetch Packer - go get github.com/hashicorp/packer && cd $GOPATH/src/github.com/hashicorp/packer - - # Checkout the Proper Version - # if [ -z $PACKER_VERSION ]; then - # git checkout "$PACKER_VERSION" - # fi - - # Retry Upload Failures Twenty Times - # sed -i -e "s/common.Retry(10, 10, 3/common.Retry(10, 10, 20/g" post-processor/vagrant-cloud/step_upload.go - - # Increase the upload timeout. - # patch -p1 < $BASE/packer-upload-timeout.patch - - # Fix the Hyper-V boot dervice ordering for generation one virtual machines. - MERGED - # patch -p1 < $BASE/hyperv-boot-order.patch - - # Fox the Hyper-V SSH host value bug. - MERGED - # patch -p1 < $BASH/hyperv-ssh-host.patch - - # Force Hyper-V to use a legacy network adapter. - MERGED - # patch -p1 < $BASE/hyperv-legacy-network-adapter.patch - - # Build for Linux, Darwin, and Windows - XC_ARCH=amd64 XC_OS="linux darwin windows" scripts/build.sh + # Decompress + unzip "$BASE/packer_${PACKER_VERSION}_linux_amd64.zip" # Install - install pkg/linux_amd64/packer /usr/local/bin/ + install "$BASE/packer" /usr/local/bin/ chown root:root /usr/local/bin/packer chcon unconfined_u:object_r:bin_t:s0 /usr/local/bin/packer diff --git a/res/scripts/add.sh b/res/scripts/add.sh index 3b1ed189c..a259ca906 100755 --- a/res/scripts/add.sh +++ b/res/scripts/add.sh @@ -11,7 +11,7 @@ fi pushd `dirname $CMD` > /dev/null BASE=`pwd -P` popd > /dev/null -cd $BASE +cd $BASE/../../ if [ $# != 4 ]; then tput setaf 1; printf "\n $0 SOURCE TARGET ISO SHA\n\n Please specify the source, target, install media, and hash.\n\n"; tput sgr0 diff --git a/res/scripts/delete.sh b/res/scripts/delete.sh index ae483b850..f552c1a68 100755 --- a/res/scripts/delete.sh +++ b/res/scripts/delete.sh @@ -84,6 +84,6 @@ ${CURL} \ --retry-delay 60 \ --header "Authorization: Bearer $VAGRANT_CLOUD_TOKEN" \ --request DELETE \ - https://app.vagrantup.com/api/v1/box/$ORG/$NAME/version/$VERSION/provider/$PROVIDER + https://app.vagrantup.com/api/v1/box/$ORG/$NAME/version/$VERSION printf "\n\n" diff --git a/res/scripts/release.sh b/res/scripts/release.sh index e2f887021..09a382c24 100755 --- a/res/scripts/release.sh +++ b/res/scripts/release.sh @@ -136,7 +136,9 @@ retry() { local RESULT=0 while [[ "${COUNT}" -le 10 ]]; do [[ "${RESULT}" -ne 0 ]] && { - echo -e "\\n$(tput setaf 1)${*} failed... retrying ${COUNT} of 10.$(tput sgr0)\\n" >&2 + echo "" + echo -e "$(tput setaf 1)${*} failed... retrying ${COUNT} of 10.$(tput sgr0)" | tr -d \\n >&2 + echo "" } "${@}" && { RESULT=0 && break; } || RESULT="${?}" COUNT="$((COUNT + 1))" diff --git a/res/scripts/silent.sh b/res/scripts/silent.sh index cb9ec97f6..f93635ad8 100755 --- a/res/scripts/silent.sh +++ b/res/scripts/silent.sh @@ -136,7 +136,9 @@ retry() { local RESULT=0 while [[ "${COUNT}" -le 10 ]]; do [[ "${RESULT}" -ne 0 ]] && { - echo -e "\\n$(tput setaf 1)${*} failed... retrying ${COUNT} of 10.$(tput sgr0)\\n" >&2 + echo "" + echo -e "$(tput setaf 1)${*} failed... retrying ${COUNT} of 10.$(tput sgr0)" | tr -d \\n >&2 + echo "" } "${@}" && { RESULT=0 && break; } || RESULT="${?}" COUNT="$((COUNT + 1))" diff --git a/res/scripts/upload.sh b/res/scripts/upload.sh index cb50055de..ff6ee95f0 100755 --- a/res/scripts/upload.sh +++ b/res/scripts/upload.sh @@ -136,7 +136,9 @@ retry() { local RESULT=0 while [[ "${COUNT}" -le 10 ]]; do [[ "${RESULT}" -ne 0 ]] && { - echo -e "\\n$(tput setaf 1)${*} failed... retrying ${COUNT} of 10.$(tput sgr0)\\n" >&2 + echo "" + echo -e "$(tput setaf 1)${*} failed... retrying ${COUNT} of 10.$(tput sgr0)" | tr -d \\n >&2 + echo "" } "${@}" && { RESULT=0 && break; } || RESULT="${?}" COUNT="$((COUNT + 1))" diff --git a/robox.sh b/robox.sh index 5dfc45acb..000ba4dd0 100755 --- a/robox.sh +++ b/robox.sh @@ -6,8 +6,8 @@ # Description: Used to build various virtual machines using packer. # Version Information -export VERSION="1.9.2" -export AGENT="Vagrant/2.2.3 (+https://www.vagrantup.com; ruby2.4.4)" +export VERSION="1.9.20" +export AGENT="Vagrant/2.2.5 (+https://www.vagrantup.com; ruby2.4.6)" # Limit the number of cpus packer will use. export GOMAXPROCS="2" @@ -60,10 +60,10 @@ MEDIAFILES="res/media/rhel-server-6.10-x86_64-dvd.iso"\ "|res/media/rhel-8.0-beta-1-x86_64-dvd.iso" MEDIASUMS="1e15f9202d2cdd4b2bdf9d6503a8543347f0cb8cc06ba9a0dfd2df4fdef5c727"\ "|60a0be5aeed1f08f2bb7599a578c89ec134b4016cd62a8604b29f15d543a469c"\ -"|06bec9e7de3ebfcdb879804be8c452b69ba3e046daedac3731e1ccd169cfd316" +"|005d4f88fff6d63b0fc01a10822380ef52570edd8834321de7be63002cc6cc43" MEDIAURLS="https://archive.org/download/rhel-server-6.10-x86_64-dvd/rhel-server-6.10-x86_64-dvd.iso"\ "|https://archive.org/download/rhel-server-7.6-x86_64-dvd/rhel-server-7.6-x86_64-dvd.iso"\ -"|https://archive.org/download/rhel-8.0-beta-1-x86_64-dvd/rhel-8.0-beta-1-x86_64-dvd.iso" +"|https://archive.org/download/rhel-8.0-x86_64-dvd/rhel-8.0-x86_64-dvd.iso" # When validating ISO checksums skip these URLS. DYNAMICURLS="http://cdimage.ubuntu.com/ubuntu-server/daily/current/disco-server-amd64.iso|"\ @@ -129,13 +129,13 @@ retry() { curltry() { local COUNT=1 local RESULT=0 - while [[ "${COUNT}" -le 10 ]]; do + while [[ "${COUNT}" -le 100 ]]; do RESULT=0 ; OUTPUT=`"${@}"` || RESULT="${?}" if [[ $RESULT == 0 ]] || [[ `echo "$OUTPUT" | grep --count "404"` == 1 ]]; then break fi COUNT="$((COUNT + 1))" - DELAY="$((DELAY + 10))" + DELAY="$((DELAY + 1))" sleep $DELAY done echo "$OUTPUT" @@ -219,12 +219,12 @@ function isos { N=( "${N[@]}" "Arch" ); U=( "${U[@]}" "$URL" ) # Ubuntu Disco - URL="http://cdimage.ubuntu.com/ubuntu-server/daily/current/disco-server-amd64.iso" - N=( "${N[@]}" "Disco" ); U=( "${U[@]}" "$URL" ) + # URL="http://cdimage.ubuntu.com/ubuntu-server/daily/current/disco-server-amd64.iso" + # N=( "${N[@]}" "Disco" ); U=( "${U[@]}" "$URL" ) # Debian Buster - URL="https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/debian-testing-amd64-netinst.iso" - N=( "${N[@]}" "Buster" ); U=( "${U[@]}" "$URL" ) + # URL="https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/debian-testing-amd64-netinst.iso" + # N=( "${N[@]}" "Buster" ); U=( "${U[@]}" "$URL" ) export -f print_iso parallel -j 16 --xapply print_iso {1} {2} ::: "${N[@]}" ::: "${U[@]}" @@ -234,7 +234,7 @@ function isos { function cache { unset PACKER_LOG - packer build -on-error=cleanup -color=false -parallel=false packer-cache.json 2>&1 | tr -cs [:print:] [\\n*] | grep --line-buffered --color=none -E "Download progress|Downloading or copying|Found already downloaded|Transferred:|[0-9]*[[:space:]]*items:" + packer build -on-error=cleanup -color=false -parallel=false -except= packer-cache.json 2>&1 | tr -cs [:print:] [\\n*] | grep --line-buffered --color=none -E "Download progress|Downloading or copying|Found already downloaded|Transferred:|[0-9]*[[:space:]]*items:" if [[ $? != 0 ]]; then tput setaf 1; tput bold; printf "\n\nDistro disc image download aborted...\n\n"; tput sgr0 @@ -569,16 +569,14 @@ function available() { fi PROVIDER="hyperv" - if [[ "${BOX}" != "dragonflybsd5" ]] && [[ "${BOX}" != "netbsd8" ]]; then - curl --head --silent --location --user-agent "${AGENT}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box?access_token=${VAGRANT_CLOUD_TOKEN}" | head -1 | grep --silent --extended-regexp "HTTP/1\.1 200 OK|HTTP/2\.0 200 OK|HTTP/1\.1 302 Found|HTTP/2.0 302 Found" + curl --head --silent --location --user-agent "${AGENT}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box?access_token=${VAGRANT_CLOUD_TOKEN}" | head -1 | grep --silent --extended-regexp "HTTP/1\.1 200 OK|HTTP/2\.0 200 OK|HTTP/1\.1 302 Found|HTTP/2.0 302 Found" - if [ $? != 0 ]; then - let MISSING+=1 - printf "Box - "; tput setaf 1; printf "${LIST[$i]} ${PROVIDER}\n"; tput sgr0 - else - let FOUND+=1 - printf "Box + "; tput setaf 2; printf "${LIST[$i]} ${PROVIDER}\n"; tput sgr0 - fi + if [ $? != 0 ]; then + let MISSING+=1 + printf "Box - "; tput setaf 1; printf "${LIST[$i]} ${PROVIDER}\n"; tput sgr0 + else + let FOUND+=1 + printf "Box + "; tput setaf 2; printf "${LIST[$i]} ${PROVIDER}\n"; tput sgr0 fi PROVIDER="libvirt" @@ -659,9 +657,11 @@ function public() { PROVIDER="docker" if [[ "${ORGANIZATION}" =~ ^(generic|roboxes|lavabit)$ ]]; then if [[ "${BOX}" == "centos6" ]] || [[ "${BOX}" == "centos7" ]] || \ + [[ "${BOX}" == "oracle7" ]] || [[ "${BOX}" == "oracle8" ]] || \ + [[ "${BOX}" == "rhel6" ]] || [[ "${BOX}" == "rhel7" ]] || [[ "${BOX}" == "rhel8" ]] || \ [[ "${BOX}" == "magma" ]] || [[ "${BOX}" == "magma-centos" ]] || \ [[ "${BOX}" == "magma-centos6" ]] || [[ "${BOX}" == "magma-centos7" ]]; then - curltry curl --head --fail --silent --location --user-agent "${AGENT}" --output /dev/null --write-out "%{http_code}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box" | grep --silent "200" + curltry curl --head --fail --silent --location --user-agent "${AGENT}" --output /dev/null --write-out "%{http_code}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box" | grep --silent "200" if [ $? != 0 ]; then let MISSING+=1 @@ -674,20 +674,18 @@ function public() { fi PROVIDER="hyperv" - if [[ "${BOX}" != "dragonflybsd5" ]] && [[ "${BOX}" != "netbsd8" ]]; then - curltry curl --head --fail --silent --location --user-agent "${AGENT}" --output /dev/null --write-out "%{http_code}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box" | grep --silent "200" + curltry curl --head --fail --silent --location --user-agent "${AGENT}" --output /dev/null --write-out "%{http_code}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box" | grep --silent "200" - if [ $? != 0 ]; then - let MISSING+=1 - printf "Box - "; tput setaf 1; printf "${LIST[$i]} ${PROVIDER}\n"; tput sgr0 - else - let FOUND+=1 - printf "Box + "; tput setaf 2; printf "${LIST[$i]} ${PROVIDER}\n"; tput sgr0 - fi + if [ $? != 0 ]; then + let MISSING+=1 + printf "Box - "; tput setaf 1; printf "${LIST[$i]} ${PROVIDER}\n"; tput sgr0 + else + let FOUND+=1 + printf "Box + "; tput setaf 2; printf "${LIST[$i]} ${PROVIDER}\n"; tput sgr0 fi PROVIDER="libvirt" - curltry curl --head --fail --silent --location --user-agent "${AGENT}" --output /dev/null --write-out "%{http_code}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box" | grep --silent "200" + curltry curl --head --fail --silent --location --user-agent "${AGENT}" --output /dev/null --write-out "%{http_code}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box" | grep --silent "200" if [ $? != 0 ]; then let MISSING+=1 @@ -699,7 +697,7 @@ function public() { PROVIDER="parallels" if [[ "${ORGANIZATION}" =~ ^(generic|roboxes)$ ]]; then - curltry curl --head --fail --silent --location --user-agent "${AGENT}" --output /dev/null --write-out "%{http_code}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box" | grep --silent "200" + curltry curl --head --fail --silent --location --user-agent "${AGENT}" --output /dev/null --write-out "%{http_code}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box" | grep --silent "200" if [ $? != 0 ]; then let MISSING+=1 @@ -711,7 +709,7 @@ function public() { fi PROVIDER="virtualbox" - curltry curl --head --fail --silent --location --user-agent "${AGENT}" --output /dev/null --write-out "%{http_code}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box" | grep --silent "200" + curltry curl --head --fail --silent --location --user-agent "${AGENT}" --output /dev/null --write-out "%{http_code}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box" | grep --silent "200" if [ $? != 0 ]; then let MISSING+=1 @@ -722,7 +720,7 @@ function public() { fi PROVIDER="vmware_desktop" - curltry curl --head --fail --silent --location --user-agent "${AGENT}" --output /dev/null --write-out "%{http_code}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box" | grep --silent "200" + curltry curl --head --fail --silent --location --user-agent "${AGENT}" --output /dev/null --write-out "%{http_code}" "https://app.vagrantup.com/${ORGANIZATION}/boxes/${BOX}/versions/${VERSION}/providers/${PROVIDER}.box" | grep --silent "200" if [ $? != 0 ]; then let MISSING+=1 @@ -761,7 +759,7 @@ function localized() { # Former Logic # verify_local 1e15f9202d2cdd4b2bdf9d6503a8543347f0cb8cc06ba9a0dfd2df4fdef5c727 res/media/rhel-server-6.10-x86_64-dvd.iso https://archive.org/download/rhel-server-6.10-x86_64-dvd/rhel-server-6.10-x86_64-dvd.iso # verify_local 60a0be5aeed1f08f2bb7599a578c89ec134b4016cd62a8604b29f15d543a469c res/media/rhel-server-7.6-x86_64-dvd.iso https://archive.org/download/rhel-server-7.6-x86_64-dvd/rhel-server-7.6-x86_64-dvd.iso - # verify_local 06bec9e7de3ebfcdb879804be8c452b69ba3e046daedac3731e1ccd169cfd316 res/media/rhel-8.0-beta-1-x86_64-dvd.iso https://archive.org/download/rhel-8.0-beta-1-x86_64-dvd/rhel-8.0-beta-1-x86_64-dvd.iso + # verify_local 005d4f88fff6d63b0fc01a10822380ef52570edd8834321de7be63002cc6cc43 res/media/rhel-8.0-beta-1-x86_64-dvd.iso https://archive.org/download/rhel-8.0-x86_64-dvd/rhel-8.0-x86_64-dvd.iso } @@ -1004,7 +1002,6 @@ function all() { links validate - localized builder diff --git a/scripts/alpine310/apk.sh b/scripts/alpine310/apk.sh new file mode 100644 index 000000000..6108fa217 --- /dev/null +++ b/scripts/alpine310/apk.sh @@ -0,0 +1,50 @@ +#!/bin/sh -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# Configure the main repository mirrors. +printf "https://dl-4.alpinelinux.org/alpine/v3.10/main\n" > /etc/apk/repositories +printf "https://dl-4.alpinelinux.org/alpine/v3.10/community\n" >> /etc/apk/repositories + +# Update the package list and then upgrade. +retry apk update --no-cache +retry apk update upgrade + +# Install various basic system utilities. +retry apk add vim man man-pages bash gawk wget curl sudo lsof file grep readline mdocml sysstat lm_sensors findutils sysfsutils dmidecode libmagic sqlite-libs ca-certificates ncurses-libs ncurses-terminfo ncurses-terminfo-base psmisc + +# Setup vim as the default editor. +printf "alias vi=vim\n" >> /etc/profile.d/vim.sh + +# Make the shell bash, instead of ash. +sed -i -e "s/\/bin\/ash/\/bin\/bash/g" /etc/passwd + +# Run the updatedb script so the locate command works. +updatedb + +# Reboot onto the new kernel (if applicable). +reboot diff --git a/scripts/alpine310/cache.sh b/scripts/alpine310/cache.sh new file mode 100644 index 000000000..c0fc8a4cb --- /dev/null +++ b/scripts/alpine310/cache.sh @@ -0,0 +1,33 @@ +#!/bin/sh -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# Setup the apk cache. +retry setup-apkcache /var/cache/apk + +# Delete unnecessary packages, and download any missing packages. +retry apk cache -v sync diff --git a/scripts/alpine310/floppy.sh b/scripts/alpine310/floppy.sh new file mode 100644 index 000000000..2694ccef8 --- /dev/null +++ b/scripts/alpine310/floppy.sh @@ -0,0 +1,4 @@ +#!/bin/bash -eux + +printf 'blacklist floppy\n' > /etc/modprobe.d/floppy.conf +mkinitfs diff --git a/scripts/alpine310/gcc.sh b/scripts/alpine310/gcc.sh new file mode 100644 index 000000000..fed8e638c --- /dev/null +++ b/scripts/alpine310/gcc.sh @@ -0,0 +1,79 @@ +#!/bin/bash -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +VERSION="4.9.4" + +LIBITM=true +LIBGCC=true +LIBGOMP=true +LIBATOMIC=true + +LANG_CXX=true +LANG_OBJC=true +LANG_JAVA=true + +LANG_GO=false +LANG_FORTRAN=false +LANG_ADA=false + +export PATH=/usr/glibc-compat/bin:/usr/glibc-compat/sbin:/usr/bin/:/bin:/sbin:/usr/sbin +export LD_LIBRARY_PATH="/usr/glibc-compat/lib/" +export CPATH="/usr/glibc-compat/include/" +export C_INCLUDE_PATH="/usr/glibc-compat/include/" +export CPLUS_INCLUDE_PATH="/usr/glibc-compat/include/" +export OBJC_INCLUDE_PATH="/usr/glibc-compat/include/" +# export GCC_EXEC_PREFIX="/usr/glibc-compat/" + +# Compilation prerequisites. +retry apk add bash build-base m4 curl gcc g++ gcc-gnat libtool flex bison make glib expat automake autoconf \ +mpc1 mpc1-doc mpc1-dev nasm nasm-doc mpfr3 mpfr3-doc mpfr-dev gmp gmp-dev gmp-doc ca-certificates \ +gawk sed texinfo patchutils grep binutils binutils-libs binutils-dev binutils-gold \ +zlib zlib-dev gzip bzip2 tar gettext gettext-lang linux-headers \ +gettext-asprintf gperf expect expect-dev tcl tcl-dev ttf-dejavu zip paxmark \ +guile guile-dev guile-libs flex flex-dev flex-libs diffutils subversion \ +subversion-dev subversion-libs libssh2 libssh2-dev openssh-client isl isl-dev + +# Delete this file, as it seems to cause problems. +rm -f /usr/lib/libguile-2.0.so.22.8.1-gdb.scm + +# Trigger a linker cache update. +ldconfig + +# lbzip2 biblatex dejagnu gettext-static + +# Download the tarball. +retry curl --silent --show-error --location --output gcc-${VERSION}.tar.gz https://mirrors.kernel.org/gnu/gcc/gcc-${VERSION}/gcc-${VERSION}.tar.gz + +# Uncompress the tarball. +tar xzf gcc-${VERSION}.tar.gz && cd gcc-${VERSION} + +# Configure, compile and install. +./configure --disable-multilib && make -j4 && make install + +# Cleanup the build directory and remove the tarball. +cd $HOME && rm -rf gcc-${VERSION}.tar.gz gcc-${VERSION} diff --git a/scripts/alpine310/glibc.sh b/scripts/alpine310/glibc.sh new file mode 100644 index 000000000..b6a74a278 --- /dev/null +++ b/scripts/alpine310/glibc.sh @@ -0,0 +1,93 @@ +#!/bin/bash -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# Download the glibc Alpine packages. +retry apk --no-cache add wget ca-certificates +retry wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub + +# Unstable. +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-bin-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-dev-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-i18n-2.29-r0.apk + +# Ensure the compatability library has been removed, to avoid conflicts. +retry apk del libc6-compat + +# Install glibc. +retry apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-dev-2.29-r0.apk glibc-i18n-2.29-r0.apk + +# Cleanup the apk files. +rm -f glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-dev-2.29-r0.apk glibc-i18n-2.29-r0.apk + +# Generate the English/USA locale. +/usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8 + +# Ensure the glibc utilities take precedence for the vagrant user. +cat <<-EOF > /etc/profile.d/glibc.sh +ID=\`/usr/bin/id -u\` +if [ \$ID != 0 ]; then + export PATH=/usr/glibc-compat/bin:/usr/glibc-compat/sbin:/usr/bin/:$PATH + export LD_LIBRARY_PATH="/usr/glibc-compat/lib/" + # export LIBRARY_PATH="/usr/glibc-compat/lib/" + # export CPATH="/usr/glibc-compat/include/" + # export C_INCLUDE_PATH="/usr/glibc-compat/include/" + # export CPLUS_INCLUDE_PATH="/usr/glibc-compat/include/" + # export OBJC_INCLUDE_PATH="/usr/glibc-compat/include/" + # export GCC_EXEC_PREFIX="/usr/glibc-compat/" +else + export PATH=$PATH:/usr/glibc-compat/bin:/usr/glibc-compat/sbin + export LD_LIBRARY_PATH="/usr/glibc-compat/lib/" +fi +EOF + +# VERSION="2.24" +# PREFIX="/usr/glibc/" +# +# # Install the basic build system utilities. +# apk add --update wget build-base ca-certificates linux-firmware linux-headers \ +# linux-virtgrsec linux-virtgrsec-dev util-linux util-linux-bash-completion \ +# util-linux-dev util-linux-doc syslinux-dev +# +# # Grab the tarball with the GNU libc source code. +# wget -q -O "glibc-${VERSION}.tar.gz" "http://ftp.gnu.org/gnu/glibc/glibc-${VERSION}.tar.gz" +# +# # Extract the secrets and get ready to rumble. +# tar xzvf glibc-${VERSION}.tar.gz +# +# # The configure script requrires an independent build directory. +# mkdir -p glibc-build && cd glibc-build +# +# ../glibc-${VERSION}/configure --with-headers=/usr/include/linux/ --prefix=/usr/glibc/ +# +# # Configure glibc with a prefix so it doesn't conflict with musl. +# ../glibc-${VERSION}/configure --prefix="${PREFIX}" --libdir="${PREFIX}/lib" \ +# --libexecdir="${PREFIX}/lib" --enable-multi-arch +# +# # Compile glibc. +# make && make install diff --git a/scripts/alpine310/limits.sh b/scripts/alpine310/limits.sh new file mode 100644 index 000000000..f87208b72 --- /dev/null +++ b/scripts/alpine310/limits.sh @@ -0,0 +1,4 @@ +#!/bin/bash -eux + +# Setup the memory locking limits. +sed -i -e "s/.*rc_ulimit.*/rc_ulimit=\"-l unlimited\"/g" /etc/rc.conf diff --git a/scripts/alpine310/lsb.sh b/scripts/alpine310/lsb.sh new file mode 100644 index 000000000..e36e444d4 --- /dev/null +++ b/scripts/alpine310/lsb.sh @@ -0,0 +1,18 @@ +#!/bin/bash -eux + +tee /usr/bin/lsb_release <<-EOF +#!/bin/bash + +printf "Distributor ID: Alpine\n" + +EOF + +chmod 755 /usr/bin/lsb_release + +# So the vagrant halt command works properly. +tee /usr/sbin/shutdown <<-EOF +#!/bin/bash +sudo /sbin/poweroff +EOF + +chmod 755 /usr/sbin/shutdown diff --git a/scripts/alpine310/magma.sh b/scripts/alpine310/magma.sh new file mode 100644 index 000000000..727979a8a --- /dev/null +++ b/scripts/alpine310/magma.sh @@ -0,0 +1,186 @@ +#!/bin/bash -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# The packages needed to compile magma. +retry apk add bash m4 gcc g++ gcc-gnat gdb gdbm grep perl make glib expat \ +automake autoconf valgrind binutils binutils-libs gmp isl mpc1 python2 pkgconf \ +mpfr3 libtool flex bison cmake ca-certificates patch ncurses-doc ncurses-libs \ +ncurses-dev ncurses-static ncurses ncurses-terminfo-base ncurses-terminfo \ +makedepend build-base coreutils ctags readline openssl nasm zlib groff subunit \ +diffutils doxygen gawk sed texinfo xz jsoncpp subunit-libs \ +libc-utils patchutils strace tar kmod bc linux-firmware pcre pcre-tools \ +bsd-compat-headers fortify-headers linux-headers curl check fts expect \ +linux-vanilla clang clang-libs llvm llvm-static llvm-libs boost \ +boost-system boost-thread boost-signals boost-random boost-iostreams tcl \ +boost-math boost-serialization boost-filesystem boost-date_time boost-regex \ +musl musl-utils npth gpgme \ +libbz2 libgomp libatomic libltdl libbsd libattr libacl libarchive libcurl \ +libpthread-stubs libgcc libgc++ libressl libaio libuv libxml2 \ +libxslt libgc++ libgcj libgnat libstdc++ \ +glib-dev libc-dev musl-dev valgrind-dev libbsd-dev subunit-dev \ +acl-dev popt-dev python2-dev zlib-dev kmod-dev linux-vanilla-dev \ +gmp-dev mpfr-dev libressl-dev readline-dev libaio-dev npth-dev \ +util-linux-dev curl-dev expat-dev zlib-dev bzip2-dev libarchive-dev tcl-dev \ +libuv-dev xz-dev jsoncpp-dev check-dev pcre-dev fts-dev expect-dev \ +libxml2-dev llvm-dev isl-dev clang-dev llvm-dev boost-dev libxslt-dev \ +gcc-doc m4-doc make-doc patch-doc + +# Need to retrieve the source code. +retry apk add git git-doc git-perl popt rsync wget + +# Needed to run the watcher and status scripts. +retry apk add sysstat inotify-tools lm_sensors sysfsutils + +# Needed to run the stacie script. +retry apk add py2-crypto py2-cryptography py2-cparser py2-cffi py2-idna py2-asn1 py2-six py2-ipaddress + +# Setup the the box. This runs as root +if [ -d /home/vagrant/ ]; then + OUTPUT="/home/vagrant/magma-build.sh" +else + OUTPUT="/root/magma-build.sh" +fi + +# Grab a snapshot of the development branch. +cat <<-EOF > $OUTPUT +#!/bin/bash + +export PATH=/usr/glibc-compat/bin:/usr/glibc-compat/sbin:/usr/bin/:$PATH + +error() { + if [ \$? -ne 0 ]; then + printf "\n\nmagma daemon compilation failed...\n\n"; + exit 1 + fi +} + +if [ -x /usr/bin/id ]; then + ID=\`/usr/bin/id -u\` + if [ -n "\$ID" -a "\$ID" -eq 0 ]; then + rc-service mariadb start + rc-service postfix start + rc-service memcached start + fi +fi + +# Temporary [hopefully] workaround to avoid [yet another] bug in NSS. +export NSS_DISABLE_HW_AES=1 + +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + +# We need to give the box 30 seconds to get the networking setup or +# the git clone operation will fail. +sleep 30 + +# If the directory is present, remove it so we can clone a fresh copy. +if [ -d magma-develop ]; then + rm --recursive --force magma-develop +fi + +# Clone the magma repository off Github. +git clone https://github.com/lavabit/magma.git magma-develop; error +cd magma-develop; error + +# Setup the bin links, just in case we need to troubleshoot things manually. +dev/scripts/linkup.sh; error + +# Compile the dependencies into a shared library. +dev/scripts/builders/build.lib.sh all; error + +# Reset the sandbox database and storage files. +dev/scripts/database/schema.reset.sh; error + +# Enable the anti-virus engine and update the signatures. +dev/scripts/freshen/freshen.clamav.sh 2>&1 | grep -v WARNING | grep -v PANIC; error +sed -i -e "s/virus.available = false/virus.available = true/g" sandbox/etc/magma.sandbox.config + +# Ensure the sandbox config uses port 2525 for relays. +sed -i -e "/magma.relay\[[0-9]*\].name.*/d" sandbox/etc/magma.sandbox.config +sed -i -e "/magma.relay\[[0-9]*\].port.*/d" sandbox/etc/magma.sandbox.config +sed -i -e "/magma.relay\[[0-9]*\].secure.*/d" sandbox/etc/magma.sandbox.config +printf "\n\nmagma.relay[1].name = localhost\nmagma.relay[1].port = 2525\n\n" >> sandbox/etc/magma.sandbox.config + +# Bug fix... create the scan directory so ClamAV unit tests work. +if [ ! -d 'sandbox/spool/scan/' ]; then + mkdir -p sandbox/spool/scan/ +fi + +# Compile the daemon and then compile the unit tests. +make all; error + +# Change the socket path. +sed -i -e "s/\/var\/lib\/mysql\/mysql.sock/\/var\/run\/mysqld\/mysqld.sock/g" sandbox/etc/magma.sandbox.config + +# Run the unit tests. +dev/scripts/launch/check.run.sh + +# If the unit tests fail, print an error, but contine running. +if [ \$? -ne 0 ]; then + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; + for i in 1 2 3; do + printf "\a"; sleep 1 + done + sleep 12 +fi + +# Alternatively, run the unit tests atop Valgrind. +# Note this takes awhile when the anti-virus engine is enabled. +# dev/scripts/launch/check.vg + +# Daemonize instead of running on the console. +# sed -i -e "s/magma.output.file = false/magma.output.file = true/g" sandbox/etc/magma.sandbox.config +# sed -i -e "s/magma.system.daemonize = false/magma.system.daemonize = true/g" sandbox/etc/magma.sandbox.config + +# Launch the daemon. +# ./magmad --config magma.system.daemonize=true sandbox/etc/magma.sandbox.config + +# Save the result. +# RETVAL=\$? + +# Give the daemon time to start before exiting. +sleep 15 + +# Exit wit a zero so Vagrant doesn't think a failed unit test is a provision failure. +exit \$RETVAL +EOF + +# Make the script executable. +if [ -d /home/vagrant/ ]; then + chown vagrant:vagrant /home/vagrant/magma-build.sh + chmod +x /home/vagrant/magma-build.sh +else + chmod +x /root/magma-build.sh +fi + +# Customize the message of the day +printf "Magma Daemon Development Environment\nTo download and compile magma, just execute the magma-build.sh script.\n\n" > /etc/motd diff --git a/scripts/alpine310/mariadb.sh b/scripts/alpine310/mariadb.sh new file mode 100644 index 000000000..7ab936938 --- /dev/null +++ b/scripts/alpine310/mariadb.sh @@ -0,0 +1,52 @@ +#!/bin/bash -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# The mysql client and related utilities. +retry apk add mariadb mariadb-client mariadb-common libaio libgcc libstdc++ + +# Delete these lines, if they exist, and explicitly configure the data directory. +sed -i "/datadir/d" /etc/mysql/my.cnf +sed -i "/innodb_data_home_dir/d" /etc/mysql/my.cnf +sed -i '/\[mysqld\].*/a \datadir\=\/var\/lib\/mysql\/\ninnodb_data_home_dir\=\/var\/lib\/mysql\/\n\end' /etc/mysql/my.cnf + +# Create the initial database. +/etc/init.d/mariadb setup + +# So it gets started automatically. +rc-update add mariadb default && rc-service mariadb start + +# Setup the mysql root account with a random password. +export PRAND=`dd if=/dev/urandom count=50 | md5sum | awk -F' ' '{print $1}'` +mysqladmin --user=root password "$PRAND" + +# Allow the root user to login to mysql as root by saving the randomly generated password. +printf "\n\n[mysql]\nuser=root\npassword=$PRAND\n\n" >> /root/.my.cnf + +# Create the mytool user and grant the required permissions. +mysql --execute="CREATE USER mytool@localhost IDENTIFIED BY 'aComplex1'" +mysql --execute="GRANT ALL ON *.* TO mytool@localhost" diff --git a/scripts/alpine310/memcached.sh b/scripts/alpine310/memcached.sh new file mode 100644 index 000000000..5afcc93b8 --- /dev/null +++ b/scripts/alpine310/memcached.sh @@ -0,0 +1,33 @@ +#!/bin/bash -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# The memcached server. +retry apk add memcached libevent + +# Setup memcached to start automatically. +rc-update add memcached default && rc-service memcached start diff --git a/scripts/alpine310/network.sh b/scripts/alpine310/network.sh new file mode 100644 index 000000000..c5ff6a28e --- /dev/null +++ b/scripts/alpine310/network.sh @@ -0,0 +1,16 @@ +#!/bin/bash -eux + +# Ensure the network shuts down properly. +printf 'keep_network="NO"\n' >> /etc/rc.conf + +# Ensure SSHD waits until the network is up and running before launching. +printf 'rc_need="net-online"\n' >> /etc/conf.d/sshd + +# Set up the required interfaces. +printf 'interfaces="eth0"\n' >> /etc/conf.d/net-online +printf 'timeout=120\n' >> /etc/conf.d/net-online + +# Enable the net-online target. +rc-update add net-online default +rc-update -u + diff --git a/scripts/alpine310/parallels.sh b/scripts/alpine310/parallels.sh new file mode 100644 index 000000000..024ed8725 --- /dev/null +++ b/scripts/alpine310/parallels.sh @@ -0,0 +1,49 @@ +#!/bin/bash -ux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# Needed to check whether we're running atop Parallels. +retry apk add dmidecode + +# Bail if we are not running atop Parallels. +if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then + exit 0 +fi + +# Read in the version number. +PARALLELSVERSION=`cat /root/parallels-tools-version.txt` + +# The mount command syntax doesn't work on Alpine. +# mkdir -p /mnt/parallels/ +# mount -o loop /root/parallels-tools-linux.iso /mnt/parallels/ +# bash /mnt/parallels/install --install-unattended-with-deps +# umount /mnt/parallels/ +# rmdir /mnt/parallels/ + +# Cleanup the guest additions. +rm -f /root/parallels-tools-linux.iso +rm -f /root/parallels-tools-version.txt diff --git a/scripts/alpine310/postfix.sh b/scripts/alpine310/postfix.sh new file mode 100644 index 000000000..d3ca325fe --- /dev/null +++ b/scripts/alpine310/postfix.sh @@ -0,0 +1,46 @@ +#!/bin/bash -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# The postfix server for message relays. +retry apk add postfix db libsasl + +# Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. +sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf + +# Configure the postfix hostname and origin parameters. +printf "\ninet_interfaces = localhost\n" >> /etc/postfix/main.cf +printf "inet_protocols = ipv4\n" >> /etc/postfix/main.cf +printf "myhostname = relay.magma.builder\n" >> /etc/postfix/main.cf +printf "myorigin = magma.builder\n" >> /etc/postfix/main.cf +printf "transport_maps = hash:/etc/postfix/transport\n" >> /etc/postfix/main.cf + +# printf "magma.builder smtp:[127.0.0.1]:7000\n" >> /etc/postfix/transport +# postmap /etc/postfix/transport + +# So it gets started automatically. +rc-update add postfix default && rc-service postfix start diff --git a/scripts/alpine310/qemu.sh b/scripts/alpine310/qemu.sh new file mode 100644 index 000000000..fc9985b21 --- /dev/null +++ b/scripts/alpine310/qemu.sh @@ -0,0 +1,53 @@ +#!/bin/bash -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# Ensure dmidecode is available. +retry apk add dmidecode + +# Bail if we are not running atop QEMU. +if [[ `dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then + exit 0 +fi + +# Install the QEMU using Yum. +printf "Installing the QEMU Tools.\n" + +# Install the QEMU guest tools. +retry apk add qemu-guest-agent + +# Update the default agent path. +printf "\nGA_METHOD=\"virtio-serial\"\nGA_PATH=\"/dev/vport0p1\"\n" >> /etc/conf.d/qemu-guest-agent + +# Autostart the open-vm-tools. +rc-update add qemu-guest-agent default && rc-service qemu-guest-agent start + +# Boosts the available entropy which allows magma to start faster. +retry apk add haveged + +# Autostart the haveged daemon. +rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine310/sshd.sh b/scripts/alpine310/sshd.sh new file mode 100644 index 000000000..f6dbb8b77 --- /dev/null +++ b/scripts/alpine310/sshd.sh @@ -0,0 +1,10 @@ +#!/bin/bash -x + +sed -i "/^UseDNS.*/d" /etc/ssh/sshd_config +sed -i "/^#UseDNS.*/d" /etc/ssh/sshd_config +sed -i "/^# UseDNS.*/d" /etc/ssh/sshd_config + +printf "\nUseDNS no\n" >> /etc/ssh/sshd_config + +sed -i '/AllowTcpForwarding/d' /etc/ssh/sshd_config +printf "\nAllowTcpForwarding yes\n" >> /etc/ssh/sshd_config \ No newline at end of file diff --git a/scripts/alpine310/vagrant.sh b/scripts/alpine310/vagrant.sh new file mode 100644 index 000000000..76b7550bf --- /dev/null +++ b/scripts/alpine310/vagrant.sh @@ -0,0 +1,30 @@ +#!/bin/bash -ux + +# Create the vagrant user account. +adduser -D -s /bin/bash vagrant + +# Enable exit/failure on error. +# set -eux + +printf "vagrant\nvagrant\n" | passwd vagrant +sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers +printf "vagrant ALL=(ALL) NOPASSWD: ALL\n" > /etc/sudoers.d/vagrant +chmod 0440 /etc/sudoers.d/vagrant + +# Create the vagrant user ssh directory. +mkdir -pm 700 /home/vagrant/.ssh + +# Create an authorized keys file and insert the insecure public vagrant key. +cat <<-EOF > /home/vagrant/.ssh/authorized_keys +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key +EOF + +# Ensure the permissions are set correct to avoid OpenSSH complaints. +chmod 0600 /home/vagrant/.ssh/authorized_keys +chown -R vagrant:vagrant /home/vagrant/.ssh + +# Mark the vagrant box build time. +date --utc > /etc/vagrant_box_build_time + +# Truncate the motd file. +truncate -s 0 /etc/motd diff --git a/scripts/alpine310/virtualbox.sh b/scripts/alpine310/virtualbox.sh new file mode 100644 index 000000000..bad9d077d --- /dev/null +++ b/scripts/alpine310/virtualbox.sh @@ -0,0 +1,77 @@ +#!/bin/bash -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# Ensure dmidecode is available. +retry apk add dmidecode + +# Bail if we are not running atop VirtualBox. +if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then + exit 0 +fi + +# Install the Virtual Box Tools from the Linux Guest Additions ISO. +printf "Installing the Virtual Box Tools.\n" + +# Add the testing repository (which isn't available over HTTPS). +printf "@testing http://nl.alpinelinux.org/alpine/edge/testing\n" >> /etc/apk/repositories + +# Add the primary site. +printf "@edge http://nl.alpinelinux.org/alpine/edge/main/\n" >> /etc/apk/repositories + +# Update the APK cache. +retry apk update --no-cache + +# Install the VirtualBox kernel modules for guest services. +retry apk add linux-hardened@edge virtualbox-additions-hardened@testing + +# Autoload the virtualbox kernel modules. +echo vboxpci >> /etc/modules +echo vboxdrv >> /etc/modules +echo vboxnetflt >> /etc/modules + +# Read in the version number. +# export VBOXVERSION=`cat /root/VBoxVersion.txt` +# +# export DEBIAN_FRONTEND=noninteractive +# apt-get --assume-yes install dkms build-essential module-assistant linux-headers-$(uname -r) +# +# mkdir -p /mnt/virtualbox +# mount -o loop /root/VBoxGuestAdditions.iso /mnt/virtualbox +# +# /mnt/virtualbox/VBoxLinuxAdditions.run --nox11 +# ln -s /opt/VBoxGuestAdditions-$VBOXVERSION/lib/VBoxGuestAdditions /usr/lib/VBoxGuestAdditions +# +# umount /mnt/virtualbox +rm -rf /root/VBoxVersion.txt +rm -rf /root/VBoxGuestAdditions.iso + +# Boosts the available entropy which allows magma to start faster. +retry apk add haveged + +# Autostart the haveged daemon. +rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine310/vmware.sh b/scripts/alpine310/vmware.sh new file mode 100644 index 000000000..570270331 --- /dev/null +++ b/scripts/alpine310/vmware.sh @@ -0,0 +1,128 @@ +#!/bin/bash -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# Ensure dmidecode is available. +retry apk add dmidecode + +# Bail if we are not running inside VMWare. +if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then + exit 0 +fi + +# Install the VMWare Tools from the Linux ISO. +printf "Installing the VMWare Tools.\n" + +# Update the APK cache. +retry apk update + +# Install the Open VMWare Tools. +retry apk add perl build-base mkinitfs util-linux linux-pam linux-headers +retry apk add open-vm-tools open-vm-tools-dev + +# Autostart the open-vm-tools. +rc-update add open-vm-tools default && rc-service open-vm-tools start +vmware-toolbox-cmd timesync enable + +# Ensure the OpenVM tools don't start until after the SSH server is online. +printf 'rc_need="sshd"\n' >> /etc/conf.d/open-vm-tools +rc-update -u + +tee /etc/udev/rules.d/60-open-vm-tools.rules <<-EOF +# VMware SCSI devices Timeout adjustment +# +# Modify the timeout value for VMware SCSI devices so that +# in the event of a failover, we don't time out. +# See Bug 271286 for more information. + +ACTION=="add|change", SUBSYSTEMS=="scsi", ATTRS{vendor}=="VMware " , ATTRS{model}=="Virtual disk ", RUN+="/bin/sh -c 'echo 180 >/sys$DEVPATH/device/timeout'" + + +# VMWare Virtual Sockets permissions +# +# after loading the vsock module, a block device /dev/vsock will be created with permission 0600 +# This rule changes permission to 0666 to allow users access to the virtual sockets + +KERNEL=="vsock", MODE="0666" +EOF + +# Boosts the available entropy which allows magma to start faster. +retry apk add haveged + +# Autostart the haveged daemon. +rc-update add haveged default && rc-service haveged start + +# # The VMWare tool dependencies. +# apk add perl build-base mkinitfs util-linux linux-pam linux-headers +# +# mkdir /etc/rc.d/ +# mkdir /etc/rc.d/rc0.d/ +# mkdir /etc/rc.d/rc1.d/ +# mkdir /etc/rc.d/rc2.d/ +# mkdir /etc/rc.d/rc3.d/ +# mkdir /etc/rc.d/rc4.d/ +# mkdir /etc/rc.d/rc5.d/ +# mkdir /etc/rc.d/rc6.d/ +# +# # Uncomment if you'd prefer to build the guest additions from source. +# export PATH=/usr/glibc-compat/bin:/usr/glibc-compat/sbin:/usr/bin/:$PATH +# export LD_LIBRARY_PATH="/usr/glibc-compat/lib/" +# +# cd /tmp +# mkdir -p /media/vmware +# losetup /dev/loop0 /root/linux.iso +# mount -t iso9660 -o ro /dev/loop0 /media/vmware +# +# tar xzf /media/vmware/VMwareTools-*.tar.gz +# sed -i -e "s/need_glibc25='yes'/need_glibc25='no'/g" /tmp/vmware-tools-distrib/vmware-install.pl +# /tmp/vmware-tools-distrib/vmware-install.pl -d +# umount /media/vmware && rmdir /media/vmware +# rm -rf /tmp/vmware-tools-distrib +# +# sed -i -e "s/have_grabbitmqproxy='yes'/have_grabbitmqproxy='no'/g" /usr/bin/vmware-config-tools.pl +# sed -i -e "s/have_thinprint='yes'/have_thinprint='no'/g" /usr/bin/vmware-config-tools.pl +# sed -i -e "s/have_caf='yes'/have_caf='no'/g" /usr/bin/vmware-config-tools.pl +# sed -i -e "s/need_glibc25='yes'/need_glibc25='no'/g" /usr/bin/vmware-config-tools.pl +# /usr/bin/vmware-config-tools.pl -d +# +# sed -i -e "s/have_caf=yes/have_caf=no/g" /etc/rc.d/vmware-tools +# cat <<-EOF > /etc/init.d/vmware-tools +# #!/sbin/openrc-run +# +# command="/etc/rc.d/vmware-tools" +# command_args="start" +# command_background="yes" +# +# pidfile="/run/$RC_SVCNAME.pid" +# +# EOF +# chmod +x /etc/init.d/vmware-tools +# rc-update add vmware-tools default && rc-service vmware-tools start +# rc-update -u + +# When we're done delete the tools ISO. +rm -rf /root/linux.iso diff --git a/scripts/alpine35/apk.sh b/scripts/alpine35/apk.sh index 8bb2065b2..358752b2e 100644 --- a/scripts/alpine35/apk.sh +++ b/scripts/alpine35/apk.sh @@ -1,15 +1,41 @@ #!/bin/sh -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure the main repository mirrors. printf "https://dl-4.alpinelinux.org/alpine/v3.5/main\n" > /etc/apk/repositories printf "https://dl-4.alpinelinux.org/alpine/v3.5/community\n" >> /etc/apk/repositories # Update the package list and then upgrade. -apk update --no-cache -apk update upgrade +retry apk update --no-cache +retry apk update upgrade # Install various basic system utilities. -apk add vim man man-pages bash gawk wget curl sudo lsof file grep readline mdocml sysstat lm_sensors findutils sysfsutils dmidecode libmagic sqlite-libs ca-certificates ncurses-libs ncurses-terminfo ncurses-terminfo-base psmisc +retry apk add vim man man-pages bash gawk wget curl sudo lsof file grep readline mdocml sysstat lm_sensors findutils sysfsutils dmidecode libmagic sqlite-libs ca-certificates ncurses-libs ncurses-terminfo ncurses-terminfo-base psmisc # Setup vim as the default editor. printf "alias vi=vim\n" >> /etc/profile.d/vim.sh diff --git a/scripts/alpine35/cache.sh b/scripts/alpine35/cache.sh index 856ed3ca5..c0fc8a4cb 100644 --- a/scripts/alpine35/cache.sh +++ b/scripts/alpine35/cache.sh @@ -1,7 +1,33 @@ #!/bin/sh -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Setup the apk cache. -setup-apkcache /var/cache/apk +retry setup-apkcache /var/cache/apk # Delete unnecessary packages, and download any missing packages. -apk cache -v sync +retry apk cache -v sync diff --git a/scripts/alpine35/gcc.sh b/scripts/alpine35/gcc.sh index c2cf47696..fed8e638c 100644 --- a/scripts/alpine35/gcc.sh +++ b/scripts/alpine35/gcc.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + VERSION="4.9.4" LIBITM=true @@ -23,12 +49,9 @@ export CPLUS_INCLUDE_PATH="/usr/glibc-compat/include/" export OBJC_INCLUDE_PATH="/usr/glibc-compat/include/" # export GCC_EXEC_PREFIX="/usr/glibc-compat/" -# Download the gcc packages. -apk add wget ca-certificates - # Compilation prerequisites. -apk add bash build-base m4 gcc g++ gcc-gnat libtool flex bison make glib expat automake autoconf \ -mpc1 mpc1-doc mpc1-dev nasm nasm-doc mpfr3 mpfr3-doc mpfr-dev gmp gmp-dev gmp-doc \ +retry apk add bash build-base m4 curl gcc g++ gcc-gnat libtool flex bison make glib expat automake autoconf \ +mpc1 mpc1-doc mpc1-dev nasm nasm-doc mpfr3 mpfr3-doc mpfr-dev gmp gmp-dev gmp-doc ca-certificates \ gawk sed texinfo patchutils grep binutils binutils-libs binutils-dev binutils-gold \ zlib zlib-dev gzip bzip2 tar gettext gettext-lang linux-headers \ gettext-asprintf gperf expect expect-dev tcl tcl-dev ttf-dejavu zip paxmark \ @@ -44,7 +67,7 @@ ldconfig # lbzip2 biblatex dejagnu gettext-static # Download the tarball. -wget --quiet https://mirrors.kernel.org/gnu/gcc/gcc-${VERSION}/gcc-${VERSION}.tar.gz gcc-${VERSION}.tar.gz +retry curl --silent --show-error --location --output gcc-${VERSION}.tar.gz https://mirrors.kernel.org/gnu/gcc/gcc-${VERSION}/gcc-${VERSION}.tar.gz # Uncompress the tarball. tar xzf gcc-${VERSION}.tar.gz && cd gcc-${VERSION} diff --git a/scripts/alpine35/glibc.sh b/scripts/alpine35/glibc.sh index f27fecb23..b6a74a278 100644 --- a/scripts/alpine35/glibc.sh +++ b/scripts/alpine35/glibc.sh @@ -1,23 +1,49 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Download the glibc Alpine packages. -apk --no-cache add wget ca-certificates -wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub +retry apk --no-cache add wget ca-certificates +retry wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub # Unstable. -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-bin-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-dev-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-i18n-2.26-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-bin-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-dev-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-i18n-2.29-r0.apk # Ensure the compatability library has been removed, to avoid conflicts. -apk del libc6-compat +retry apk del libc6-compat # Install glibc. -apk add glibc-2.26-r0.apk glibc-bin-2.26-r0.apk glibc-dev-2.26-r0.apk glibc-i18n-2.26-r0.apk +retry apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-dev-2.29-r0.apk glibc-i18n-2.29-r0.apk # Cleanup the apk files. -rm -f glibc-2.26-r0.apk glibc-bin-2.26-r0.apk glibc-dev-2.26-r0.apk glibc-i18n-2.26-r0.apk +rm -f glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-dev-2.29-r0.apk glibc-i18n-2.29-r0.apk # Generate the English/USA locale. /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8 diff --git a/scripts/alpine35/magma.sh b/scripts/alpine35/magma.sh index 30f701f7a..5907c792c 100644 --- a/scripts/alpine35/magma.sh +++ b/scripts/alpine35/magma.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The packages needed to compile magma. -apk add bash m4 gcc g++ gcc-gnat gdb gdbm grep perl make glib expat \ +retry apk add bash m4 gcc g++ gcc-gnat gdb gdbm grep perl make glib expat \ automake autoconf valgrind binutils binutils-libs gmp isl mpc1 python2 pkgconf \ mpfr3 libtool flex bison cmake ca-certificates patch ncurses-doc ncurses-libs \ ncurses-dev ncurses-static ncurses ncurses-terminfo-base ncurses-terminfo \ @@ -25,13 +51,13 @@ libxml2-dev llvm-dev isl-dev clang-dev llvm-dev boost-dev libxslt-dev \ gcc-doc m4-doc make-doc patch-doc # Need to retrieve the source code. -apk add git git-doc git-perl popt rsync wget +retry apk add git git-doc git-perl popt rsync wget # Needed to run the watcher and status scripts. -apk add sysstat inotify-tools lm_sensors sysfsutils +retry apk add sysstat inotify-tools lm_sensors sysfsutils # Needed to run the stacie script. -apk add py2-crypto py2-cryptography py2-cparser py2-cffi py2-idna py2-asn1 py2-six py2-ipaddress +retry apk add py2-crypto py2-cryptography py2-cparser py2-cffi py2-idna py2-asn1 py2-six py2-ipaddress # Setup the the box. This runs as root if [ -d /home/vagrant/ ]; then @@ -62,6 +88,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -113,7 +146,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/alpine35/mariadb.sh b/scripts/alpine35/mariadb.sh index 31a8dd335..7ab936938 100644 --- a/scripts/alpine35/mariadb.sh +++ b/scripts/alpine35/mariadb.sh @@ -1,7 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The mysql client and related utilities. -apk add mariadb mariadb-client mariadb-common libaio libgcc libstdc++ +retry apk add mariadb mariadb-client mariadb-common libaio libgcc libstdc++ + +# Delete these lines, if they exist, and explicitly configure the data directory. +sed -i "/datadir/d" /etc/mysql/my.cnf +sed -i "/innodb_data_home_dir/d" /etc/mysql/my.cnf +sed -i '/\[mysqld\].*/a \datadir\=\/var\/lib\/mysql\/\ninnodb_data_home_dir\=\/var\/lib\/mysql\/\n\end' /etc/mysql/my.cnf # Create the initial database. /etc/init.d/mariadb setup diff --git a/scripts/alpine35/memcached.sh b/scripts/alpine35/memcached.sh index 409af75e1..5afcc93b8 100644 --- a/scripts/alpine35/memcached.sh +++ b/scripts/alpine35/memcached.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The memcached server. -apk add memcached libevent +retry apk add memcached libevent # Setup memcached to start automatically. rc-update add memcached default && rc-service memcached start diff --git a/scripts/alpine35/parallels.sh b/scripts/alpine35/parallels.sh index 9b5339054..024ed8725 100644 --- a/scripts/alpine35/parallels.sh +++ b/scripts/alpine35/parallels.sh @@ -1,7 +1,33 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/alpine35/postfix.sh b/scripts/alpine35/postfix.sh index 2a7d4d62c..d3ca325fe 100644 --- a/scripts/alpine35/postfix.sh +++ b/scripts/alpine35/postfix.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The postfix server for message relays. -apk add postfix db libsasl +retry apk add postfix db libsasl # Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf diff --git a/scripts/alpine35/qemu.sh b/scripts/alpine35/qemu.sh index bfadeae8b..cbc9376e6 100644 --- a/scripts/alpine35/qemu.sh +++ b/scripts/alpine35/qemu.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop QEMU. if [[ `dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then @@ -12,7 +38,7 @@ fi printf "Installing the QEMU Tools.\n" # Install the QEMU guest tools. -apk add qemu-guest-agent +retry apk add qemu-guest-agent # Update the default agent path. printf "\nGA_METHOD=\"virtio-serial\"\nGA_PATH=\"/dev/vport0p1\"\n" >> /etc/conf.d/qemu-guest-agent @@ -21,7 +47,7 @@ printf "\nGA_METHOD=\"virtio-serial\"\nGA_PATH=\"/dev/vport0p1\"\n" >> /etc/conf rc-update add qemu-guest-agent default && rc-service qemu-guest-agent start # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Remove the network need from the haveged. tee /etc/init.d/haveged <<-EOF diff --git a/scripts/alpine35/virtualbox.sh b/scripts/alpine35/virtualbox.sh index 49ba0692b..bad9d077d 100644 --- a/scripts/alpine35/virtualbox.sh +++ b/scripts/alpine35/virtualbox.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop VirtualBox. if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then @@ -18,10 +44,10 @@ printf "@testing http://nl.alpinelinux.org/alpine/edge/testing\n" >> /etc/apk/re printf "@edge http://nl.alpinelinux.org/alpine/edge/main/\n" >> /etc/apk/repositories # Update the APK cache. -apk update --no-cache +retry apk update --no-cache # Install the VirtualBox kernel modules for guest services. -apk add linux-hardened@edge virtualbox-additions-hardened@testing +retry apk add linux-hardened@edge virtualbox-additions-hardened@testing # Autoload the virtualbox kernel modules. echo vboxpci >> /etc/modules @@ -45,7 +71,7 @@ rm -rf /root/VBoxVersion.txt rm -rf /root/VBoxGuestAdditions.iso # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine35/vmware.sh b/scripts/alpine35/vmware.sh index 19a2de5f0..570270331 100644 --- a/scripts/alpine35/vmware.sh +++ b/scripts/alpine35/vmware.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running inside VMWare. if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then @@ -12,11 +38,11 @@ fi printf "Installing the VMWare Tools.\n" # Update the APK cache. -apk update +retry apk update # Install the Open VMWare Tools. -apk add perl build-base mkinitfs util-linux linux-pam linux-headers -apk add open-vm-tools open-vm-tools-dev +retry apk add perl build-base mkinitfs util-linux linux-pam linux-headers +retry apk add open-vm-tools open-vm-tools-dev # Autostart the open-vm-tools. rc-update add open-vm-tools default && rc-service open-vm-tools start @@ -45,7 +71,7 @@ KERNEL=="vsock", MODE="0666" EOF # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine36/apk.sh b/scripts/alpine36/apk.sh index b7f74fd1d..76320bd85 100644 --- a/scripts/alpine36/apk.sh +++ b/scripts/alpine36/apk.sh @@ -1,15 +1,41 @@ #!/bin/sh -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure the main repository mirrors. printf "https://dl-4.alpinelinux.org/alpine/v3.6/main\n" > /etc/apk/repositories printf "https://dl-4.alpinelinux.org/alpine/v3.6/community\n" >> /etc/apk/repositories # Update the package list and then upgrade. -apk update --no-cache -apk update upgrade +retry apk update --no-cache +retry apk update upgrade # Install various basic system utilities. -apk add vim man man-pages bash gawk wget curl sudo lsof file grep readline mdocml sysstat lm_sensors findutils sysfsutils dmidecode libmagic sqlite-libs ca-certificates ncurses-libs ncurses-terminfo ncurses-terminfo-base psmisc +retry apk add vim man man-pages bash gawk wget curl sudo lsof file grep readline mdocml sysstat lm_sensors findutils sysfsutils dmidecode libmagic sqlite-libs ca-certificates ncurses-libs ncurses-terminfo ncurses-terminfo-base psmisc # Setup vim as the default editor. printf "alias vi=vim\n" >> /etc/profile.d/vim.sh diff --git a/scripts/alpine36/cache.sh b/scripts/alpine36/cache.sh index 856ed3ca5..c0fc8a4cb 100644 --- a/scripts/alpine36/cache.sh +++ b/scripts/alpine36/cache.sh @@ -1,7 +1,33 @@ #!/bin/sh -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Setup the apk cache. -setup-apkcache /var/cache/apk +retry setup-apkcache /var/cache/apk # Delete unnecessary packages, and download any missing packages. -apk cache -v sync +retry apk cache -v sync diff --git a/scripts/alpine36/gcc.sh b/scripts/alpine36/gcc.sh index c2cf47696..fed8e638c 100644 --- a/scripts/alpine36/gcc.sh +++ b/scripts/alpine36/gcc.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + VERSION="4.9.4" LIBITM=true @@ -23,12 +49,9 @@ export CPLUS_INCLUDE_PATH="/usr/glibc-compat/include/" export OBJC_INCLUDE_PATH="/usr/glibc-compat/include/" # export GCC_EXEC_PREFIX="/usr/glibc-compat/" -# Download the gcc packages. -apk add wget ca-certificates - # Compilation prerequisites. -apk add bash build-base m4 gcc g++ gcc-gnat libtool flex bison make glib expat automake autoconf \ -mpc1 mpc1-doc mpc1-dev nasm nasm-doc mpfr3 mpfr3-doc mpfr-dev gmp gmp-dev gmp-doc \ +retry apk add bash build-base m4 curl gcc g++ gcc-gnat libtool flex bison make glib expat automake autoconf \ +mpc1 mpc1-doc mpc1-dev nasm nasm-doc mpfr3 mpfr3-doc mpfr-dev gmp gmp-dev gmp-doc ca-certificates \ gawk sed texinfo patchutils grep binutils binutils-libs binutils-dev binutils-gold \ zlib zlib-dev gzip bzip2 tar gettext gettext-lang linux-headers \ gettext-asprintf gperf expect expect-dev tcl tcl-dev ttf-dejavu zip paxmark \ @@ -44,7 +67,7 @@ ldconfig # lbzip2 biblatex dejagnu gettext-static # Download the tarball. -wget --quiet https://mirrors.kernel.org/gnu/gcc/gcc-${VERSION}/gcc-${VERSION}.tar.gz gcc-${VERSION}.tar.gz +retry curl --silent --show-error --location --output gcc-${VERSION}.tar.gz https://mirrors.kernel.org/gnu/gcc/gcc-${VERSION}/gcc-${VERSION}.tar.gz # Uncompress the tarball. tar xzf gcc-${VERSION}.tar.gz && cd gcc-${VERSION} diff --git a/scripts/alpine36/glibc.sh b/scripts/alpine36/glibc.sh index f27fecb23..b6a74a278 100644 --- a/scripts/alpine36/glibc.sh +++ b/scripts/alpine36/glibc.sh @@ -1,23 +1,49 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Download the glibc Alpine packages. -apk --no-cache add wget ca-certificates -wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub +retry apk --no-cache add wget ca-certificates +retry wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub # Unstable. -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-bin-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-dev-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-i18n-2.26-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-bin-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-dev-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-i18n-2.29-r0.apk # Ensure the compatability library has been removed, to avoid conflicts. -apk del libc6-compat +retry apk del libc6-compat # Install glibc. -apk add glibc-2.26-r0.apk glibc-bin-2.26-r0.apk glibc-dev-2.26-r0.apk glibc-i18n-2.26-r0.apk +retry apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-dev-2.29-r0.apk glibc-i18n-2.29-r0.apk # Cleanup the apk files. -rm -f glibc-2.26-r0.apk glibc-bin-2.26-r0.apk glibc-dev-2.26-r0.apk glibc-i18n-2.26-r0.apk +rm -f glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-dev-2.29-r0.apk glibc-i18n-2.29-r0.apk # Generate the English/USA locale. /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8 diff --git a/scripts/alpine36/magma.sh b/scripts/alpine36/magma.sh index 30f701f7a..5907c792c 100644 --- a/scripts/alpine36/magma.sh +++ b/scripts/alpine36/magma.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The packages needed to compile magma. -apk add bash m4 gcc g++ gcc-gnat gdb gdbm grep perl make glib expat \ +retry apk add bash m4 gcc g++ gcc-gnat gdb gdbm grep perl make glib expat \ automake autoconf valgrind binutils binutils-libs gmp isl mpc1 python2 pkgconf \ mpfr3 libtool flex bison cmake ca-certificates patch ncurses-doc ncurses-libs \ ncurses-dev ncurses-static ncurses ncurses-terminfo-base ncurses-terminfo \ @@ -25,13 +51,13 @@ libxml2-dev llvm-dev isl-dev clang-dev llvm-dev boost-dev libxslt-dev \ gcc-doc m4-doc make-doc patch-doc # Need to retrieve the source code. -apk add git git-doc git-perl popt rsync wget +retry apk add git git-doc git-perl popt rsync wget # Needed to run the watcher and status scripts. -apk add sysstat inotify-tools lm_sensors sysfsutils +retry apk add sysstat inotify-tools lm_sensors sysfsutils # Needed to run the stacie script. -apk add py2-crypto py2-cryptography py2-cparser py2-cffi py2-idna py2-asn1 py2-six py2-ipaddress +retry apk add py2-crypto py2-cryptography py2-cparser py2-cffi py2-idna py2-asn1 py2-six py2-ipaddress # Setup the the box. This runs as root if [ -d /home/vagrant/ ]; then @@ -62,6 +88,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -113,7 +146,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/alpine36/mariadb.sh b/scripts/alpine36/mariadb.sh index 31a8dd335..7ab936938 100644 --- a/scripts/alpine36/mariadb.sh +++ b/scripts/alpine36/mariadb.sh @@ -1,7 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The mysql client and related utilities. -apk add mariadb mariadb-client mariadb-common libaio libgcc libstdc++ +retry apk add mariadb mariadb-client mariadb-common libaio libgcc libstdc++ + +# Delete these lines, if they exist, and explicitly configure the data directory. +sed -i "/datadir/d" /etc/mysql/my.cnf +sed -i "/innodb_data_home_dir/d" /etc/mysql/my.cnf +sed -i '/\[mysqld\].*/a \datadir\=\/var\/lib\/mysql\/\ninnodb_data_home_dir\=\/var\/lib\/mysql\/\n\end' /etc/mysql/my.cnf # Create the initial database. /etc/init.d/mariadb setup diff --git a/scripts/alpine36/memcached.sh b/scripts/alpine36/memcached.sh index 409af75e1..5afcc93b8 100644 --- a/scripts/alpine36/memcached.sh +++ b/scripts/alpine36/memcached.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The memcached server. -apk add memcached libevent +retry apk add memcached libevent # Setup memcached to start automatically. rc-update add memcached default && rc-service memcached start diff --git a/scripts/alpine36/parallels.sh b/scripts/alpine36/parallels.sh index 9b5339054..024ed8725 100644 --- a/scripts/alpine36/parallels.sh +++ b/scripts/alpine36/parallels.sh @@ -1,7 +1,33 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/alpine36/postfix.sh b/scripts/alpine36/postfix.sh index 2a7d4d62c..d3ca325fe 100644 --- a/scripts/alpine36/postfix.sh +++ b/scripts/alpine36/postfix.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The postfix server for message relays. -apk add postfix db libsasl +retry apk add postfix db libsasl # Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf diff --git a/scripts/alpine36/qemu.sh b/scripts/alpine36/qemu.sh index 4d4e6d085..fc9985b21 100644 --- a/scripts/alpine36/qemu.sh +++ b/scripts/alpine36/qemu.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop QEMU. if [[ `dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then @@ -12,7 +38,7 @@ fi printf "Installing the QEMU Tools.\n" # Install the QEMU guest tools. -apk add qemu-guest-agent +retry apk add qemu-guest-agent # Update the default agent path. printf "\nGA_METHOD=\"virtio-serial\"\nGA_PATH=\"/dev/vport0p1\"\n" >> /etc/conf.d/qemu-guest-agent @@ -21,7 +47,7 @@ printf "\nGA_METHOD=\"virtio-serial\"\nGA_PATH=\"/dev/vport0p1\"\n" >> /etc/conf rc-update add qemu-guest-agent default && rc-service qemu-guest-agent start # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine36/virtualbox.sh b/scripts/alpine36/virtualbox.sh index 49ba0692b..bad9d077d 100644 --- a/scripts/alpine36/virtualbox.sh +++ b/scripts/alpine36/virtualbox.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop VirtualBox. if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then @@ -18,10 +44,10 @@ printf "@testing http://nl.alpinelinux.org/alpine/edge/testing\n" >> /etc/apk/re printf "@edge http://nl.alpinelinux.org/alpine/edge/main/\n" >> /etc/apk/repositories # Update the APK cache. -apk update --no-cache +retry apk update --no-cache # Install the VirtualBox kernel modules for guest services. -apk add linux-hardened@edge virtualbox-additions-hardened@testing +retry apk add linux-hardened@edge virtualbox-additions-hardened@testing # Autoload the virtualbox kernel modules. echo vboxpci >> /etc/modules @@ -45,7 +71,7 @@ rm -rf /root/VBoxVersion.txt rm -rf /root/VBoxGuestAdditions.iso # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine36/vmware.sh b/scripts/alpine36/vmware.sh index 19a2de5f0..570270331 100644 --- a/scripts/alpine36/vmware.sh +++ b/scripts/alpine36/vmware.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running inside VMWare. if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then @@ -12,11 +38,11 @@ fi printf "Installing the VMWare Tools.\n" # Update the APK cache. -apk update +retry apk update # Install the Open VMWare Tools. -apk add perl build-base mkinitfs util-linux linux-pam linux-headers -apk add open-vm-tools open-vm-tools-dev +retry apk add perl build-base mkinitfs util-linux linux-pam linux-headers +retry apk add open-vm-tools open-vm-tools-dev # Autostart the open-vm-tools. rc-update add open-vm-tools default && rc-service open-vm-tools start @@ -45,7 +71,7 @@ KERNEL=="vsock", MODE="0666" EOF # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine37/apk.sh b/scripts/alpine37/apk.sh index 7baaa8851..027f5e883 100644 --- a/scripts/alpine37/apk.sh +++ b/scripts/alpine37/apk.sh @@ -1,15 +1,41 @@ #!/bin/sh -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure the main repository mirrors. printf "https://dl-4.alpinelinux.org/alpine/v3.7/main\n" > /etc/apk/repositories printf "https://dl-4.alpinelinux.org/alpine/v3.7/community\n" >> /etc/apk/repositories # Update the package list and then upgrade. -apk update --no-cache -apk update upgrade +retry apk update --no-cache +retry apk update upgrade # Install various basic system utilities. -apk add vim man man-pages bash gawk wget curl sudo lsof file grep readline mdocml sysstat lm_sensors findutils sysfsutils dmidecode libmagic sqlite-libs ca-certificates ncurses-libs ncurses-terminfo ncurses-terminfo-base psmisc +retry apk add vim man man-pages bash gawk wget curl sudo lsof file grep readline mdocml sysstat lm_sensors findutils sysfsutils dmidecode libmagic sqlite-libs ca-certificates ncurses-libs ncurses-terminfo ncurses-terminfo-base psmisc # Setup vim as the default editor. printf "alias vi=vim\n" >> /etc/profile.d/vim.sh diff --git a/scripts/alpine37/cache.sh b/scripts/alpine37/cache.sh index 856ed3ca5..c0fc8a4cb 100644 --- a/scripts/alpine37/cache.sh +++ b/scripts/alpine37/cache.sh @@ -1,7 +1,33 @@ #!/bin/sh -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Setup the apk cache. -setup-apkcache /var/cache/apk +retry setup-apkcache /var/cache/apk # Delete unnecessary packages, and download any missing packages. -apk cache -v sync +retry apk cache -v sync diff --git a/scripts/alpine37/gcc.sh b/scripts/alpine37/gcc.sh index c2cf47696..fed8e638c 100644 --- a/scripts/alpine37/gcc.sh +++ b/scripts/alpine37/gcc.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + VERSION="4.9.4" LIBITM=true @@ -23,12 +49,9 @@ export CPLUS_INCLUDE_PATH="/usr/glibc-compat/include/" export OBJC_INCLUDE_PATH="/usr/glibc-compat/include/" # export GCC_EXEC_PREFIX="/usr/glibc-compat/" -# Download the gcc packages. -apk add wget ca-certificates - # Compilation prerequisites. -apk add bash build-base m4 gcc g++ gcc-gnat libtool flex bison make glib expat automake autoconf \ -mpc1 mpc1-doc mpc1-dev nasm nasm-doc mpfr3 mpfr3-doc mpfr-dev gmp gmp-dev gmp-doc \ +retry apk add bash build-base m4 curl gcc g++ gcc-gnat libtool flex bison make glib expat automake autoconf \ +mpc1 mpc1-doc mpc1-dev nasm nasm-doc mpfr3 mpfr3-doc mpfr-dev gmp gmp-dev gmp-doc ca-certificates \ gawk sed texinfo patchutils grep binutils binutils-libs binutils-dev binutils-gold \ zlib zlib-dev gzip bzip2 tar gettext gettext-lang linux-headers \ gettext-asprintf gperf expect expect-dev tcl tcl-dev ttf-dejavu zip paxmark \ @@ -44,7 +67,7 @@ ldconfig # lbzip2 biblatex dejagnu gettext-static # Download the tarball. -wget --quiet https://mirrors.kernel.org/gnu/gcc/gcc-${VERSION}/gcc-${VERSION}.tar.gz gcc-${VERSION}.tar.gz +retry curl --silent --show-error --location --output gcc-${VERSION}.tar.gz https://mirrors.kernel.org/gnu/gcc/gcc-${VERSION}/gcc-${VERSION}.tar.gz # Uncompress the tarball. tar xzf gcc-${VERSION}.tar.gz && cd gcc-${VERSION} diff --git a/scripts/alpine37/glibc.sh b/scripts/alpine37/glibc.sh index f27fecb23..b6a74a278 100644 --- a/scripts/alpine37/glibc.sh +++ b/scripts/alpine37/glibc.sh @@ -1,23 +1,49 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Download the glibc Alpine packages. -apk --no-cache add wget ca-certificates -wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub +retry apk --no-cache add wget ca-certificates +retry wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub # Unstable. -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-bin-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-dev-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-i18n-2.26-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-bin-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-dev-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-i18n-2.29-r0.apk # Ensure the compatability library has been removed, to avoid conflicts. -apk del libc6-compat +retry apk del libc6-compat # Install glibc. -apk add glibc-2.26-r0.apk glibc-bin-2.26-r0.apk glibc-dev-2.26-r0.apk glibc-i18n-2.26-r0.apk +retry apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-dev-2.29-r0.apk glibc-i18n-2.29-r0.apk # Cleanup the apk files. -rm -f glibc-2.26-r0.apk glibc-bin-2.26-r0.apk glibc-dev-2.26-r0.apk glibc-i18n-2.26-r0.apk +rm -f glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-dev-2.29-r0.apk glibc-i18n-2.29-r0.apk # Generate the English/USA locale. /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8 diff --git a/scripts/alpine37/magma.sh b/scripts/alpine37/magma.sh index 30f701f7a..5907c792c 100644 --- a/scripts/alpine37/magma.sh +++ b/scripts/alpine37/magma.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The packages needed to compile magma. -apk add bash m4 gcc g++ gcc-gnat gdb gdbm grep perl make glib expat \ +retry apk add bash m4 gcc g++ gcc-gnat gdb gdbm grep perl make glib expat \ automake autoconf valgrind binutils binutils-libs gmp isl mpc1 python2 pkgconf \ mpfr3 libtool flex bison cmake ca-certificates patch ncurses-doc ncurses-libs \ ncurses-dev ncurses-static ncurses ncurses-terminfo-base ncurses-terminfo \ @@ -25,13 +51,13 @@ libxml2-dev llvm-dev isl-dev clang-dev llvm-dev boost-dev libxslt-dev \ gcc-doc m4-doc make-doc patch-doc # Need to retrieve the source code. -apk add git git-doc git-perl popt rsync wget +retry apk add git git-doc git-perl popt rsync wget # Needed to run the watcher and status scripts. -apk add sysstat inotify-tools lm_sensors sysfsutils +retry apk add sysstat inotify-tools lm_sensors sysfsutils # Needed to run the stacie script. -apk add py2-crypto py2-cryptography py2-cparser py2-cffi py2-idna py2-asn1 py2-six py2-ipaddress +retry apk add py2-crypto py2-cryptography py2-cparser py2-cffi py2-idna py2-asn1 py2-six py2-ipaddress # Setup the the box. This runs as root if [ -d /home/vagrant/ ]; then @@ -62,6 +88,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -113,7 +146,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/alpine37/mariadb.sh b/scripts/alpine37/mariadb.sh index 31a8dd335..7ab936938 100644 --- a/scripts/alpine37/mariadb.sh +++ b/scripts/alpine37/mariadb.sh @@ -1,7 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The mysql client and related utilities. -apk add mariadb mariadb-client mariadb-common libaio libgcc libstdc++ +retry apk add mariadb mariadb-client mariadb-common libaio libgcc libstdc++ + +# Delete these lines, if they exist, and explicitly configure the data directory. +sed -i "/datadir/d" /etc/mysql/my.cnf +sed -i "/innodb_data_home_dir/d" /etc/mysql/my.cnf +sed -i '/\[mysqld\].*/a \datadir\=\/var\/lib\/mysql\/\ninnodb_data_home_dir\=\/var\/lib\/mysql\/\n\end' /etc/mysql/my.cnf # Create the initial database. /etc/init.d/mariadb setup diff --git a/scripts/alpine37/memcached.sh b/scripts/alpine37/memcached.sh index 409af75e1..5afcc93b8 100644 --- a/scripts/alpine37/memcached.sh +++ b/scripts/alpine37/memcached.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The memcached server. -apk add memcached libevent +retry apk add memcached libevent # Setup memcached to start automatically. rc-update add memcached default && rc-service memcached start diff --git a/scripts/alpine37/parallels.sh b/scripts/alpine37/parallels.sh index 9b5339054..024ed8725 100644 --- a/scripts/alpine37/parallels.sh +++ b/scripts/alpine37/parallels.sh @@ -1,7 +1,33 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/alpine37/postfix.sh b/scripts/alpine37/postfix.sh index 2a7d4d62c..d3ca325fe 100644 --- a/scripts/alpine37/postfix.sh +++ b/scripts/alpine37/postfix.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The postfix server for message relays. -apk add postfix db libsasl +retry apk add postfix db libsasl # Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf diff --git a/scripts/alpine37/qemu.sh b/scripts/alpine37/qemu.sh index 4d4e6d085..fc9985b21 100644 --- a/scripts/alpine37/qemu.sh +++ b/scripts/alpine37/qemu.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop QEMU. if [[ `dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then @@ -12,7 +38,7 @@ fi printf "Installing the QEMU Tools.\n" # Install the QEMU guest tools. -apk add qemu-guest-agent +retry apk add qemu-guest-agent # Update the default agent path. printf "\nGA_METHOD=\"virtio-serial\"\nGA_PATH=\"/dev/vport0p1\"\n" >> /etc/conf.d/qemu-guest-agent @@ -21,7 +47,7 @@ printf "\nGA_METHOD=\"virtio-serial\"\nGA_PATH=\"/dev/vport0p1\"\n" >> /etc/conf rc-update add qemu-guest-agent default && rc-service qemu-guest-agent start # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine37/virtualbox.sh b/scripts/alpine37/virtualbox.sh index 49ba0692b..bad9d077d 100644 --- a/scripts/alpine37/virtualbox.sh +++ b/scripts/alpine37/virtualbox.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop VirtualBox. if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then @@ -18,10 +44,10 @@ printf "@testing http://nl.alpinelinux.org/alpine/edge/testing\n" >> /etc/apk/re printf "@edge http://nl.alpinelinux.org/alpine/edge/main/\n" >> /etc/apk/repositories # Update the APK cache. -apk update --no-cache +retry apk update --no-cache # Install the VirtualBox kernel modules for guest services. -apk add linux-hardened@edge virtualbox-additions-hardened@testing +retry apk add linux-hardened@edge virtualbox-additions-hardened@testing # Autoload the virtualbox kernel modules. echo vboxpci >> /etc/modules @@ -45,7 +71,7 @@ rm -rf /root/VBoxVersion.txt rm -rf /root/VBoxGuestAdditions.iso # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine37/vmware.sh b/scripts/alpine37/vmware.sh index 19a2de5f0..570270331 100644 --- a/scripts/alpine37/vmware.sh +++ b/scripts/alpine37/vmware.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running inside VMWare. if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then @@ -12,11 +38,11 @@ fi printf "Installing the VMWare Tools.\n" # Update the APK cache. -apk update +retry apk update # Install the Open VMWare Tools. -apk add perl build-base mkinitfs util-linux linux-pam linux-headers -apk add open-vm-tools open-vm-tools-dev +retry apk add perl build-base mkinitfs util-linux linux-pam linux-headers +retry apk add open-vm-tools open-vm-tools-dev # Autostart the open-vm-tools. rc-update add open-vm-tools default && rc-service open-vm-tools start @@ -45,7 +71,7 @@ KERNEL=="vsock", MODE="0666" EOF # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine38/apk.sh b/scripts/alpine38/apk.sh index 7066cb309..c2b7a1cf7 100644 --- a/scripts/alpine38/apk.sh +++ b/scripts/alpine38/apk.sh @@ -1,15 +1,41 @@ #!/bin/sh -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure the main repository mirrors. printf "https://dl-4.alpinelinux.org/alpine/v3.8/main\n" > /etc/apk/repositories printf "https://dl-4.alpinelinux.org/alpine/v3.8/community\n" >> /etc/apk/repositories # Update the package list and then upgrade. -apk update --no-cache -apk update upgrade +retry apk update --no-cache +retry apk update upgrade # Install various basic system utilities. -apk add vim man man-pages bash gawk wget curl sudo lsof file grep readline mdocml sysstat lm_sensors findutils sysfsutils dmidecode libmagic sqlite-libs ca-certificates ncurses-libs ncurses-terminfo ncurses-terminfo-base psmisc +retry apk add vim man man-pages bash gawk wget curl sudo lsof file grep readline mdocml sysstat lm_sensors findutils sysfsutils dmidecode libmagic sqlite-libs ca-certificates ncurses-libs ncurses-terminfo ncurses-terminfo-base psmisc # Setup vim as the default editor. printf "alias vi=vim\n" >> /etc/profile.d/vim.sh diff --git a/scripts/alpine38/cache.sh b/scripts/alpine38/cache.sh index 856ed3ca5..c0fc8a4cb 100644 --- a/scripts/alpine38/cache.sh +++ b/scripts/alpine38/cache.sh @@ -1,7 +1,33 @@ #!/bin/sh -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Setup the apk cache. -setup-apkcache /var/cache/apk +retry setup-apkcache /var/cache/apk # Delete unnecessary packages, and download any missing packages. -apk cache -v sync +retry apk cache -v sync diff --git a/scripts/alpine38/gcc.sh b/scripts/alpine38/gcc.sh index c2cf47696..fed8e638c 100644 --- a/scripts/alpine38/gcc.sh +++ b/scripts/alpine38/gcc.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + VERSION="4.9.4" LIBITM=true @@ -23,12 +49,9 @@ export CPLUS_INCLUDE_PATH="/usr/glibc-compat/include/" export OBJC_INCLUDE_PATH="/usr/glibc-compat/include/" # export GCC_EXEC_PREFIX="/usr/glibc-compat/" -# Download the gcc packages. -apk add wget ca-certificates - # Compilation prerequisites. -apk add bash build-base m4 gcc g++ gcc-gnat libtool flex bison make glib expat automake autoconf \ -mpc1 mpc1-doc mpc1-dev nasm nasm-doc mpfr3 mpfr3-doc mpfr-dev gmp gmp-dev gmp-doc \ +retry apk add bash build-base m4 curl gcc g++ gcc-gnat libtool flex bison make glib expat automake autoconf \ +mpc1 mpc1-doc mpc1-dev nasm nasm-doc mpfr3 mpfr3-doc mpfr-dev gmp gmp-dev gmp-doc ca-certificates \ gawk sed texinfo patchutils grep binutils binutils-libs binutils-dev binutils-gold \ zlib zlib-dev gzip bzip2 tar gettext gettext-lang linux-headers \ gettext-asprintf gperf expect expect-dev tcl tcl-dev ttf-dejavu zip paxmark \ @@ -44,7 +67,7 @@ ldconfig # lbzip2 biblatex dejagnu gettext-static # Download the tarball. -wget --quiet https://mirrors.kernel.org/gnu/gcc/gcc-${VERSION}/gcc-${VERSION}.tar.gz gcc-${VERSION}.tar.gz +retry curl --silent --show-error --location --output gcc-${VERSION}.tar.gz https://mirrors.kernel.org/gnu/gcc/gcc-${VERSION}/gcc-${VERSION}.tar.gz # Uncompress the tarball. tar xzf gcc-${VERSION}.tar.gz && cd gcc-${VERSION} diff --git a/scripts/alpine38/glibc.sh b/scripts/alpine38/glibc.sh index f27fecb23..b6a74a278 100644 --- a/scripts/alpine38/glibc.sh +++ b/scripts/alpine38/glibc.sh @@ -1,23 +1,49 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Download the glibc Alpine packages. -apk --no-cache add wget ca-certificates -wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub +retry apk --no-cache add wget ca-certificates +retry wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub # Unstable. -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-bin-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-dev-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-i18n-2.26-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-bin-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-dev-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-i18n-2.29-r0.apk # Ensure the compatability library has been removed, to avoid conflicts. -apk del libc6-compat +retry apk del libc6-compat # Install glibc. -apk add glibc-2.26-r0.apk glibc-bin-2.26-r0.apk glibc-dev-2.26-r0.apk glibc-i18n-2.26-r0.apk +retry apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-dev-2.29-r0.apk glibc-i18n-2.29-r0.apk # Cleanup the apk files. -rm -f glibc-2.26-r0.apk glibc-bin-2.26-r0.apk glibc-dev-2.26-r0.apk glibc-i18n-2.26-r0.apk +rm -f glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-dev-2.29-r0.apk glibc-i18n-2.29-r0.apk # Generate the English/USA locale. /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8 diff --git a/scripts/alpine38/magma.sh b/scripts/alpine38/magma.sh index ecc151c2d..727979a8a 100644 --- a/scripts/alpine38/magma.sh +++ b/scripts/alpine38/magma.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The packages needed to compile magma. -apk add bash m4 gcc g++ gcc-gnat gdb gdbm grep perl make glib expat \ +retry apk add bash m4 gcc g++ gcc-gnat gdb gdbm grep perl make glib expat \ automake autoconf valgrind binutils binutils-libs gmp isl mpc1 python2 pkgconf \ mpfr3 libtool flex bison cmake ca-certificates patch ncurses-doc ncurses-libs \ ncurses-dev ncurses-static ncurses ncurses-terminfo-base ncurses-terminfo \ @@ -25,13 +51,13 @@ libxml2-dev llvm-dev isl-dev clang-dev llvm-dev boost-dev libxslt-dev \ gcc-doc m4-doc make-doc patch-doc # Need to retrieve the source code. -apk add git git-doc git-perl popt rsync wget +retry apk add git git-doc git-perl popt rsync wget # Needed to run the watcher and status scripts. -apk add sysstat inotify-tools lm_sensors sysfsutils +retry apk add sysstat inotify-tools lm_sensors sysfsutils # Needed to run the stacie script. -apk add py2-crypto py2-cryptography py2-cparser py2-cffi py2-idna py2-asn1 py2-six py2-ipaddress +retry apk add py2-crypto py2-cryptography py2-cparser py2-cffi py2-idna py2-asn1 py2-six py2-ipaddress # Setup the the box. This runs as root if [ -d /home/vagrant/ ]; then @@ -65,6 +91,13 @@ fi # Temporary [hopefully] workaround to avoid [yet another] bug in NSS. export NSS_DISABLE_HW_AES=1 +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -113,7 +146,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/alpine38/mariadb.sh b/scripts/alpine38/mariadb.sh index 31a8dd335..7ab936938 100644 --- a/scripts/alpine38/mariadb.sh +++ b/scripts/alpine38/mariadb.sh @@ -1,7 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The mysql client and related utilities. -apk add mariadb mariadb-client mariadb-common libaio libgcc libstdc++ +retry apk add mariadb mariadb-client mariadb-common libaio libgcc libstdc++ + +# Delete these lines, if they exist, and explicitly configure the data directory. +sed -i "/datadir/d" /etc/mysql/my.cnf +sed -i "/innodb_data_home_dir/d" /etc/mysql/my.cnf +sed -i '/\[mysqld\].*/a \datadir\=\/var\/lib\/mysql\/\ninnodb_data_home_dir\=\/var\/lib\/mysql\/\n\end' /etc/mysql/my.cnf # Create the initial database. /etc/init.d/mariadb setup diff --git a/scripts/alpine38/memcached.sh b/scripts/alpine38/memcached.sh index 409af75e1..5afcc93b8 100644 --- a/scripts/alpine38/memcached.sh +++ b/scripts/alpine38/memcached.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The memcached server. -apk add memcached libevent +retry apk add memcached libevent # Setup memcached to start automatically. rc-update add memcached default && rc-service memcached start diff --git a/scripts/alpine38/parallels.sh b/scripts/alpine38/parallels.sh index 9b5339054..024ed8725 100644 --- a/scripts/alpine38/parallels.sh +++ b/scripts/alpine38/parallels.sh @@ -1,7 +1,33 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/alpine38/postfix.sh b/scripts/alpine38/postfix.sh index 2a7d4d62c..d3ca325fe 100644 --- a/scripts/alpine38/postfix.sh +++ b/scripts/alpine38/postfix.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The postfix server for message relays. -apk add postfix db libsasl +retry apk add postfix db libsasl # Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf diff --git a/scripts/alpine38/qemu.sh b/scripts/alpine38/qemu.sh index 4d4e6d085..fc9985b21 100644 --- a/scripts/alpine38/qemu.sh +++ b/scripts/alpine38/qemu.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop QEMU. if [[ `dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then @@ -12,7 +38,7 @@ fi printf "Installing the QEMU Tools.\n" # Install the QEMU guest tools. -apk add qemu-guest-agent +retry apk add qemu-guest-agent # Update the default agent path. printf "\nGA_METHOD=\"virtio-serial\"\nGA_PATH=\"/dev/vport0p1\"\n" >> /etc/conf.d/qemu-guest-agent @@ -21,7 +47,7 @@ printf "\nGA_METHOD=\"virtio-serial\"\nGA_PATH=\"/dev/vport0p1\"\n" >> /etc/conf rc-update add qemu-guest-agent default && rc-service qemu-guest-agent start # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine38/virtualbox.sh b/scripts/alpine38/virtualbox.sh index 49ba0692b..bad9d077d 100644 --- a/scripts/alpine38/virtualbox.sh +++ b/scripts/alpine38/virtualbox.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop VirtualBox. if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then @@ -18,10 +44,10 @@ printf "@testing http://nl.alpinelinux.org/alpine/edge/testing\n" >> /etc/apk/re printf "@edge http://nl.alpinelinux.org/alpine/edge/main/\n" >> /etc/apk/repositories # Update the APK cache. -apk update --no-cache +retry apk update --no-cache # Install the VirtualBox kernel modules for guest services. -apk add linux-hardened@edge virtualbox-additions-hardened@testing +retry apk add linux-hardened@edge virtualbox-additions-hardened@testing # Autoload the virtualbox kernel modules. echo vboxpci >> /etc/modules @@ -45,7 +71,7 @@ rm -rf /root/VBoxVersion.txt rm -rf /root/VBoxGuestAdditions.iso # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine38/vmware.sh b/scripts/alpine38/vmware.sh index 19a2de5f0..570270331 100644 --- a/scripts/alpine38/vmware.sh +++ b/scripts/alpine38/vmware.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running inside VMWare. if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then @@ -12,11 +38,11 @@ fi printf "Installing the VMWare Tools.\n" # Update the APK cache. -apk update +retry apk update # Install the Open VMWare Tools. -apk add perl build-base mkinitfs util-linux linux-pam linux-headers -apk add open-vm-tools open-vm-tools-dev +retry apk add perl build-base mkinitfs util-linux linux-pam linux-headers +retry apk add open-vm-tools open-vm-tools-dev # Autostart the open-vm-tools. rc-update add open-vm-tools default && rc-service open-vm-tools start @@ -45,7 +71,7 @@ KERNEL=="vsock", MODE="0666" EOF # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine39/apk.sh b/scripts/alpine39/apk.sh index a715ab01e..c23a558dc 100644 --- a/scripts/alpine39/apk.sh +++ b/scripts/alpine39/apk.sh @@ -1,15 +1,41 @@ #!/bin/sh -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure the main repository mirrors. printf "https://dl-4.alpinelinux.org/alpine/v3.9/main\n" > /etc/apk/repositories printf "https://dl-4.alpinelinux.org/alpine/v3.9/community\n" >> /etc/apk/repositories # Update the package list and then upgrade. -apk update --no-cache -apk update upgrade +retry apk update --no-cache +retry apk update upgrade # Install various basic system utilities. -apk add vim man man-pages bash gawk wget curl sudo lsof file grep readline mdocml sysstat lm_sensors findutils sysfsutils dmidecode libmagic sqlite-libs ca-certificates ncurses-libs ncurses-terminfo ncurses-terminfo-base psmisc +retry apk add vim man man-pages bash gawk wget curl sudo lsof file grep readline mdocml sysstat lm_sensors findutils sysfsutils dmidecode libmagic sqlite-libs ca-certificates ncurses-libs ncurses-terminfo ncurses-terminfo-base psmisc # Setup vim as the default editor. printf "alias vi=vim\n" >> /etc/profile.d/vim.sh diff --git a/scripts/alpine39/cache.sh b/scripts/alpine39/cache.sh index 856ed3ca5..c0fc8a4cb 100644 --- a/scripts/alpine39/cache.sh +++ b/scripts/alpine39/cache.sh @@ -1,7 +1,33 @@ #!/bin/sh -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Setup the apk cache. -setup-apkcache /var/cache/apk +retry setup-apkcache /var/cache/apk # Delete unnecessary packages, and download any missing packages. -apk cache -v sync +retry apk cache -v sync diff --git a/scripts/alpine39/gcc.sh b/scripts/alpine39/gcc.sh index c2cf47696..fed8e638c 100644 --- a/scripts/alpine39/gcc.sh +++ b/scripts/alpine39/gcc.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + VERSION="4.9.4" LIBITM=true @@ -23,12 +49,9 @@ export CPLUS_INCLUDE_PATH="/usr/glibc-compat/include/" export OBJC_INCLUDE_PATH="/usr/glibc-compat/include/" # export GCC_EXEC_PREFIX="/usr/glibc-compat/" -# Download the gcc packages. -apk add wget ca-certificates - # Compilation prerequisites. -apk add bash build-base m4 gcc g++ gcc-gnat libtool flex bison make glib expat automake autoconf \ -mpc1 mpc1-doc mpc1-dev nasm nasm-doc mpfr3 mpfr3-doc mpfr-dev gmp gmp-dev gmp-doc \ +retry apk add bash build-base m4 curl gcc g++ gcc-gnat libtool flex bison make glib expat automake autoconf \ +mpc1 mpc1-doc mpc1-dev nasm nasm-doc mpfr3 mpfr3-doc mpfr-dev gmp gmp-dev gmp-doc ca-certificates \ gawk sed texinfo patchutils grep binutils binutils-libs binutils-dev binutils-gold \ zlib zlib-dev gzip bzip2 tar gettext gettext-lang linux-headers \ gettext-asprintf gperf expect expect-dev tcl tcl-dev ttf-dejavu zip paxmark \ @@ -44,7 +67,7 @@ ldconfig # lbzip2 biblatex dejagnu gettext-static # Download the tarball. -wget --quiet https://mirrors.kernel.org/gnu/gcc/gcc-${VERSION}/gcc-${VERSION}.tar.gz gcc-${VERSION}.tar.gz +retry curl --silent --show-error --location --output gcc-${VERSION}.tar.gz https://mirrors.kernel.org/gnu/gcc/gcc-${VERSION}/gcc-${VERSION}.tar.gz # Uncompress the tarball. tar xzf gcc-${VERSION}.tar.gz && cd gcc-${VERSION} diff --git a/scripts/alpine39/glibc.sh b/scripts/alpine39/glibc.sh index f27fecb23..b6a74a278 100644 --- a/scripts/alpine39/glibc.sh +++ b/scripts/alpine39/glibc.sh @@ -1,23 +1,49 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Download the glibc Alpine packages. -apk --no-cache add wget ca-certificates -wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub +retry apk --no-cache add wget ca-certificates +retry wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub # Unstable. -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-bin-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-dev-2.26-r0.apk -wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.26-r0/glibc-i18n-2.26-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-bin-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-dev-2.29-r0.apk +retry wget --quiet https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-i18n-2.29-r0.apk # Ensure the compatability library has been removed, to avoid conflicts. -apk del libc6-compat +retry apk del libc6-compat # Install glibc. -apk add glibc-2.26-r0.apk glibc-bin-2.26-r0.apk glibc-dev-2.26-r0.apk glibc-i18n-2.26-r0.apk +retry apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-dev-2.29-r0.apk glibc-i18n-2.29-r0.apk # Cleanup the apk files. -rm -f glibc-2.26-r0.apk glibc-bin-2.26-r0.apk glibc-dev-2.26-r0.apk glibc-i18n-2.26-r0.apk +rm -f glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-dev-2.29-r0.apk glibc-i18n-2.29-r0.apk # Generate the English/USA locale. /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8 diff --git a/scripts/alpine39/magma.sh b/scripts/alpine39/magma.sh index ecc151c2d..727979a8a 100644 --- a/scripts/alpine39/magma.sh +++ b/scripts/alpine39/magma.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The packages needed to compile magma. -apk add bash m4 gcc g++ gcc-gnat gdb gdbm grep perl make glib expat \ +retry apk add bash m4 gcc g++ gcc-gnat gdb gdbm grep perl make glib expat \ automake autoconf valgrind binutils binutils-libs gmp isl mpc1 python2 pkgconf \ mpfr3 libtool flex bison cmake ca-certificates patch ncurses-doc ncurses-libs \ ncurses-dev ncurses-static ncurses ncurses-terminfo-base ncurses-terminfo \ @@ -25,13 +51,13 @@ libxml2-dev llvm-dev isl-dev clang-dev llvm-dev boost-dev libxslt-dev \ gcc-doc m4-doc make-doc patch-doc # Need to retrieve the source code. -apk add git git-doc git-perl popt rsync wget +retry apk add git git-doc git-perl popt rsync wget # Needed to run the watcher and status scripts. -apk add sysstat inotify-tools lm_sensors sysfsutils +retry apk add sysstat inotify-tools lm_sensors sysfsutils # Needed to run the stacie script. -apk add py2-crypto py2-cryptography py2-cparser py2-cffi py2-idna py2-asn1 py2-six py2-ipaddress +retry apk add py2-crypto py2-cryptography py2-cparser py2-cffi py2-idna py2-asn1 py2-six py2-ipaddress # Setup the the box. This runs as root if [ -d /home/vagrant/ ]; then @@ -65,6 +91,13 @@ fi # Temporary [hopefully] workaround to avoid [yet another] bug in NSS. export NSS_DISABLE_HW_AES=1 +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -113,7 +146,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/alpine39/mariadb.sh b/scripts/alpine39/mariadb.sh index 31a8dd335..7ab936938 100644 --- a/scripts/alpine39/mariadb.sh +++ b/scripts/alpine39/mariadb.sh @@ -1,7 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The mysql client and related utilities. -apk add mariadb mariadb-client mariadb-common libaio libgcc libstdc++ +retry apk add mariadb mariadb-client mariadb-common libaio libgcc libstdc++ + +# Delete these lines, if they exist, and explicitly configure the data directory. +sed -i "/datadir/d" /etc/mysql/my.cnf +sed -i "/innodb_data_home_dir/d" /etc/mysql/my.cnf +sed -i '/\[mysqld\].*/a \datadir\=\/var\/lib\/mysql\/\ninnodb_data_home_dir\=\/var\/lib\/mysql\/\n\end' /etc/mysql/my.cnf # Create the initial database. /etc/init.d/mariadb setup diff --git a/scripts/alpine39/memcached.sh b/scripts/alpine39/memcached.sh index 409af75e1..5afcc93b8 100644 --- a/scripts/alpine39/memcached.sh +++ b/scripts/alpine39/memcached.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The memcached server. -apk add memcached libevent +retry apk add memcached libevent # Setup memcached to start automatically. rc-update add memcached default && rc-service memcached start diff --git a/scripts/alpine39/parallels.sh b/scripts/alpine39/parallels.sh index 9b5339054..024ed8725 100644 --- a/scripts/alpine39/parallels.sh +++ b/scripts/alpine39/parallels.sh @@ -1,7 +1,33 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/alpine39/postfix.sh b/scripts/alpine39/postfix.sh index 2a7d4d62c..d3ca325fe 100644 --- a/scripts/alpine39/postfix.sh +++ b/scripts/alpine39/postfix.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The postfix server for message relays. -apk add postfix db libsasl +retry apk add postfix db libsasl # Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf diff --git a/scripts/alpine39/qemu.sh b/scripts/alpine39/qemu.sh index 4d4e6d085..fc9985b21 100644 --- a/scripts/alpine39/qemu.sh +++ b/scripts/alpine39/qemu.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop QEMU. if [[ `dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then @@ -12,7 +38,7 @@ fi printf "Installing the QEMU Tools.\n" # Install the QEMU guest tools. -apk add qemu-guest-agent +retry apk add qemu-guest-agent # Update the default agent path. printf "\nGA_METHOD=\"virtio-serial\"\nGA_PATH=\"/dev/vport0p1\"\n" >> /etc/conf.d/qemu-guest-agent @@ -21,7 +47,7 @@ printf "\nGA_METHOD=\"virtio-serial\"\nGA_PATH=\"/dev/vport0p1\"\n" >> /etc/conf rc-update add qemu-guest-agent default && rc-service qemu-guest-agent start # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine39/sshd.sh b/scripts/alpine39/sshd.sh index 19920651d..f6dbb8b77 100644 --- a/scripts/alpine39/sshd.sh +++ b/scripts/alpine39/sshd.sh @@ -5,3 +5,6 @@ sed -i "/^#UseDNS.*/d" /etc/ssh/sshd_config sed -i "/^# UseDNS.*/d" /etc/ssh/sshd_config printf "\nUseDNS no\n" >> /etc/ssh/sshd_config + +sed -i '/AllowTcpForwarding/d' /etc/ssh/sshd_config +printf "\nAllowTcpForwarding yes\n" >> /etc/ssh/sshd_config \ No newline at end of file diff --git a/scripts/alpine39/virtualbox.sh b/scripts/alpine39/virtualbox.sh index 49ba0692b..bad9d077d 100644 --- a/scripts/alpine39/virtualbox.sh +++ b/scripts/alpine39/virtualbox.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running atop VirtualBox. if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then @@ -18,10 +44,10 @@ printf "@testing http://nl.alpinelinux.org/alpine/edge/testing\n" >> /etc/apk/re printf "@edge http://nl.alpinelinux.org/alpine/edge/main/\n" >> /etc/apk/repositories # Update the APK cache. -apk update --no-cache +retry apk update --no-cache # Install the VirtualBox kernel modules for guest services. -apk add linux-hardened@edge virtualbox-additions-hardened@testing +retry apk add linux-hardened@edge virtualbox-additions-hardened@testing # Autoload the virtualbox kernel modules. echo vboxpci >> /etc/modules @@ -45,7 +71,7 @@ rm -rf /root/VBoxVersion.txt rm -rf /root/VBoxGuestAdditions.iso # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/alpine39/vmware.sh b/scripts/alpine39/vmware.sh index 19a2de5f0..570270331 100644 --- a/scripts/alpine39/vmware.sh +++ b/scripts/alpine39/vmware.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure dmidecode is available. -apk add dmidecode +retry apk add dmidecode # Bail if we are not running inside VMWare. if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then @@ -12,11 +38,11 @@ fi printf "Installing the VMWare Tools.\n" # Update the APK cache. -apk update +retry apk update # Install the Open VMWare Tools. -apk add perl build-base mkinitfs util-linux linux-pam linux-headers -apk add open-vm-tools open-vm-tools-dev +retry apk add perl build-base mkinitfs util-linux linux-pam linux-headers +retry apk add open-vm-tools open-vm-tools-dev # Autostart the open-vm-tools. rc-update add open-vm-tools default && rc-service open-vm-tools start @@ -45,7 +71,7 @@ KERNEL=="vsock", MODE="0666" EOF # Boosts the available entropy which allows magma to start faster. -apk add haveged +retry apk add haveged # Autostart the haveged daemon. rc-update add haveged default && rc-service haveged start diff --git a/scripts/arch/magma.sh b/scripts/arch/magma.sh index 1d88f2f2e..dea1078be 100644 --- a/scripts/arch/magma.sh +++ b/scripts/arch/magma.sh @@ -1,22 +1,48 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The packages needed to compile magma. -pacman --sync --noconfirm --refresh m4 gc gcc patch make cmake flex binutils bison valgrind libtool autoconf pkg-config gdb gdb-common ncurses mpfr jsoncpp guile guile2.0 shared-mime-info glibc libatomic_ops libmpc libuv libxml2 libbsd libarchive python python-appdirs python-extras python-fixtures python-mimeparse python-packaging python-pbr python-pyparsing python-pyrsistent python-setuptools python-six python-testtools python-subunit +retry pacman --sync --noconfirm --refresh m4 gc gcc patch make cmake flex binutils bison valgrind libtool autoconf pkg-config gdb gdb-common ncurses mpfr jsoncpp guile guile2.0 shared-mime-info glibc libatomic_ops libmpc libuv libxml2 libbsd libarchive python python-appdirs python-extras python-fixtures python-mimeparse python-packaging python-pbr python-pyparsing python-pyrsistent python-setuptools python-six python-testtools python-subunit # Need to retrieve the source code. -pacman --sync --noconfirm --refresh git perl-error +retry pacman --sync --noconfirm --refresh git perl-error # Needed to run the watcher and status scripts. -pacman --sync --noconfirm --refresh sysstat lm_sensors inotify-tools +retry pacman --sync --noconfirm --refresh sysstat lm_sensors inotify-tools # Needed to run the stacie script. -pacman --sync --noconfirm --refresh python-asn1crypto python-cffi python-idna python-ply python-pycparser python-crypto python-cryptography +retry pacman --sync --noconfirm --refresh python-asn1crypto python-cffi python-idna python-ply python-pycparser python-crypto python-cryptography # Install MaraDB. -pacman --sync --noconfirm --refresh mariadb +retry pacman --sync --noconfirm --refresh mariadb # Append the SQL mode to the config file. -printf "\n\n[mysqld]\nsql-mode=allow_invalid_dates\n" >> /etc/mysql/my.cnf +printf "\n\n[mysqld]\nsql-mode=allow_invalid_dates\n" >> /etc/my.cnf # Setup the the box. This runs as root if [ -d /home/vagrant/ ]; then @@ -45,6 +71,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -93,7 +126,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/arch/mariadb.sh b/scripts/arch/mariadb.sh index c9d04dc19..f6aa06f37 100644 --- a/scripts/arch/mariadb.sh +++ b/scripts/arch/mariadb.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Install mariadb and its dependencies. -pacman --sync --noconfirm --refresh mariadb mariadb-clients libmariadbclient boost-libs jemalloc +retry pacman --sync --noconfirm --refresh mariadb mariadb-clients libmariadbclient boost-libs jemalloc # Create the mariadb auth database. mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql diff --git a/scripts/arch/memcached.sh b/scripts/arch/memcached.sh index 3f1c369e6..95344a3b0 100644 --- a/scripts/arch/memcached.sh +++ b/scripts/arch/memcached.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Update the package database. -pacman --sync --noconfirm --refresh memcached libevent +retry pacman --sync --noconfirm --refresh memcached libevent # Setup memcached to start automatically. systemctl start memcached.service && systemctl enable memcached.service diff --git a/scripts/arch/pacman.sh b/scripts/arch/pacman.sh index abd65ddda..d2e5da5e6 100644 --- a/scripts/arch/pacman.sh +++ b/scripts/arch/pacman.sh @@ -1,13 +1,39 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Update the package database. -pacman --sync --noconfirm --refresh +retry pacman --sync --noconfirm --refresh # Update the system packages. -pacman --sync --noconfirm --refresh --sysupgrade +retry pacman --sync --noconfirm --refresh --sysupgrade # Useful tools. -pacman --sync --noconfirm --refresh vim curl wget sysstat lsof psmisc man-db mlocate net-tools lm_sensors vim-runtime +retry pacman --sync --noconfirm --refresh vim curl wget sysstat lsof psmisc man-db mlocate net-tools lm_sensors vim-runtime # Start the services we just added so the system will track its own performance. systemctl enable sysstat.service && systemctl start sysstat.service diff --git a/scripts/arch/parallels.sh b/scripts/arch/parallels.sh index a0df00776..65612ae6c 100644 --- a/scripts/arch/parallels.sh +++ b/scripts/arch/parallels.sh @@ -1,7 +1,33 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. -pacman --sync --noconfirm dmidecode +retry pacman --sync --noconfirm dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/arch/postfix.sh b/scripts/arch/postfix.sh index e0a8f836b..e4ae61284 100644 --- a/scripts/arch/postfix.sh +++ b/scripts/arch/postfix.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Update the package database. -pacman --sync --noconfirm --refresh postfix libmariadbclient lzo postgresql-libs tinycdb +retry pacman --sync --noconfirm --refresh postfix libmariadbclient lzo postgresql-libs tinycdb # Update the system packages. # pacman --sync --noconfirm --refresh --sysupgrade diff --git a/scripts/arch/qemu.sh b/scripts/arch/qemu.sh index a951117d9..279550490 100644 --- a/scripts/arch/qemu.sh +++ b/scripts/arch/qemu.sh @@ -1,13 +1,39 @@ #!/bin/bash -pacman --sync --noconfirm dmidecode +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +retry pacman --sync --noconfirm dmidecode # Bail if we are not running atop QEMU. if [[ `dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then exit 0 fi -pacman --sync --noconfirm --refresh qemu-guest-agent +retry pacman --sync --noconfirm --refresh qemu-guest-agent systemctl enable qemu-ga.service systemctl start qemu-ga.service diff --git a/scripts/arch/virtualbox.sh b/scripts/arch/virtualbox.sh index cda6fcc36..3ae7cf6ff 100644 --- a/scripts/arch/virtualbox.sh +++ b/scripts/arch/virtualbox.sh @@ -1,13 +1,39 @@ #!/bin/bash -pacman --sync --noconfirm dmidecode +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +retry pacman --sync --noconfirm dmidecode # Bail if we are not running atop VirtualBox. if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then exit 0 fi -pacman --sync --noconfirm --refresh virtualbox-guest-modules-arch virtualbox-guest-utils-nox +retry pacman --sync --noconfirm --refresh virtualbox-guest-modules-arch virtualbox-guest-utils-nox systemctl enable vboxservice.service systemctl start vboxservice.service diff --git a/scripts/arch/vmware.sh b/scripts/arch/vmware.sh index 2e9305214..8b7a605b1 100644 --- a/scripts/arch/vmware.sh +++ b/scripts/arch/vmware.sh @@ -1,13 +1,39 @@ #!/bin/bash -pacman --sync --noconfirm dmidecode +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +retry pacman --sync --noconfirm dmidecode # Bail if we are not running inside VMWare. if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then exit 0 fi -pacman --sync --noconfirm --refresh open-vm-tools +retry pacman --sync --noconfirm --refresh open-vm-tools systemctl enable vmtoolsd.service systemctl enable vmware-vmblock-fuse.service diff --git a/scripts/centos6/base.sh b/scripts/centos6/base.sh index 12332cc07..e44af4618 100644 --- a/scripts/centos6/base.sh +++ b/scripts/centos6/base.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nbase configuration script failure...\n\n"; @@ -21,27 +47,27 @@ truncate --size=0 /etc/yum.repos.d/CentOS-Media.repo /etc/yum.repos.d/CentOS-Vau rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6; error # Update the base install first. -yum --assumeyes update; error +retry yum --assumeyes update; error # We'll want the EPEL repo installed. -yum --assumeyes --enablerepo=extras install deltarpm epel-release; error +retry yum --assumeyes --enablerepo=extras install deltarpm epel-release; error # Import the EPEL key. rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6; error # Install the basic packages we'd expect to find. -yum --assumeyes install deltarpm net-tools sudo dmidecode yum-utils man bash-completion man-pages vim-common vim-enhanced sysstat bind-utils jwhois wget dos2unix unix2dos lsof telnet net-tools coreutils grep gawk sed curl patch sysstat make cmake libarchive texinfo autoconf automake libtool gcc-c++ libstdc++-devel gcc cpp ncurses-devel glibc-devel glibc-headers kernel-headers psmisc; error +retry yum --assumeyes install deltarpm net-tools sudo dmidecode yum-utils man bash-completion man-pages vim-common vim-enhanced sysstat bind-utils jwhois wget dos2unix unix2dos lsof telnet net-tools coreutils grep gawk sed curl patch sysstat make cmake libarchive texinfo autoconf automake libtool gcc-c++ libstdc++-devel gcc cpp ncurses-devel glibc-devel glibc-headers kernel-headers psmisc; error # Run update a second time, just in case it failed the first time. Mirror timeoutes and cosmic rays # often interupt the the provisioning process. -yum --assumeyes --disablerepo=epel update; error +retry yum --assumeyes --disablerepo=epel update; error if [ -f /etc/yum.repos.d/CentOS-Vault.repo.rpmnew ]; then rm --force /etc/yum.repos.d/CentOS-Vault.repo.rpmnew fi # Configure pip in case anybody needs it. We do this seperately to make it easier to skip/remove. -yum --assumeyes install python-pip; error +retry yum --assumeyes install python-pip; error # Remove the spurious pip warning about an insecure urllib3 library. patch /usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py <<-EOF diff --git a/scripts/centos6/developer.sh b/scripts/centos6/developer.sh index 1cca2a832..98448f0ad 100644 --- a/scripts/centos6/developer.sh +++ b/scripts/centos6/developer.sh @@ -1,10 +1,36 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Install the the EPEL repository. -yum --assumeyes --enablerepo=extras install epel-release +retry yum --assumeyes --enablerepo=extras install epel-release # Install Developer Packages -yum --assumeyes install archivemount autoconf autofs automake cloog-ppl cmake cpp crypto-utils diffuse eclipse-mylyn-cdt eclipse-mylyn-pde eclipse-mylyn-trac eclipse-mylyn-webtasks eclipse-mylyn-wikitext eclipse-subclipse-graph ElectricFence expect file-devel finger ftp gcc gcc-c++ gcc-gnat gcc-java gcc-objc gcc-objc++ gd gdb-gdbserver geany gedit-plugins git glibc-devel glibc-headers glibc-utils gperf haveged httpd-devel httpd-manual imake inotify-tools iotop iptables-devel iptraf jwhois kernel-headers keyutils-libs-devel krb5-devel libarchive libbsd libbsd-devel libcom_err-devel libevent libevent-devel libevent-doc libevent-headers libffi-devel libgomp libmemcached libselinux-devel libsepol-devel libstdc++-devel libstdc++-docs libtool libuuid-devel libzip lm_sensors lm_sensors-devel lm_sensors-libs lslk m2crypto mc mcelog meld memcached memtest86+ mercurial mod_perl mod_ssl mpfr mysql mysql-bench mysql-connector-java mysql-server nasm ncurses-devel net-snmp net-snmp-devel net-snmp-libs net-snmp-perl net-snmp-python net-snmp-utils nmap numpy openssl-devel oprofile-gui oprofile-jit patch perf perl perl-DBD-MySQL perl-DBI perl-Error perl-Git perl-libs perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-Time-HiRes perl-version powertop ppl psutils python-crypto2.6 python-devel python-pip python-ply python-pycparser rsync screen setools-console setroubleshoot setroubleshoot-plugins setroubleshoot-server stunnel sysstat telnet texinfo tokyocabinet tokyocabinet-devel valgrind valgrind-devel wget wireshark wireshark-gnome xmlto xz-devel zlib-devel +retry yum --assumeyes install archivemount autoconf autofs automake cloog-ppl cmake cpp crypto-utils diffuse eclipse-mylyn-cdt eclipse-mylyn-pde eclipse-mylyn-trac eclipse-mylyn-webtasks eclipse-mylyn-wikitext eclipse-subclipse-graph ElectricFence expect file-devel finger ftp gcc gcc-c++ gcc-gnat gcc-java gcc-objc gcc-objc++ gd gdb-gdbserver geany gedit-plugins git glibc-devel glibc-headers glibc-utils gperf haveged httpd-devel httpd-manual imake inotify-tools iotop iptables-devel iptraf jwhois kernel-headers keyutils-libs-devel krb5-devel libarchive libbsd libbsd-devel libcom_err-devel libevent libevent-devel libevent-doc libevent-headers libffi-devel libgomp libmemcached libselinux-devel libsepol-devel libstdc++-devel libstdc++-docs libtool libuuid-devel libzip lm_sensors lm_sensors-devel lm_sensors-libs lslk m2crypto mc mcelog meld memcached memtest86+ mercurial mod_perl mod_ssl mpfr mysql mysql-bench mysql-connector-java mysql-server nasm ncurses-devel net-snmp net-snmp-devel net-snmp-libs net-snmp-perl net-snmp-python net-snmp-utils nmap numpy openssl-devel oprofile-gui oprofile-jit patch perf perl perl-DBD-MySQL perl-DBI perl-Error perl-Git perl-libs perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-Time-HiRes perl-version powertop ppl psutils python-crypto2.6 python-devel python-pip python-ply python-pycparser rsync screen setools-console setroubleshoot setroubleshoot-plugins setroubleshoot-server stunnel sysstat telnet texinfo tokyocabinet tokyocabinet-devel valgrind valgrind-devel wget wireshark wireshark-gnome xmlto xz-devel zlib-devel # Enable and start the daemons. chkconfig mysqld on diff --git a/scripts/centos6/kernel.sh b/scripts/centos6/kernel.sh index b43fb9b11..e778f24ef 100644 --- a/scripts/centos6/kernel.sh +++ b/scripts/centos6/kernel.sh @@ -1,9 +1,35 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Now that the system is running atop the updated kernel, we can install the # development files for the kernel. These files are required to compile the # virtualization kernel modules later in the provisioning process. -yum --assumeyes install kernel-devel +retry yum --assumeyes install kernel-devel # Now that the system is running on the updated kernel, we can remove the # old kernel(s) from the system. diff --git a/scripts/centos6/magma.sh b/scripts/centos6/magma.sh index c1b655dbe..9dd53d08b 100644 --- a/scripts/centos6/magma.sh +++ b/scripts/centos6/magma.sh @@ -1,24 +1,50 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Install the the EPEL repository. -yum --assumeyes --enablerepo=extras install epel-release +retry yum --assumeyes --enablerepo=extras install epel-release # Packages needed beyond a minimal install to build and run magma. -yum --assumeyes install valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cloog-ppl cpp glibc-devel glibc-headers kernel-headers libgomp mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes cmake libarchive +retry yum --assumeyes install valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cloog-ppl cpp glibc-devel glibc-headers kernel-headers libgomp mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes cmake libarchive # Install libbsd because DSPAM relies upon for the strl functions, and the # entropy which improves the availability of random bits, and helps magma # launch and complete her unit tests faster. -yum --assumeyes install libbsd libbsd-devel inotify-tools haveged +retry yum --assumeyes install libbsd libbsd-devel inotify-tools haveged # The MySQL services magma relies upon. -yum --assumeyes install mysql mysql-server perl-DBI perl-DBD-MySQL +retry yum --assumeyes install mysql mysql-server perl-DBI perl-DBD-MySQL # The memcached services magma uses. -yum --assumeyes install libevent memcached +retry yum --assumeyes install libevent memcached # Packages used to retrieve the magma code, but aren't required for building/running the daemon. -yum --assumeyes install wget git rsync perl-Git perl-Error +retry yum --assumeyes install wget git rsync perl-Git perl-Error # Ensure memcached doesn't try to use IPv6. if [ -f /etc/sysconfig/memcached ]; then @@ -43,7 +69,7 @@ mysql --execute="CREATE USER mytool@localhost IDENTIFIED BY 'aComplex1'" mysql --execute="GRANT ALL ON *.* TO mytool@localhost" # Install the python packages needed for the stacie script to run, which requires the python cryptography package (installed via pip). -yum --assumeyes install zlib-devel openssl-devel libffi-devel python-pip python-ply python-devel python-pycparser python-crypto2.6 libcom_err-devel libsepol-devel libselinux-devel keyutils-libs-devel krb5-devel +retry yum --assumeyes install zlib-devel openssl-devel libffi-devel python-pip python-ply python-devel python-pycparser python-crypto2.6 libcom_err-devel libsepol-devel libselinux-devel keyutils-libs-devel krb5-devel # Install the Python Prerequisites pip install --disable-pip-version-check cryptography==1.5.2 cffi==1.11.5 enum34==1.1.6 idna==2.7 ipaddress==1.0.22 pyasn1==0.4.4 six==1.11.0 setuptools==11.3 @@ -94,6 +120,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -142,7 +175,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/centos6/network.sh b/scripts/centos6/network.sh index a5a42f65a..9431a7442 100644 --- a/scripts/centos6/network.sh +++ b/scripts/centos6/network.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure a nameserver is being used that won't return an IP for non-existent domain names. printf "nameserver 4.2.2.1\nnameserver 4.2.2.2\nnameserver 208.67.220.220\n" > /etc/resolv.conf @@ -45,9 +71,8 @@ if [ -f /etc/sysconfig/network-scripts/ifcfg-eth0 ]; then sed -i -e "/IPV6_DEFROUTE.*/d;$ a IPV6_DEFROUTE=no" /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i -e "/IPV6_PEERDNS.*/d;$ a IPV6_PEERDNS=no" /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i -e "/IPV6_PEERROUTES.*/d;$ a IPV6_PEERROUTES=no" /etc/sysconfig/network-scripts/ifcfg-eth0 -sed -i -e "/IPV6FORWARDING.*/d;$ a IPV6FORWARDING=no" /etc/sysconfig/network-scripts/ifcfg-eth0 -sed -i -e "/IPV6_AUTOTUNNEL.*/d;$ a IPV6_AUTOTUNNEL=no" /etc/sysconfig/network-scripts/ifcfg-eth0 - + sed -i -e "/IPV6FORWARDING.*/d;$ a IPV6FORWARDING=no" /etc/sysconfig/network-scripts/ifcfg-eth0 + sed -i -e "/IPV6_AUTOTUNNEL.*/d;$ a IPV6_AUTOTUNNEL=no" /etc/sysconfig/network-scripts/ifcfg-eth0 # Ensure good DNS servers are being used, and NM will be in control. sed -i -e "/NM_CONTROLLED/d" /etc/sysconfig/network-scripts/ifcfg-eth0 @@ -61,7 +86,7 @@ fi # Depending on the kick start configuration, the NetworkManager may still # need to be installed. We'll take care of that here, since we rely it # to handle disconnected, and/or missintg ethernet iterfaces gracefully. -yum install --assumeyes NetworkManager +retry yum install --assumeyes NetworkManager # If postfix is installed, configure it use only ipv4 interfaces, or it will fail to start properly. if [ -f /etc/postfix/main.cf ]; then diff --git a/scripts/centos6/parallels.sh b/scripts/centos6/parallels.sh index 725184fa0..87ab49c24 100644 --- a/scripts/centos6/parallels.sh +++ b/scripts/centos6/parallels.sh @@ -1,7 +1,33 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. -yum --assumeyes install dmidecode +retry yum --assumeyes install dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/centos6/postfix.sh b/scripts/centos6/postfix.sh index fdf33bb33..82eb488d8 100644 --- a/scripts/centos6/postfix.sh +++ b/scripts/centos6/postfix.sh @@ -1,8 +1,34 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The postfix server for message relays. The checkpolicy, policycoreutils and the- # policycoreutils-python packages are needed to compile the selinux module below. -yum --assumeyes install postfix checkpolicy policycoreutils policycoreutils-python +retry yum --assumeyes install postfix checkpolicy policycoreutils policycoreutils-python # Postfix opportunistic TLS relay. printf "smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt\n" >> /etc/postfix/main.cf diff --git a/scripts/centos6/qemu.sh b/scripts/centos6/qemu.sh index 54b8573ed..2f0d20a49 100644 --- a/scripts/centos6/qemu.sh +++ b/scripts/centos6/qemu.sh @@ -1,10 +1,36 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { - if [ $? -ne 0 ]; then - printf "\n\nqemu addons failed to install...\n\n"; - exit 1 - fi + if [ $? -ne 0 ]; then + printf "\n\nqemu addons failed to install...\n\n"; + exit 1 + fi } @@ -16,4 +42,4 @@ fi # Install the QEMU using Yum. printf "Installing the QEMU Tools.\n" -yum --quiet --assumeyes install qemu-guest-agent; error +retry yum --quiet --assumeyes install qemu-guest-agent; error diff --git a/scripts/centos6/randomness.sh b/scripts/centos6/randomness.sh index afd83c3a0..03179133b 100644 --- a/scripts/centos6/randomness.sh +++ b/scripts/centos6/randomness.sh @@ -1,10 +1,36 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Install haveged, which should improve the entropy pool performance # inside a virtual machines, but be careful, it doesn't end up running # on systems which aren't virtualized. The patch command is included # to ensure its use below doesn't cause an error. -yum --assumeyes install haveged patch +retry yum --assumeyes install haveged patch # Enable and start the daemons. chkconfig haveged on diff --git a/scripts/centos6/tuning.sh b/scripts/centos6/tuning.sh index b7027e0a6..8be5841be 100644 --- a/scripts/centos6/tuning.sh +++ b/scripts/centos6/tuning.sh @@ -1,7 +1,33 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure tuned -yum --assumeyes install tuned +retry yum --assumeyes install tuned chkconfig tuned on service tuned start diff --git a/scripts/centos6/updatedb.sh b/scripts/centos6/updatedb.sh index c01a0e782..10284cf02 100644 --- a/scripts/centos6/updatedb.sh +++ b/scripts/centos6/updatedb.sh @@ -1,6 +1,32 @@ #!/bin/bash -eux -yum --assumeyes install mlocate +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +retry yum --assumeyes install mlocate # Update the locate database. cp /etc/cron.daily/mlocate /etc/cron.hourly/mlocate && /etc/cron.daily/mlocate diff --git a/scripts/centos6/virtualbox.sh b/scripts/centos6/virtualbox.sh index 099891156..ac4f020e0 100644 --- a/scripts/centos6/virtualbox.sh +++ b/scripts/centos6/virtualbox.sh @@ -18,6 +18,13 @@ error() { printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" fi + if [ -f /var/log/vboxadd-setup.log ]; then + printf "\n\n/var/log/vboxadd-setup.log\n\n" + cat /var/log/vboxadd-setup.log + else + printf "\n\nThe /var/log/vboxadd-setup.log is missing...\n\n" + fi + exit 1 fi } diff --git a/scripts/centos6/vmware.sh b/scripts/centos6/vmware.sh index 7200dabe7..ba955e3ae 100644 --- a/scripts/centos6/vmware.sh +++ b/scripts/centos6/vmware.sh @@ -1,10 +1,36 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { - if [ $? -ne 0 ]; then - printf "\n\nvmware install failed...\n\n"; - exit 1 - fi + if [ $? -ne 0 ]; then + printf "\n\nvmware install failed...\n\n"; + exit 1 + fi } diff --git a/scripts/centos7/base.sh b/scripts/centos7/base.sh index 996491fa9..66db1ca8e 100644 --- a/scripts/centos7/base.sh +++ b/scripts/centos7/base.sh @@ -1,10 +1,10 @@ #!/bin/bash error() { - if [ $? -ne 0 ]; then - printf "\n\nyum failed...\n\n"; - exit 1 - fi + if [ $? -ne 0 ]; then + printf "\n\nyum failed...\n\n"; + exit 1 + fi } # Close a potential security hole. diff --git a/scripts/centos7/kernel.sh b/scripts/centos7/kernel.sh index aff21cba3..fddf03b7b 100644 --- a/scripts/centos7/kernel.sh +++ b/scripts/centos7/kernel.sh @@ -1,9 +1,35 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Now that the system is running atop the updated kernel, we can install the # development files for the kernel. These files are required to compile the # virtualization kernel modules later in the provisioning process. -yum --assumeyes install kernel-tools kernel-devel kernel-headers +retry yum --assumeyes install kernel-tools kernel-devel kernel-headers # Now that the system is running on the updated kernel, we can remove the # old kernel(s) from the system. diff --git a/scripts/centos7/magma.sh b/scripts/centos7/magma.sh index 029f5beab..228ce3fa6 100644 --- a/scripts/centos7/magma.sh +++ b/scripts/centos7/magma.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Setup the box, for magma. These commands will be run as root during provisioning. error() { if [ $? -ne 0 ]; then @@ -9,22 +35,22 @@ error() { } # Install the the EPEL repository. -yum --assumeyes --enablerepo=extras install epel-release; error +retry yum --assumeyes --enablerepo=extras install epel-release; error # Packages needed beyond a minimal install to build and run magma. -yum --quiet --assumeyes install valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive zlib-devel; error +retry yum --quiet --assumeyes install valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive zlib-devel; error # Grab the required packages from the EPEL repo. -yum --quiet --assumeyes install libbsd libbsd-devel inotify-tools; error +retry yum --quiet --assumeyes install libbsd libbsd-devel inotify-tools; error # Boosts the available entropy which allows magma to start faster. -yum --quiet --assumeyes install haveged; error +retry yum --quiet --assumeyes install haveged; error # Packages used to retrieve the magma code, but aren't required for building/running the daemon. -yum --quiet --assumeyes install wget git rsync perl-Git perl-Error; error +retry yum --quiet --assumeyes install wget git rsync perl-Git perl-Error; error # These packages are required for the stacie.py script, which requires the python cryptography package (installed via pip). -yum --quiet --assumeyes install python-crypto python-cryptography +retry yum --quiet --assumeyes install python-crypto python-cryptography # Create the clamav user to avoid spurious errors. useradd clamav @@ -72,6 +98,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -120,7 +153,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/centos7/mariadb.sh b/scripts/centos7/mariadb.sh index be0fa651e..83324531d 100644 --- a/scripts/centos7/mariadb.sh +++ b/scripts/centos7/mariadb.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Install MariaDB -yum install --assumeyes mariadb mariadb-libs mariadb-server perl-DBI perl-DBD-MySQL +retry yum install --assumeyes mariadb mariadb-libs mariadb-server perl-DBI perl-DBD-MySQL # Change the default temporary table directory or else the schema reset will fail when it creates a temp table. printf "\n\n[server]\ntmpdir=/tmp/\n\n" >> /etc/my.cnf.d/server-tmpdir.cnf diff --git a/scripts/centos7/memcached.sh b/scripts/centos7/memcached.sh index 256162f2b..8cf9c9447 100644 --- a/scripts/centos7/memcached.sh +++ b/scripts/centos7/memcached.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Install memcached. -yum install --assumeyes libevent memcached +retry yum install --assumeyes libevent memcached # Ensure memcached doesn't try to use IPv6. if [ -f /etc/sysconfig/memcached ]; then diff --git a/scripts/centos7/parallels.sh b/scripts/centos7/parallels.sh index 725184fa0..87ab49c24 100644 --- a/scripts/centos7/parallels.sh +++ b/scripts/centos7/parallels.sh @@ -1,7 +1,33 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. -yum --assumeyes install dmidecode +retry yum --assumeyes install dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/centos7/postfix.sh b/scripts/centos7/postfix.sh index 081407764..46191daac 100644 --- a/scripts/centos7/postfix.sh +++ b/scripts/centos7/postfix.sh @@ -1,8 +1,34 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The postfix server for message relays. The checkpolicy, policycoreutils and the- # policycoreutils-python packages are needed to compile the selinux module below. -yum --assumeyes install postfix checkpolicy policycoreutils policycoreutils-python +retry yum --assumeyes install postfix checkpolicy policycoreutils policycoreutils-python # Postfix opportunistic TLS relay. printf "smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt\n" >> /etc/postfix/main.cf diff --git a/scripts/centos7/qemu.sh b/scripts/centos7/qemu.sh index 54b8573ed..2f0d20a49 100644 --- a/scripts/centos7/qemu.sh +++ b/scripts/centos7/qemu.sh @@ -1,10 +1,36 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { - if [ $? -ne 0 ]; then - printf "\n\nqemu addons failed to install...\n\n"; - exit 1 - fi + if [ $? -ne 0 ]; then + printf "\n\nqemu addons failed to install...\n\n"; + exit 1 + fi } @@ -16,4 +42,4 @@ fi # Install the QEMU using Yum. printf "Installing the QEMU Tools.\n" -yum --quiet --assumeyes install qemu-guest-agent; error +retry yum --quiet --assumeyes install qemu-guest-agent; error diff --git a/scripts/centos7/randomness.sh b/scripts/centos7/randomness.sh index b414a3d7c..4185b6317 100644 --- a/scripts/centos7/randomness.sh +++ b/scripts/centos7/randomness.sh @@ -1,10 +1,36 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Install haveged, which should improve the entropy pool performance # inside a virtual machines, but be careful, it doesn't end up running # on systems which aren't virtualized. The patch command is included # to ensure its use below doesn't cause an error. -yum --assumeyes install haveged patch +retry yum --assumeyes install haveged patch # Enable and start the daemons. systemctl enable haveged diff --git a/scripts/centos7/tuning.sh b/scripts/centos7/tuning.sh index e2ef8b04f..29c9df81a 100644 --- a/scripts/centos7/tuning.sh +++ b/scripts/centos7/tuning.sh @@ -1,7 +1,33 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure tuned -yum --assumeyes install tuned +retry yum --assumeyes install tuned systemctl enable tuned systemctl start tuned diff --git a/scripts/centos7/updatedb.sh b/scripts/centos7/updatedb.sh index 49e166444..cde4d15f8 100644 --- a/scripts/centos7/updatedb.sh +++ b/scripts/centos7/updatedb.sh @@ -1,6 +1,32 @@ #!/bin/bash -eux -yum --assumeyes install mlocate +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +retry yum --assumeyes install mlocate # Update the locate database. cp /etc/cron.daily/mlocate /etc/cron.hourly/mlocate && /etc/cron.daily/mlocate diff --git a/scripts/centos7/virtualbox.sh b/scripts/centos7/virtualbox.sh index 9a88e5e62..c2be71056 100644 --- a/scripts/centos7/virtualbox.sh +++ b/scripts/centos7/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -18,6 +44,13 @@ error() { printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" fi + if [ -f /var/log/vboxadd-setup.log ]; then + printf "\n\n/var/log/vboxadd-setup.log\n\n" + cat /var/log/vboxadd-setup.log + else + printf "\n\nThe /var/log/vboxadd-setup.log is missing...\n\n" + fi + exit 1 fi } @@ -33,7 +66,7 @@ printf "Installing the Virtual Box Tools.\n" # Read in the version number. VBOXVERSION=`cat /root/VBoxVersion.txt` -yum --quiet --assumeyes install bzip2; error +retry yum --quiet --assumeyes install bzip2; error # The group vboxsf is needed for shared folder access. getent group vboxsf >/dev/null || groupadd --system vboxsf; error diff --git a/scripts/centos7/vmware.sh b/scripts/centos7/vmware.sh index afc288ea0..45ee394a4 100644 --- a/scripts/centos7/vmware.sh +++ b/scripts/centos7/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -16,7 +42,7 @@ fi # Install the VMWare Tools. printf "Installing the VMWare Tools.\n" -yum --quiet --assumeyes install open-vm-tools fuse-libs libdnet libicu libmspack +retry yum --quiet --assumeyes install open-vm-tools fuse-libs libdnet libicu libmspack systemctl enable vmtoolsd systemctl start vmtoolsd diff --git a/scripts/centos7/yum.sh b/scripts/centos7/yum.sh index a51063f4d..05c8c7dc8 100644 --- a/scripts/centos7/yum.sh +++ b/scripts/centos7/yum.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Tell yum to retry 128 times before failing, so unattended installs don't skip packages when errors occur. printf "\nretries=128\ndeltarpm=0\nmetadata_expire=0\nmirrorlist_expire=0\n" >> /etc/yum.conf @@ -20,7 +46,7 @@ sed --in-place "s/^/# /g" /etc/yum.repos.d/CentOS-fasttrack.repo sed --in-place "s/# #/##/g" /etc/yum.repos.d/CentOS-fasttrack.repo # EPEL Repo Setup -yum --quiet --assumeyes --enablerepo=extras install epel-release +retry yum --quiet --assumeyes --enablerepo=extras install epel-release sed -i -e "s/^#baseurl/baseurl/g" /etc/yum.repos.d/epel.repo sed -i -e "s/^mirrorlist/#mirrorlist/g" /etc/yum.repos.d/epel.repo @@ -33,10 +59,10 @@ sed --in-place "s/^/# /g" /etc/yum.repos.d/epel-testing.repo sed --in-place "s/# #/##/g" /etc/yum.repos.d/epel-testing.repo # Update the base install first. -yum --assumeyes update +retry yum --assumeyes update # Install the basic packages we'd expect to find. -yum --assumeyes install deltarpm sudo dmidecode yum-utils bash-completion man man-pages mlocate vim-enhanced bind-utils jwhois wget dos2unix unix2dos lsof telnet net-tools coreutils grep gawk sed curl patch sysstat make cmake libarchive texinfo autoconf automake libtool gcc-c++ libstdc++-devel gcc cpp ncurses-devel glibc-devel glibc-headers kernel-headers psmisc +retry yum --assumeyes install deltarpm sudo dmidecode yum-utils bash-completion man man-pages mlocate vim-enhanced bind-utils jwhois wget dos2unix unix2dos lsof telnet net-tools coreutils grep gawk sed curl patch sysstat make cmake libarchive texinfo autoconf automake libtool gcc-c++ libstdc++-devel gcc cpp ncurses-devel glibc-devel glibc-headers kernel-headers psmisc if [ -f /etc/yum.repos.d/CentOS-Vault.repo.rpmnew ]; then rm --force /etc/yum.repos.d/CentOS-Vault.repo.rpmnew diff --git a/scripts/common/lockout.sh b/scripts/common/lockout.sh index eacea6b45..15599903a 100644 --- a/scripts/common/lockout.sh +++ b/scripts/common/lockout.sh @@ -16,7 +16,7 @@ elif [[ "$PACKER_BUILD_NAME" =~ ^(generic|magma)-(netbsd8)-(vmware|hyperv|libvi LOCKPWD=`dd if=/dev/urandom count=128 msgfmt=quiet | md5 | awk -F' ' '{print $1}'` /usr/sbin/user mod -p "`pwhash $LOCKPWD`" root -elif [[ "$PACKER_BUILD_NAME" =~ ^(generic|magma)-(alpine3[5-9])-(vmware|hyperv|libvirt|parallels|virtualbox)$ ]]; then +elif [[ "$PACKER_BUILD_NAME" =~ ^(generic|magma)-(alpine3[5-9]|alpine310)-(vmware|hyperv|libvirt|parallels|virtualbox)$ ]]; then LOCKPWD=`dd if=/dev/urandom count=128 status=none | md5sum | awk -F' ' '{print $1}'` printf "$LOCKPWD\n$LOCKPWD\n" | passwd root diff --git a/scripts/common/zerodisk.sh b/scripts/common/zerodisk.sh index 1fbe96f2e..48e590e68 100644 --- a/scripts/common/zerodisk.sh +++ b/scripts/common/zerodisk.sh @@ -1,6 +1,6 @@ #!/bin/bash -ux -if [[ "$PACKER_BUILD_NAME" =~ ^(generic|magma)-(freebsd1[1-2]|hardenedbsd1[1-2]|netbsd8|openbsd6|alpine3[5-9])-(vmware|hyperv|libvirt|parallels|virtualbox)$ ]]; then +if [[ "$PACKER_BUILD_NAME" =~ ^(generic|magma)-(freebsd1[1-2]|hardenedbsd1[1-2]|netbsd8|openbsd6|alpine3[5-9]|alpine310)-(vmware|hyperv|libvirt|parallels|virtualbox)$ ]]; then # We fill until full so don't abort on error. # set -ux diff --git a/scripts/debian10/apt.sh b/scripts/debian10/apt.sh index a8f6694b1..315589ff5 100644 --- a/scripts/debian10/apt.sh +++ b/scripts/debian10/apt.sh @@ -1,5 +1,32 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + error() { if [ $? -ne 0 ]; then printf "\n\napt failed...\n\n"; @@ -32,30 +59,30 @@ systemctl stop apt-daily.service apt-daily.timer sed -i -e "/cdrom:/d" /etc/apt/sources.list # Ensure the server includes any necessary updates. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error # The packages users expect on a sane system. -apt-get --assume-yes install vim net-tools mlocate psmisc; error +retry apt-get --assume-yes install vim net-tools mlocate psmisc; error # The packages needed to compile magma. -apt-get --assume-yes install gcc g++ gawk gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr6 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config lsb-release; error +retry apt-get --assume-yes install gcc g++ gawk gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr6 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config lsb-release; error # The memcached server. -apt-get --assume-yes install memcached libevent-dev; error +retry apt-get --assume-yes install memcached libevent-dev; error # The postfix server for message relays. -apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert; error +retry apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert; error # Need to retrieve the source code. -apt-get --assume-yes install git git-man liberror-perl rsync wget; error +retry apt-get --assume-yes install git git-man liberror-perl rsync wget; error # Needed to run the watcher and status scripts. -apt-get --assume-yes install sysstat inotify-tools; error +retry apt-get --assume-yes install sysstat inotify-tools; error # Needed to run the stacie script. -apt-get --assume-yes install python-crypto python-cryptography; error +retry apt-get --assume-yes install python-crypto python-cryptography; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error diff --git a/scripts/debian10/magma.sh b/scripts/debian10/magma.sh index f7511adf3..fc30eabf4 100644 --- a/scripts/debian10/magma.sh +++ b/scripts/debian10/magma.sh @@ -1,13 +1,40 @@ #!/bin/bash -eux -# -# Setup the the box. This runs as root + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true +# Install the missing dependencies used to compile magma. +retry apt-get --assume-yes install cmake mariadb-server + # Install the SQL server. -apt-get --assume-yes install mariadb-server +retry apt-get --assume-yes install mariadb-server # Force MySQL/MariaDB except the old fashioned '0000-00-00' date format. printf "[mysqld]\nsql-mode=allow_invalid_dates\n" >> /etc/mysql/mariadb.conf.d/60-server-mode.cnf @@ -38,6 +65,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -89,7 +123,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/debian10/memcached.sh b/scripts/debian10/memcached.sh index c08cdbdef..7c97c349d 100644 --- a/scripts/debian10/memcached.sh +++ b/scripts/debian10/memcached.sh @@ -1,11 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The memcached server. -apt-get --assume-yes install memcached libevent-dev +retry apt-get --assume-yes install memcached libevent-dev # Setup memcached to start automatically. systemctl start memcached.service && systemctl enable memcached.service diff --git a/scripts/debian10/mysql.sh b/scripts/debian10/mysql.sh index 4f8a9814d..0af268621 100644 --- a/scripts/debian10/mysql.sh +++ b/scripts/debian10/mysql.sh @@ -1,11 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The mysql client and related utilities. -apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient18 mysql-common libdbd-mysql-perl +retry apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient18 mysql-common libdbd-mysql-perl # Setup mysql to start automatically. systemctl start mysql.service && systemctl enable mysql.service diff --git a/scripts/debian10/network.sh b/scripts/debian10/network.sh index 7bd570025..e47d9ec1b 100644 --- a/scripts/debian10/network.sh +++ b/scripts/debian10/network.sh @@ -1,5 +1,32 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true @@ -40,7 +67,7 @@ printf "pre-up sleep 2\n" >> /etc/network/interfaces printf "nameserver 4.2.2.1\nnameserver 4.2.2.2\nnameserver 208.67.220.220\n" > /etc/resolv.conf # Install ifplugd so we can monitor and auto-configure nics. -apt-get --assume-yes install ifplugd resolvconf +retry apt-get --assume-yes install ifplugd resolvconf # Configure ifplugd to monitor the eth0 interface. sed -i -e 's/INTERFACES=.*/INTERFACES="eth0"/g' /etc/default/ifplugd diff --git a/scripts/debian10/parallels.sh b/scripts/debian10/parallels.sh index 057951d80..3851f7079 100644 --- a/scripts/debian10/parallels.sh +++ b/scripts/debian10/parallels.sh @@ -1,9 +1,36 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + # Needed to check whether we're running atop Parallels. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install dmidecode +retry apt-get --assume-yes install dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/debian10/qemu.sh b/scripts/debian10/qemu.sh index 35a559f03..19d6d9886 100644 --- a/scripts/debian10/qemu.sh +++ b/scripts/debian10/qemu.sh @@ -1,5 +1,32 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -20,4 +47,4 @@ printf "Installing the QEMU Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install qemu-guest-agent; error +retry apt-get --assume-yes install qemu-guest-agent; error diff --git a/scripts/debian10/virtualbox.sh b/scripts/debian10/virtualbox.sh index f95e23856..1c7386f38 100644 --- a/scripts/debian10/virtualbox.sh +++ b/scripts/debian10/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -18,6 +44,13 @@ error() { printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" fi + if [ -f /var/log/vboxadd-setup.log ]; then + printf "\n\n/var/log/vboxadd-setup.log\n\n" + cat /var/log/vboxadd-setup.log + else + printf "\n\nThe /var/log/vboxadd-setup.log is missing...\n\n" + fi + exit 1 fi } @@ -38,7 +71,7 @@ VBOXVERSION=`cat /root/VBoxVersion.txt` export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install dkms build-essential module-assistant linux-headers-$(uname -r); error +retry apt-get --assume-yes install dkms build-essential module-assistant linux-headers-$(uname -r); error # The group vboxsf is needed for shared folder access. getent group vboxsf >/dev/null || groupadd --system vboxsf; error @@ -57,7 +90,7 @@ rm -rf /root/VBoxVersion.txt; error rm -rf /root/VBoxGuestAdditions.iso; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/debian10/vmware.sh b/scripts/debian10/vmware.sh index 0bf14671f..8af9b258c 100644 --- a/scripts/debian10/vmware.sh +++ b/scripts/debian10/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -7,7 +33,6 @@ error() { fi } - # Bail if we are not running inside VMWare. if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then exit 0 @@ -20,7 +45,7 @@ printf "Installing the VMWare Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree +retry apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree systemctl enable open-vm-tools.service systemctl start open-vm-tools.service diff --git a/scripts/debian8/apt.sh b/scripts/debian8/apt.sh index 8f81322dc..f71c563ab 100644 --- a/scripts/debian8/apt.sh +++ b/scripts/debian8/apt.sh @@ -1,5 +1,32 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + error() { if [ $? -ne 0 ]; then printf "\n\napt failed...\n\n"; @@ -29,30 +56,30 @@ fi sed -i -e "/cdrom:/d" /etc/apt/sources.list # Ensure the server includes any necessary updates. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error # The packages users expect on a sane system. -apt-get --assume-yes install vim net-tools mlocate psmisc; error +retry apt-get --assume-yes install vim net-tools mlocate psmisc; error # The packages needed to compile magma. -apt-get --assume-yes install vim gcc g++ gawk gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr4 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config lsb-release; error +retry apt-get --assume-yes install vim gcc g++ gawk gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr4 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config lsb-release; error # The memcached server. -apt-get --assume-yes install memcached libevent-dev; error +retry apt-get --assume-yes install memcached libevent-dev; error # The postfix server for message relays. -apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert; error +retry apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert; error # Need to retrieve the source code. -apt-get --assume-yes install git git-man liberror-perl rsync wget; error +retry apt-get --assume-yes install git git-man liberror-perl rsync wget; error # Needed to run the watcher and status scripts. -apt-get --assume-yes install sysstat inotify-tools; error +retry apt-get --assume-yes install sysstat inotify-tools; error # Needed to run the stacie script. -apt-get --assume-yes install python-crypto python-cryptography; error +retry apt-get --assume-yes install python-crypto python-cryptography; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error diff --git a/scripts/debian8/magma.sh b/scripts/debian8/magma.sh index 825354b5f..67b2eaf06 100644 --- a/scripts/debian8/magma.sh +++ b/scripts/debian8/magma.sh @@ -1,13 +1,40 @@ #!/bin/bash -eux -# -# Setup the the box. This runs as root + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true +# Install the missing dependencies used to compile magma. +retry apt-get --assume-yes install cmake mariadb-server + # Install the SQL server. -apt-get --assume-yes install mariadb-server +retry apt-get --assume-yes install mariadb-server # Force MySQL/MariaDB except the old fashioned '0000-00-00' date format. printf "[mysqld]\nsql-mode=allow_invalid_dates\n" >> /etc/mysql/conf.d//60-server-mode.cnf @@ -38,6 +65,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -89,7 +123,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/debian8/memcached.sh b/scripts/debian8/memcached.sh index c08cdbdef..7c97c349d 100644 --- a/scripts/debian8/memcached.sh +++ b/scripts/debian8/memcached.sh @@ -1,11 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The memcached server. -apt-get --assume-yes install memcached libevent-dev +retry apt-get --assume-yes install memcached libevent-dev # Setup memcached to start automatically. systemctl start memcached.service && systemctl enable memcached.service diff --git a/scripts/debian8/mysql.sh b/scripts/debian8/mysql.sh index 4f8a9814d..0af268621 100644 --- a/scripts/debian8/mysql.sh +++ b/scripts/debian8/mysql.sh @@ -1,11 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The mysql client and related utilities. -apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient18 mysql-common libdbd-mysql-perl +retry apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient18 mysql-common libdbd-mysql-perl # Setup mysql to start automatically. systemctl start mysql.service && systemctl enable mysql.service diff --git a/scripts/debian8/network.sh b/scripts/debian8/network.sh index 6bfc2e4c5..dba284793 100644 --- a/scripts/debian8/network.sh +++ b/scripts/debian8/network.sh @@ -1,5 +1,32 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true @@ -40,7 +67,7 @@ printf "pre-up sleep 2\n" >> /etc/network/interfaces printf "nameserver 4.2.2.1\nnameserver 4.2.2.2\nnameserver 208.67.220.220\n" > /etc/resolv.conf # Install ifplugd so we can monitor and auto-configure nics. -apt-get --assume-yes install ifplugd resolvconf +retry apt-get --assume-yes install ifplugd resolvconf # Configure ifplugd to monitor the eth0 interface. sed -i -e 's/INTERFACES=.*/INTERFACES="eth0"/g' /etc/default/ifplugd diff --git a/scripts/debian8/parallels.sh b/scripts/debian8/parallels.sh index 057951d80..3851f7079 100644 --- a/scripts/debian8/parallels.sh +++ b/scripts/debian8/parallels.sh @@ -1,9 +1,36 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + # Needed to check whether we're running atop Parallels. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install dmidecode +retry apt-get --assume-yes install dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/debian8/qemu.sh b/scripts/debian8/qemu.sh index 35a559f03..19d6d9886 100644 --- a/scripts/debian8/qemu.sh +++ b/scripts/debian8/qemu.sh @@ -1,5 +1,32 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -20,4 +47,4 @@ printf "Installing the QEMU Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install qemu-guest-agent; error +retry apt-get --assume-yes install qemu-guest-agent; error diff --git a/scripts/debian8/virtualbox.sh b/scripts/debian8/virtualbox.sh index 9732ec548..ac3f89c8b 100644 --- a/scripts/debian8/virtualbox.sh +++ b/scripts/debian8/virtualbox.sh @@ -1,5 +1,32 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -18,6 +45,13 @@ error() { printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" fi + if [ -f /var/log/vboxadd-setup.log ]; then + printf "\n\n/var/log/vboxadd-setup.log\n\n" + cat /var/log/vboxadd-setup.log + else + printf "\n\nThe /var/log/vboxadd-setup.log is missing...\n\n" + fi + exit 1 fi } @@ -37,7 +71,7 @@ VBOXVERSION=`cat /root/VBoxVersion.txt` export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install dkms build-essential module-assistant linux-headers-$(uname -r); error +retry apt-get --assume-yes install dkms build-essential module-assistant linux-headers-$(uname -r); error # The group vboxsf is needed for shared folder access. getent group vboxsf >/dev/null || groupadd --system vboxsf; error @@ -56,7 +90,7 @@ rm -rf /root/VBoxVersion.txt; error rm -rf /root/VBoxGuestAdditions.iso; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/debian8/vmware.sh b/scripts/debian8/vmware.sh index 0bf14671f..2a6158094 100644 --- a/scripts/debian8/vmware.sh +++ b/scripts/debian8/vmware.sh @@ -1,5 +1,32 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -20,7 +47,7 @@ printf "Installing the VMWare Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree +retry apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree systemctl enable open-vm-tools.service systemctl start open-vm-tools.service diff --git a/scripts/debian9/apt.sh b/scripts/debian9/apt.sh index c86285ccd..7502b0ffd 100644 --- a/scripts/debian9/apt.sh +++ b/scripts/debian9/apt.sh @@ -1,10 +1,36 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { - if [ $? -ne 0 ]; then - printf "\n\napt failed...\n\n"; - exit 1 - fi + if [ $? -ne 0 ]; then + printf "\n\napt failed...\n\n"; + exit 1 + fi } # To allow for autmated installs, we disable interactive configuration steps. @@ -32,30 +58,30 @@ systemctl stop apt-daily.service apt-daily.timer sed -i -e "/cdrom:/d" /etc/apt/sources.list # Ensure the server includes any necessary updates. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error # The packages users expect on a sane system. -apt-get --assume-yes install vim net-tools mlocate psmisc; error +retry apt-get --assume-yes install vim net-tools mlocate psmisc; error # The packages needed to compile magma. -apt-get --assume-yes install gcc g++ gawk gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr4 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config lsb-release; error +retry apt-get --assume-yes install gcc g++ gawk gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr4 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config lsb-release; error # The memcached server. -apt-get --assume-yes install memcached libevent-dev; error +retry apt-get --assume-yes install memcached libevent-dev; error # The postfix server for message relays. -apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert; error +retry apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert; error # Need to retrieve the source code. -apt-get --assume-yes install git git-man liberror-perl rsync wget; error +retry apt-get --assume-yes install git git-man liberror-perl rsync wget; error # Needed to run the watcher and status scripts. -apt-get --assume-yes install sysstat inotify-tools; error +retry apt-get --assume-yes install sysstat inotify-tools; error # Needed to run the stacie script. -apt-get --assume-yes install python-crypto python-cryptography; error +retry apt-get --assume-yes install python-crypto python-cryptography; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error diff --git a/scripts/debian9/magma.sh b/scripts/debian9/magma.sh index f7511adf3..fc30eabf4 100644 --- a/scripts/debian9/magma.sh +++ b/scripts/debian9/magma.sh @@ -1,13 +1,40 @@ #!/bin/bash -eux -# -# Setup the the box. This runs as root + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true +# Install the missing dependencies used to compile magma. +retry apt-get --assume-yes install cmake mariadb-server + # Install the SQL server. -apt-get --assume-yes install mariadb-server +retry apt-get --assume-yes install mariadb-server # Force MySQL/MariaDB except the old fashioned '0000-00-00' date format. printf "[mysqld]\nsql-mode=allow_invalid_dates\n" >> /etc/mysql/mariadb.conf.d/60-server-mode.cnf @@ -38,6 +65,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -89,7 +123,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/debian9/memcached.sh b/scripts/debian9/memcached.sh index c08cdbdef..7c97c349d 100644 --- a/scripts/debian9/memcached.sh +++ b/scripts/debian9/memcached.sh @@ -1,11 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The memcached server. -apt-get --assume-yes install memcached libevent-dev +retry apt-get --assume-yes install memcached libevent-dev # Setup memcached to start automatically. systemctl start memcached.service && systemctl enable memcached.service diff --git a/scripts/debian9/mysql.sh b/scripts/debian9/mysql.sh index 4f8a9814d..0af268621 100644 --- a/scripts/debian9/mysql.sh +++ b/scripts/debian9/mysql.sh @@ -1,11 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The mysql client and related utilities. -apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient18 mysql-common libdbd-mysql-perl +retry apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient18 mysql-common libdbd-mysql-perl # Setup mysql to start automatically. systemctl start mysql.service && systemctl enable mysql.service diff --git a/scripts/debian9/network.sh b/scripts/debian9/network.sh index cee95de22..1e5845668 100644 --- a/scripts/debian9/network.sh +++ b/scripts/debian9/network.sh @@ -1,5 +1,32 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true @@ -40,7 +67,7 @@ printf "pre-up sleep 2\n" >> /etc/network/interfaces printf "nameserver 4.2.2.1\nnameserver 4.2.2.2\nnameserver 208.67.220.220\n" > /etc/resolv.conf # Install ifplugd so we can monitor and auto-configure nics. -apt-get --assume-yes install ifplugd resolvconf +retry apt-get --assume-yes install ifplugd resolvconf # Configure ifplugd to monitor the eth0 interface. sed -i -e 's/INTERFACES=.*/INTERFACES="eth0"/g' /etc/default/ifplugd diff --git a/scripts/debian9/parallels.sh b/scripts/debian9/parallels.sh index 057951d80..3851f7079 100644 --- a/scripts/debian9/parallels.sh +++ b/scripts/debian9/parallels.sh @@ -1,9 +1,36 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + # Needed to check whether we're running atop Parallels. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install dmidecode +retry apt-get --assume-yes install dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/debian9/qemu.sh b/scripts/debian9/qemu.sh index 35a559f03..19d6d9886 100644 --- a/scripts/debian9/qemu.sh +++ b/scripts/debian9/qemu.sh @@ -1,5 +1,32 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -20,4 +47,4 @@ printf "Installing the QEMU Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install qemu-guest-agent; error +retry apt-get --assume-yes install qemu-guest-agent; error diff --git a/scripts/debian9/virtualbox.sh b/scripts/debian9/virtualbox.sh index f95e23856..bc6bf07fe 100644 --- a/scripts/debian9/virtualbox.sh +++ b/scripts/debian9/virtualbox.sh @@ -1,5 +1,32 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -18,6 +45,13 @@ error() { printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" fi + if [ -f /var/log/vboxadd-setup.log ]; then + printf "\n\n/var/log/vboxadd-setup.log\n\n" + cat /var/log/vboxadd-setup.log + else + printf "\n\nThe /var/log/vboxadd-setup.log is missing...\n\n" + fi + exit 1 fi } @@ -38,7 +72,7 @@ VBOXVERSION=`cat /root/VBoxVersion.txt` export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install dkms build-essential module-assistant linux-headers-$(uname -r); error +retry apt-get --assume-yes install dkms build-essential module-assistant linux-headers-$(uname -r); error # The group vboxsf is needed for shared folder access. getent group vboxsf >/dev/null || groupadd --system vboxsf; error @@ -57,7 +91,7 @@ rm -rf /root/VBoxVersion.txt; error rm -rf /root/VBoxGuestAdditions.iso; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/debian9/vmware.sh b/scripts/debian9/vmware.sh index 0bf14671f..2a6158094 100644 --- a/scripts/debian9/vmware.sh +++ b/scripts/debian9/vmware.sh @@ -1,5 +1,32 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -20,7 +47,7 @@ printf "Installing the VMWare Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree +retry apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree systemctl enable open-vm-tools.service systemctl start open-vm-tools.service diff --git a/scripts/dragonflybsd5/magma.sh b/scripts/dragonflybsd5/magma.sh index 451e89f12..f161248b5 100644 --- a/scripts/dragonflybsd5/magma.sh +++ b/scripts/dragonflybsd5/magma.sh @@ -33,6 +33,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -81,7 +88,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/fedora25/dnf.sh b/scripts/fedora25/dnf.sh index 24394eaf9..241395019 100644 --- a/scripts/fedora25/dnf.sh +++ b/scripts/fedora25/dnf.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then @@ -15,35 +41,35 @@ printf "\nretries=128\ndeltarpm=false\nmetadata_expire=20\ntimeout=300\n" >> /et sysctl net.ipv6.conf.all.disable_ipv6=1 # Update the base install first. -dnf upgrade --assumeyes; error +retry dnf upgrade --assumeyes; error # Needed to retrieve source code, and other misc system tools. -dnf install --assumeyes vim git wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils psmisc; error +retry dnf install --assumeyes vim git wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils psmisc; error # Packages needed beyond a minimal install to build and run magma. -dnf install --assumeyes valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive deltarpm net-tools; error +retry dnf install --assumeyes valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive deltarpm net-tools; error # Grab the required packages from the EPEL repo. -dnf install --assumeyes libbsd libbsd-devel inotify-tools; error +retry dnf install --assumeyes libbsd libbsd-devel inotify-tools; error # Boosts the available entropy which allows magma to start faster. -dnf install --assumeyes haveged; error +retry dnf install --assumeyes haveged; error # The daemon services magma relies upon. -dnf install --assumeyes libevent memcached; error +retry dnf install --assumeyes libevent memcached; error # Packages used to retrieve the magma code, but aren't required for building/running the daemon. -dnf install --assumeyes wget git rsync perl-Git perl-Error; error +retry dnf install --assumeyes wget git rsync perl-Git perl-Error; error # These packages are required for the stacie.py script, which requires the python cryptography package (installed via pip). -dnf install --assumeyes python-crypto python-cryptography +retry dnf install --assumeyes python-crypto python-cryptography # Packages used during the provisioning process and then removed during the cleanup stage. -dnf install --assumeyes sudo dmidecode; error +retry dnf install --assumeyes sudo dmidecode; error # Run update a second time, just in case it failed the first time. Mirror timeoutes and cosmic rays # often interupt the the provisioning process. -dnf upgrade --assumeyes; error +retry dnf upgrade --assumeyes; error # Reboot onto the new kernel (if applicable). shutdown --reboot --no-wall +1 diff --git a/scripts/fedora25/kernel.sh b/scripts/fedora25/kernel.sh index 1fededd5e..a5de18ccf 100644 --- a/scripts/fedora25/kernel.sh +++ b/scripts/fedora25/kernel.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\ndnf failed...\n\n" @@ -10,7 +36,7 @@ error() { # Now that the system is running atop the updated kernel, we can install the # development files for the kernel. These files are required to compile the # virtualization kernel modules later in the provisioning process. -dnf --assumeyes install kernel-tools kernel-devel kernel-headers; error +retry dnf --assumeyes install kernel-tools kernel-devel kernel-headers; error # Now that the system is running on the updated kernel, we can remove the # old kernel(s) from the system. diff --git a/scripts/fedora25/parallels.sh b/scripts/fedora25/parallels.sh index 1236ea67e..9e6d617a1 100644 --- a/scripts/fedora25/parallels.sh +++ b/scripts/fedora25/parallels.sh @@ -1,7 +1,33 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. -dnf install --assumeyes dmidecode +retry dnf install --assumeyes dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/fedora25/qemu.sh b/scripts/fedora25/qemu.sh index f5502bc3d..0d99c0725 100644 --- a/scripts/fedora25/qemu.sh +++ b/scripts/fedora25/qemu.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -16,4 +42,4 @@ fi # Install the QEMU using Yum. printf "Installing the QEMU Tools.\n" -dnf install --assumeyes qemu-guest-agent; error +retry dnf install --assumeyes qemu-guest-agent; error diff --git a/scripts/fedora25/tuning.sh b/scripts/fedora25/tuning.sh index bdfd5c815..e43e609a8 100644 --- a/scripts/fedora25/tuning.sh +++ b/scripts/fedora25/tuning.sh @@ -1,7 +1,33 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure tuned -dnf install --assumeyes tuned +retry dnf install --assumeyes tuned systemctl enable tuned systemctl start tuned diff --git a/scripts/fedora25/virtualbox.sh b/scripts/fedora25/virtualbox.sh index dce14594f..54ddb3946 100644 --- a/scripts/fedora25/virtualbox.sh +++ b/scripts/fedora25/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -18,6 +44,13 @@ error() { printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" fi + if [ -f /var/log/vboxadd-setup.log ]; then + printf "\n\n/var/log/vboxadd-setup.log\n\n" + cat /var/log/vboxadd-setup.log + else + printf "\n\nThe /var/log/vboxadd-setup.log is missing...\n\n" + fi + exit 1 fi } @@ -33,7 +66,7 @@ printf "Installing the Virtual Box Tools.\n" # Read in the version number. VBOXVERSION=`cat /root/VBoxVersion.txt` -dnf install --assumeyes bzip2; error +retry dnf install --assumeyes bzip2; error # The group vboxsf is needed for shared folder access. getent group vboxsf >/dev/null || groupadd --system vboxsf; error diff --git a/scripts/fedora25/vmware.sh b/scripts/fedora25/vmware.sh index 7358d6f74..1d0856556 100644 --- a/scripts/fedora25/vmware.sh +++ b/scripts/fedora25/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -16,7 +42,7 @@ fi # Install the VMWare Tools from the Linux ISO. printf "Installing the VMWare Tools.\n" -dnf install --assumeyes open-vm-tools fuse-libs libdnet libicu libmspack +retry dnf install --assumeyes open-vm-tools fuse-libs libdnet libicu libmspack systemctl enable vmtoolsd systemctl start vmtoolsd diff --git a/scripts/fedora26/dnf.sh b/scripts/fedora26/dnf.sh index 24394eaf9..241395019 100644 --- a/scripts/fedora26/dnf.sh +++ b/scripts/fedora26/dnf.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then @@ -15,35 +41,35 @@ printf "\nretries=128\ndeltarpm=false\nmetadata_expire=20\ntimeout=300\n" >> /et sysctl net.ipv6.conf.all.disable_ipv6=1 # Update the base install first. -dnf upgrade --assumeyes; error +retry dnf upgrade --assumeyes; error # Needed to retrieve source code, and other misc system tools. -dnf install --assumeyes vim git wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils psmisc; error +retry dnf install --assumeyes vim git wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils psmisc; error # Packages needed beyond a minimal install to build and run magma. -dnf install --assumeyes valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive deltarpm net-tools; error +retry dnf install --assumeyes valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive deltarpm net-tools; error # Grab the required packages from the EPEL repo. -dnf install --assumeyes libbsd libbsd-devel inotify-tools; error +retry dnf install --assumeyes libbsd libbsd-devel inotify-tools; error # Boosts the available entropy which allows magma to start faster. -dnf install --assumeyes haveged; error +retry dnf install --assumeyes haveged; error # The daemon services magma relies upon. -dnf install --assumeyes libevent memcached; error +retry dnf install --assumeyes libevent memcached; error # Packages used to retrieve the magma code, but aren't required for building/running the daemon. -dnf install --assumeyes wget git rsync perl-Git perl-Error; error +retry dnf install --assumeyes wget git rsync perl-Git perl-Error; error # These packages are required for the stacie.py script, which requires the python cryptography package (installed via pip). -dnf install --assumeyes python-crypto python-cryptography +retry dnf install --assumeyes python-crypto python-cryptography # Packages used during the provisioning process and then removed during the cleanup stage. -dnf install --assumeyes sudo dmidecode; error +retry dnf install --assumeyes sudo dmidecode; error # Run update a second time, just in case it failed the first time. Mirror timeoutes and cosmic rays # often interupt the the provisioning process. -dnf upgrade --assumeyes; error +retry dnf upgrade --assumeyes; error # Reboot onto the new kernel (if applicable). shutdown --reboot --no-wall +1 diff --git a/scripts/fedora26/kernel.sh b/scripts/fedora26/kernel.sh index 1fededd5e..a5de18ccf 100644 --- a/scripts/fedora26/kernel.sh +++ b/scripts/fedora26/kernel.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\ndnf failed...\n\n" @@ -10,7 +36,7 @@ error() { # Now that the system is running atop the updated kernel, we can install the # development files for the kernel. These files are required to compile the # virtualization kernel modules later in the provisioning process. -dnf --assumeyes install kernel-tools kernel-devel kernel-headers; error +retry dnf --assumeyes install kernel-tools kernel-devel kernel-headers; error # Now that the system is running on the updated kernel, we can remove the # old kernel(s) from the system. diff --git a/scripts/fedora26/parallels.sh b/scripts/fedora26/parallels.sh index 1236ea67e..9e6d617a1 100644 --- a/scripts/fedora26/parallels.sh +++ b/scripts/fedora26/parallels.sh @@ -1,7 +1,33 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. -dnf install --assumeyes dmidecode +retry dnf install --assumeyes dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/fedora26/qemu.sh b/scripts/fedora26/qemu.sh index f5502bc3d..0d99c0725 100644 --- a/scripts/fedora26/qemu.sh +++ b/scripts/fedora26/qemu.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -16,4 +42,4 @@ fi # Install the QEMU using Yum. printf "Installing the QEMU Tools.\n" -dnf install --assumeyes qemu-guest-agent; error +retry dnf install --assumeyes qemu-guest-agent; error diff --git a/scripts/fedora26/tuning.sh b/scripts/fedora26/tuning.sh index bdfd5c815..e43e609a8 100644 --- a/scripts/fedora26/tuning.sh +++ b/scripts/fedora26/tuning.sh @@ -1,7 +1,33 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure tuned -dnf install --assumeyes tuned +retry dnf install --assumeyes tuned systemctl enable tuned systemctl start tuned diff --git a/scripts/fedora26/virtualbox.sh b/scripts/fedora26/virtualbox.sh index 84c5196e3..31d1b207f 100644 --- a/scripts/fedora26/virtualbox.sh +++ b/scripts/fedora26/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -18,6 +44,13 @@ error() { printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" fi + if [ -f /var/log/vboxadd-setup.log ]; then + printf "\n\n/var/log/vboxadd-setup.log\n\n" + cat /var/log/vboxadd-setup.log + else + printf "\n\nThe /var/log/vboxadd-setup.log is missing...\n\n" + fi + exit 1 fi } @@ -33,7 +66,7 @@ printf "Installing the Virtual Box Tools.\n" # Read in the version number. VBOXVERSION=`cat /root/VBoxVersion.txt` -dnf install --assumeyes dkms binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel bzip2; error +retry dnf install --assumeyes dkms binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel bzip2; error # The group vboxsf is needed for shared folder access. getent group vboxsf >/dev/null || groupadd --system vboxsf; error diff --git a/scripts/fedora26/vmware.sh b/scripts/fedora26/vmware.sh index 7358d6f74..1d0856556 100644 --- a/scripts/fedora26/vmware.sh +++ b/scripts/fedora26/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -16,7 +42,7 @@ fi # Install the VMWare Tools from the Linux ISO. printf "Installing the VMWare Tools.\n" -dnf install --assumeyes open-vm-tools fuse-libs libdnet libicu libmspack +retry dnf install --assumeyes open-vm-tools fuse-libs libdnet libicu libmspack systemctl enable vmtoolsd systemctl start vmtoolsd diff --git a/scripts/fedora27/dnf.sh b/scripts/fedora27/dnf.sh index 5c5210bb4..5aa24b387 100644 --- a/scripts/fedora27/dnf.sh +++ b/scripts/fedora27/dnf.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\ndnf failed...\n\n"; @@ -14,35 +40,35 @@ printf "\nretries=128\ndeltarpm=false\nmetadata_expire=20\ntimeout=300\n" >> /et sysctl net.ipv6.conf.all.disable_ipv6=1 # Update the base install first. -dnf upgrade --assumeyes; error +retry dnf upgrade --assumeyes; error # Needed to retrieve source code, and other misc system tools. -dnf install --assumeyes vim git wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils psmisc; error +retry dnf install --assumeyes vim git wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils psmisc; error # Packages needed beyond a minimal install to build and run magma. -dnf install --assumeyes valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive deltarpm net-tools; error +retry dnf install --assumeyes valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive deltarpm net-tools; error # Grab the required packages from the EPEL repo. -dnf install --assumeyes libbsd libbsd-devel inotify-tools; error +retry dnf install --assumeyes libbsd libbsd-devel inotify-tools; error # Boosts the available entropy which allows magma to start faster. -dnf install --assumeyes haveged; error +retry dnf install --assumeyes haveged; error # The daemon services magma relies upon. -dnf install --assumeyes libevent memcached; error +retry dnf install --assumeyes libevent memcached; error # Packages used to retrieve the magma code, but aren't required for building/running the daemon. -dnf install --assumeyes wget git rsync perl-Git perl-Error; error +retry dnf install --assumeyes wget git rsync perl-Git perl-Error; error # These packages are required for the stacie.py script, which requires the python cryptography package (installed via pip). -dnf install --assumeyes python-crypto python-cryptography +retry dnf install --assumeyes python-crypto python-cryptography # Packages used during the provisioning process and then removed during the cleanup stage. -dnf install --assumeyes sudo dmidecode; error +retry dnf install --assumeyes sudo dmidecode; error # Run update a second time, just in case it failed the first time. Mirror timeoutes and cosmic rays # often interupt the the provisioning process. -dnf upgrade --assumeyes; error +retry dnf upgrade --assumeyes; error # Reboot onto the new kernel (if applicable). shutdown --reboot --no-wall +1 diff --git a/scripts/fedora27/kernel.sh b/scripts/fedora27/kernel.sh index bfdfe02ce..264cedf8e 100644 --- a/scripts/fedora27/kernel.sh +++ b/scripts/fedora27/kernel.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\ndnf failed...\n\n" @@ -10,7 +36,7 @@ error() { # Now that the system is running atop the updated kernel, we can install the # development files for the kernel. These files are required to compile the # virtualization kernel modules later in the provisioning process. -dnf --assumeyes install kernel-tools kernel-devel kernel-headers; error +retry dnf --assumeyes install kernel-tools kernel-devel kernel-headers; error # Now that the system is running on the updated kernel, we can remove the # old kernel(s) from the system. diff --git a/scripts/fedora27/magma.sh b/scripts/fedora27/magma.sh index 1abe8d0e7..6a2a549d1 100644 --- a/scripts/fedora27/magma.sh +++ b/scripts/fedora27/magma.sh @@ -1,6 +1,31 @@ #!/bin/bash -eux -# -# Setup the the box. This runs as root + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Create the clamav user to avoid spurious errors. useradd clamav @@ -21,7 +46,7 @@ printf "* hard nofile 65536\n" >> /etc/security/limits.d/50-magmad.con chcon system_u:object_r:etc_t:s0 /etc/security/limits.d/50-magmad.conf # Packages required to compile magma. -dnf install --assumeyes zlib-devel +retry dnf install --assumeyes cmake zlib-devel if [ -d /home/vagrant/ ]; then OUTPUT="/home/vagrant/magma-build.sh" @@ -49,6 +74,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -97,7 +129,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/fedora27/mariadb.sh b/scripts/fedora27/mariadb.sh index bbe91cb9c..9b2ef445d 100644 --- a/scripts/fedora27/mariadb.sh +++ b/scripts/fedora27/mariadb.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Install MariaDB -dnf install --assumeyes libevent memcached mariadb mariadb-libs mariadb-server perl-DBI perl-DBD-MySQL +retry dnf install --assumeyes libevent memcached mariadb mariadb-libs mariadb-server perl-DBI perl-DBD-MySQL # Change the default temporary table directory or else the schema reset will fail when it creates a temp table. printf "\n\n[server]\ntmpdir=/tmp/\n\n" >> /etc/my.cnf.d/server-tmpdir.cnf diff --git a/scripts/fedora27/parallels.sh b/scripts/fedora27/parallels.sh index 1236ea67e..9e6d617a1 100644 --- a/scripts/fedora27/parallels.sh +++ b/scripts/fedora27/parallels.sh @@ -1,7 +1,33 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. -dnf install --assumeyes dmidecode +retry dnf install --assumeyes dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/fedora27/postfix.sh b/scripts/fedora27/postfix.sh index 45a2415b0..b1b3080a7 100644 --- a/scripts/fedora27/postfix.sh +++ b/scripts/fedora27/postfix.sh @@ -1,8 +1,34 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The postfix server for message relays. The checkpolicy, policycoreutils and the- # policycoreutils-python packages are needed to compile the selinux module below. -dnf --assumeyes install postfix checkpolicy policycoreutils policycoreutils-python policycoreutils-python-utils +retry dnf --assumeyes install postfix checkpolicy policycoreutils policycoreutils-python policycoreutils-python-utils # Postfix opportunistic TLS relay. printf "smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt\n" >> /etc/postfix/main.cf diff --git a/scripts/fedora27/qemu.sh b/scripts/fedora27/qemu.sh index f5502bc3d..0d99c0725 100644 --- a/scripts/fedora27/qemu.sh +++ b/scripts/fedora27/qemu.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -16,4 +42,4 @@ fi # Install the QEMU using Yum. printf "Installing the QEMU Tools.\n" -dnf install --assumeyes qemu-guest-agent; error +retry dnf install --assumeyes qemu-guest-agent; error diff --git a/scripts/fedora27/tuning.sh b/scripts/fedora27/tuning.sh index bdfd5c815..e43e609a8 100644 --- a/scripts/fedora27/tuning.sh +++ b/scripts/fedora27/tuning.sh @@ -1,7 +1,33 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure tuned -dnf install --assumeyes tuned +retry dnf install --assumeyes tuned systemctl enable tuned systemctl start tuned diff --git a/scripts/fedora27/virtualbox.sh b/scripts/fedora27/virtualbox.sh index 3765288b2..58b8454a5 100644 --- a/scripts/fedora27/virtualbox.sh +++ b/scripts/fedora27/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -17,6 +43,13 @@ error() { else printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" fi + + if [ -f /var/log/vboxadd-setup.log ]; then + printf "\n\n/var/log/vboxadd-setup.log\n\n" + cat /var/log/vboxadd-setup.log + else + printf "\n\nThe /var/log/vboxadd-setup.log is missing...\n\n" + fi exit 1 fi } @@ -32,7 +65,7 @@ printf "Installing the Virtual Box Tools.\n" # Read in the version number. VBOXVERSION=`cat /root/VBoxVersion.txt` -dnf install --assumeyes binutils bzip2 dkms gcc gcc-c++ glibc-devel glibc-headers kBuild kernel-devel kernel-headers libgomp libstdc++-static libxslt make openssl-devel pam-devel patch python2-devel systemd zlib-devel; error +retry dnf install --assumeyes binutils bzip2 dkms gcc gcc-c++ glibc-devel glibc-headers kBuild kernel-devel kernel-headers libgomp libstdc++-static libxslt make openssl-devel pam-devel patch python2-devel systemd zlib-devel; error # The group vboxsf is needed for shared folder access. getent group vboxsf >/dev/null || groupadd --system vboxsf; error diff --git a/scripts/fedora27/vmware.sh b/scripts/fedora27/vmware.sh index 7358d6f74..1d0856556 100644 --- a/scripts/fedora27/vmware.sh +++ b/scripts/fedora27/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -16,7 +42,7 @@ fi # Install the VMWare Tools from the Linux ISO. printf "Installing the VMWare Tools.\n" -dnf install --assumeyes open-vm-tools fuse-libs libdnet libicu libmspack +retry dnf install --assumeyes open-vm-tools fuse-libs libdnet libicu libmspack systemctl enable vmtoolsd systemctl start vmtoolsd diff --git a/scripts/fedora28/dnf.sh b/scripts/fedora28/dnf.sh index 5c5210bb4..5aa24b387 100644 --- a/scripts/fedora28/dnf.sh +++ b/scripts/fedora28/dnf.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\ndnf failed...\n\n"; @@ -14,35 +40,35 @@ printf "\nretries=128\ndeltarpm=false\nmetadata_expire=20\ntimeout=300\n" >> /et sysctl net.ipv6.conf.all.disable_ipv6=1 # Update the base install first. -dnf upgrade --assumeyes; error +retry dnf upgrade --assumeyes; error # Needed to retrieve source code, and other misc system tools. -dnf install --assumeyes vim git wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils psmisc; error +retry dnf install --assumeyes vim git wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils psmisc; error # Packages needed beyond a minimal install to build and run magma. -dnf install --assumeyes valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive deltarpm net-tools; error +retry dnf install --assumeyes valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive deltarpm net-tools; error # Grab the required packages from the EPEL repo. -dnf install --assumeyes libbsd libbsd-devel inotify-tools; error +retry dnf install --assumeyes libbsd libbsd-devel inotify-tools; error # Boosts the available entropy which allows magma to start faster. -dnf install --assumeyes haveged; error +retry dnf install --assumeyes haveged; error # The daemon services magma relies upon. -dnf install --assumeyes libevent memcached; error +retry dnf install --assumeyes libevent memcached; error # Packages used to retrieve the magma code, but aren't required for building/running the daemon. -dnf install --assumeyes wget git rsync perl-Git perl-Error; error +retry dnf install --assumeyes wget git rsync perl-Git perl-Error; error # These packages are required for the stacie.py script, which requires the python cryptography package (installed via pip). -dnf install --assumeyes python-crypto python-cryptography +retry dnf install --assumeyes python-crypto python-cryptography # Packages used during the provisioning process and then removed during the cleanup stage. -dnf install --assumeyes sudo dmidecode; error +retry dnf install --assumeyes sudo dmidecode; error # Run update a second time, just in case it failed the first time. Mirror timeoutes and cosmic rays # often interupt the the provisioning process. -dnf upgrade --assumeyes; error +retry dnf upgrade --assumeyes; error # Reboot onto the new kernel (if applicable). shutdown --reboot --no-wall +1 diff --git a/scripts/fedora28/kernel.sh b/scripts/fedora28/kernel.sh index 1fededd5e..a5de18ccf 100644 --- a/scripts/fedora28/kernel.sh +++ b/scripts/fedora28/kernel.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\ndnf failed...\n\n" @@ -10,7 +36,7 @@ error() { # Now that the system is running atop the updated kernel, we can install the # development files for the kernel. These files are required to compile the # virtualization kernel modules later in the provisioning process. -dnf --assumeyes install kernel-tools kernel-devel kernel-headers; error +retry dnf --assumeyes install kernel-tools kernel-devel kernel-headers; error # Now that the system is running on the updated kernel, we can remove the # old kernel(s) from the system. diff --git a/scripts/fedora28/magma.sh b/scripts/fedora28/magma.sh index 1abe8d0e7..6a2a549d1 100644 --- a/scripts/fedora28/magma.sh +++ b/scripts/fedora28/magma.sh @@ -1,6 +1,31 @@ #!/bin/bash -eux -# -# Setup the the box. This runs as root + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Create the clamav user to avoid spurious errors. useradd clamav @@ -21,7 +46,7 @@ printf "* hard nofile 65536\n" >> /etc/security/limits.d/50-magmad.con chcon system_u:object_r:etc_t:s0 /etc/security/limits.d/50-magmad.conf # Packages required to compile magma. -dnf install --assumeyes zlib-devel +retry dnf install --assumeyes cmake zlib-devel if [ -d /home/vagrant/ ]; then OUTPUT="/home/vagrant/magma-build.sh" @@ -49,6 +74,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -97,7 +129,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/fedora28/mariadb.sh b/scripts/fedora28/mariadb.sh index bbe91cb9c..9b2ef445d 100644 --- a/scripts/fedora28/mariadb.sh +++ b/scripts/fedora28/mariadb.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Install MariaDB -dnf install --assumeyes libevent memcached mariadb mariadb-libs mariadb-server perl-DBI perl-DBD-MySQL +retry dnf install --assumeyes libevent memcached mariadb mariadb-libs mariadb-server perl-DBI perl-DBD-MySQL # Change the default temporary table directory or else the schema reset will fail when it creates a temp table. printf "\n\n[server]\ntmpdir=/tmp/\n\n" >> /etc/my.cnf.d/server-tmpdir.cnf diff --git a/scripts/fedora28/parallels.sh b/scripts/fedora28/parallels.sh index 1236ea67e..9e6d617a1 100644 --- a/scripts/fedora28/parallels.sh +++ b/scripts/fedora28/parallels.sh @@ -1,7 +1,33 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. -dnf install --assumeyes dmidecode +retry dnf install --assumeyes dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/fedora28/postfix.sh b/scripts/fedora28/postfix.sh index 45a2415b0..b1b3080a7 100644 --- a/scripts/fedora28/postfix.sh +++ b/scripts/fedora28/postfix.sh @@ -1,8 +1,34 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The postfix server for message relays. The checkpolicy, policycoreutils and the- # policycoreutils-python packages are needed to compile the selinux module below. -dnf --assumeyes install postfix checkpolicy policycoreutils policycoreutils-python policycoreutils-python-utils +retry dnf --assumeyes install postfix checkpolicy policycoreutils policycoreutils-python policycoreutils-python-utils # Postfix opportunistic TLS relay. printf "smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt\n" >> /etc/postfix/main.cf diff --git a/scripts/fedora28/qemu.sh b/scripts/fedora28/qemu.sh index f5502bc3d..0d99c0725 100644 --- a/scripts/fedora28/qemu.sh +++ b/scripts/fedora28/qemu.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -16,4 +42,4 @@ fi # Install the QEMU using Yum. printf "Installing the QEMU Tools.\n" -dnf install --assumeyes qemu-guest-agent; error +retry dnf install --assumeyes qemu-guest-agent; error diff --git a/scripts/fedora28/tuning.sh b/scripts/fedora28/tuning.sh index bdfd5c815..e43e609a8 100644 --- a/scripts/fedora28/tuning.sh +++ b/scripts/fedora28/tuning.sh @@ -1,7 +1,33 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure tuned -dnf install --assumeyes tuned +retry dnf install --assumeyes tuned systemctl enable tuned systemctl start tuned diff --git a/scripts/fedora28/virtualbox.sh b/scripts/fedora28/virtualbox.sh index bee20a578..50cb4ed3a 100644 --- a/scripts/fedora28/virtualbox.sh +++ b/scripts/fedora28/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -32,7 +58,7 @@ printf "Installing the Virtual Box Tools.\n" # Read in the version number. VBOXVERSION=`cat /root/VBoxVersion.txt` -dnf install --assumeyes virtualbox-guest-additions; error +retry dnf install --assumeyes virtualbox-guest-additions; error # dnf install --assumeyes dkms binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel bzip2 kernel-headers kernel-devel kernel-cross-headers; error # diff --git a/scripts/fedora28/vmware.sh b/scripts/fedora28/vmware.sh index 7358d6f74..1d0856556 100644 --- a/scripts/fedora28/vmware.sh +++ b/scripts/fedora28/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -16,7 +42,7 @@ fi # Install the VMWare Tools from the Linux ISO. printf "Installing the VMWare Tools.\n" -dnf install --assumeyes open-vm-tools fuse-libs libdnet libicu libmspack +retry dnf install --assumeyes open-vm-tools fuse-libs libdnet libicu libmspack systemctl enable vmtoolsd systemctl start vmtoolsd diff --git a/scripts/fedora29/dnf.sh b/scripts/fedora29/dnf.sh index 5c5210bb4..5aa24b387 100644 --- a/scripts/fedora29/dnf.sh +++ b/scripts/fedora29/dnf.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\ndnf failed...\n\n"; @@ -14,35 +40,35 @@ printf "\nretries=128\ndeltarpm=false\nmetadata_expire=20\ntimeout=300\n" >> /et sysctl net.ipv6.conf.all.disable_ipv6=1 # Update the base install first. -dnf upgrade --assumeyes; error +retry dnf upgrade --assumeyes; error # Needed to retrieve source code, and other misc system tools. -dnf install --assumeyes vim git wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils psmisc; error +retry dnf install --assumeyes vim git wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils psmisc; error # Packages needed beyond a minimal install to build and run magma. -dnf install --assumeyes valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive deltarpm net-tools; error +retry dnf install --assumeyes valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive deltarpm net-tools; error # Grab the required packages from the EPEL repo. -dnf install --assumeyes libbsd libbsd-devel inotify-tools; error +retry dnf install --assumeyes libbsd libbsd-devel inotify-tools; error # Boosts the available entropy which allows magma to start faster. -dnf install --assumeyes haveged; error +retry dnf install --assumeyes haveged; error # The daemon services magma relies upon. -dnf install --assumeyes libevent memcached; error +retry dnf install --assumeyes libevent memcached; error # Packages used to retrieve the magma code, but aren't required for building/running the daemon. -dnf install --assumeyes wget git rsync perl-Git perl-Error; error +retry dnf install --assumeyes wget git rsync perl-Git perl-Error; error # These packages are required for the stacie.py script, which requires the python cryptography package (installed via pip). -dnf install --assumeyes python-crypto python-cryptography +retry dnf install --assumeyes python-crypto python-cryptography # Packages used during the provisioning process and then removed during the cleanup stage. -dnf install --assumeyes sudo dmidecode; error +retry dnf install --assumeyes sudo dmidecode; error # Run update a second time, just in case it failed the first time. Mirror timeoutes and cosmic rays # often interupt the the provisioning process. -dnf upgrade --assumeyes; error +retry dnf upgrade --assumeyes; error # Reboot onto the new kernel (if applicable). shutdown --reboot --no-wall +1 diff --git a/scripts/fedora29/kernel.sh b/scripts/fedora29/kernel.sh index 1fededd5e..a5de18ccf 100644 --- a/scripts/fedora29/kernel.sh +++ b/scripts/fedora29/kernel.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\ndnf failed...\n\n" @@ -10,7 +36,7 @@ error() { # Now that the system is running atop the updated kernel, we can install the # development files for the kernel. These files are required to compile the # virtualization kernel modules later in the provisioning process. -dnf --assumeyes install kernel-tools kernel-devel kernel-headers; error +retry dnf --assumeyes install kernel-tools kernel-devel kernel-headers; error # Now that the system is running on the updated kernel, we can remove the # old kernel(s) from the system. diff --git a/scripts/fedora29/magma.sh b/scripts/fedora29/magma.sh index 1abe8d0e7..6a2a549d1 100644 --- a/scripts/fedora29/magma.sh +++ b/scripts/fedora29/magma.sh @@ -1,6 +1,31 @@ #!/bin/bash -eux -# -# Setup the the box. This runs as root + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Create the clamav user to avoid spurious errors. useradd clamav @@ -21,7 +46,7 @@ printf "* hard nofile 65536\n" >> /etc/security/limits.d/50-magmad.con chcon system_u:object_r:etc_t:s0 /etc/security/limits.d/50-magmad.conf # Packages required to compile magma. -dnf install --assumeyes zlib-devel +retry dnf install --assumeyes cmake zlib-devel if [ -d /home/vagrant/ ]; then OUTPUT="/home/vagrant/magma-build.sh" @@ -49,6 +74,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -97,7 +129,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/fedora29/mariadb.sh b/scripts/fedora29/mariadb.sh index bbe91cb9c..9b2ef445d 100644 --- a/scripts/fedora29/mariadb.sh +++ b/scripts/fedora29/mariadb.sh @@ -1,7 +1,33 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Install MariaDB -dnf install --assumeyes libevent memcached mariadb mariadb-libs mariadb-server perl-DBI perl-DBD-MySQL +retry dnf install --assumeyes libevent memcached mariadb mariadb-libs mariadb-server perl-DBI perl-DBD-MySQL # Change the default temporary table directory or else the schema reset will fail when it creates a temp table. printf "\n\n[server]\ntmpdir=/tmp/\n\n" >> /etc/my.cnf.d/server-tmpdir.cnf diff --git a/scripts/fedora29/parallels.sh b/scripts/fedora29/parallels.sh index 1236ea67e..9e6d617a1 100644 --- a/scripts/fedora29/parallels.sh +++ b/scripts/fedora29/parallels.sh @@ -1,7 +1,33 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. -dnf install --assumeyes dmidecode +retry dnf install --assumeyes dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/fedora29/postfix.sh b/scripts/fedora29/postfix.sh index 45a2415b0..b1b3080a7 100644 --- a/scripts/fedora29/postfix.sh +++ b/scripts/fedora29/postfix.sh @@ -1,8 +1,34 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # The postfix server for message relays. The checkpolicy, policycoreutils and the- # policycoreutils-python packages are needed to compile the selinux module below. -dnf --assumeyes install postfix checkpolicy policycoreutils policycoreutils-python policycoreutils-python-utils +retry dnf --assumeyes install postfix checkpolicy policycoreutils policycoreutils-python policycoreutils-python-utils # Postfix opportunistic TLS relay. printf "smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt\n" >> /etc/postfix/main.cf diff --git a/scripts/fedora29/qemu.sh b/scripts/fedora29/qemu.sh index f5502bc3d..0d99c0725 100644 --- a/scripts/fedora29/qemu.sh +++ b/scripts/fedora29/qemu.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -16,4 +42,4 @@ fi # Install the QEMU using Yum. printf "Installing the QEMU Tools.\n" -dnf install --assumeyes qemu-guest-agent; error +retry dnf install --assumeyes qemu-guest-agent; error diff --git a/scripts/fedora29/tuning.sh b/scripts/fedora29/tuning.sh index bdfd5c815..e43e609a8 100644 --- a/scripts/fedora29/tuning.sh +++ b/scripts/fedora29/tuning.sh @@ -1,7 +1,33 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure tuned -dnf install --assumeyes tuned +retry dnf install --assumeyes tuned systemctl enable tuned systemctl start tuned diff --git a/scripts/fedora29/virtualbox.sh b/scripts/fedora29/virtualbox.sh index cf715f2b9..1372451c1 100644 --- a/scripts/fedora29/virtualbox.sh +++ b/scripts/fedora29/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -32,10 +58,10 @@ printf "Installing the Virtual Box Tools.\n" # Read in the version number. VBOXVERSION=`cat /root/VBoxVersion.txt` -dnf install --assumeyes virtualbox-guest-additions; error +retry dnf install --assumeyes virtualbox-guest-additions; error # # Experimental logic. Guessing it doesn't work yet because the RPM is dependent upon a repo specific kernel dependency. -# curl --location --output akmod-VirtualBox-5.2.20-1.fc29.x86_64.rpm "https://download1.rpmfusion.org/free/fedora/releases/29/Everything/x86_64/os/Packages/a/akmod-VirtualBox-5.2.20-1.fc29.x86_64.rpm"; error +# retry curl --location --output akmod-VirtualBox-5.2.20-1.fc29.x86_64.rpm "https://download1.rpmfusion.org/free/fedora/releases/29/Everything/x86_64/os/Packages/a/akmod-VirtualBox-5.2.20-1.fc29.x86_64.rpm"; error # echo "0b898908a8cf8965f5931f3cdc01f231743e858319cd83419d54863973bb584b akmod-VirtualBox-5.2.20-1.fc29.x86_64.rpm" | sha256sum --check; error # dnf install --assumeyes akmod-VirtualBox-5.2.20-1.fc29.x86_64.rpm; error diff --git a/scripts/fedora29/vmware.sh b/scripts/fedora29/vmware.sh index 7358d6f74..1d0856556 100644 --- a/scripts/fedora29/vmware.sh +++ b/scripts/fedora29/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -16,7 +42,7 @@ fi # Install the VMWare Tools from the Linux ISO. printf "Installing the VMWare Tools.\n" -dnf install --assumeyes open-vm-tools fuse-libs libdnet libicu libmspack +retry dnf install --assumeyes open-vm-tools fuse-libs libdnet libicu libmspack systemctl enable vmtoolsd systemctl start vmtoolsd diff --git a/scripts/fedora30/base.sh b/scripts/fedora30/base.sh new file mode 100644 index 000000000..f7ac34952 --- /dev/null +++ b/scripts/fedora30/base.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +# Ensure a nameserver is being used that won't return an IP for non-existent domain names. +printf "nameserver 4.2.2.1\nnameserver 4.2.2.2\nnameserver 208.67.220.220\n"> /etc/resolv.conf + +# Set the local hostname to resolve properly. +printf "\n127.0.0.1 magma.builder\n\n" >> /etc/hosts + +# Ensure memcached doesn't try to use IPv6. +if [ -f /etc/sysconfig/memcached ]; then + sed -i "s/[,]\?\:\:1[,]\?//g" /etc/sysconfig/memcached +fi + +# Enable and start the daemons. +systemctl enable haveged +systemctl enable memcached +systemctl start haveged +systemctl start memcached + +# Disable IPv6 and the iptables module used to firewall IPv6. +printf "\n\nnet.ipv6.conf.all.disable_ipv6 = 1\n" >> /etc/sysctl.conf + +sed -i -e "/IPV6INIT.*/d;$ a IPV6INIT=no" /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i -e "/IPV6_AUTOCONF.*/d;$ a IPV6_AUTOCONF=no" /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i -e "/IPV6_DEFROUTE.*/d;$ a IPV6_DEFROUTE=no" /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i -e "/IPV6_PEERDNS.*/d;$ a IPV6_PEERDNS=no" /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i -e "/IPV6_PEERROUTES.*/d;$ a IPV6_PEERROUTES=no" /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i -e "/IPV6FORWARDING.*/d;$ a IPV6FORWARDING=no" /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i -e "/IPV6_AUTOTUNNEL.*/d;$ a IPV6_AUTOTUNNEL=no" /etc/sysconfig/network-scripts/ifcfg-eth0 + + +# Ensure good DNS servers are being used. +if [ -f /etc/sysconfig/network-scripts/ifcfg-eth0 ]; then + printf "DNS1=4.2.2.1\n" >> /etc/sysconfig/network-scripts/ifcfg-eth0 + printf "DNS2=4.2.2.2\n" >> /etc/sysconfig/network-scripts/ifcfg-eth0 +fi + +# Close a potential security hole. +systemctl disable remote-fs.target + +# Disable kernel dumping. +# systemctl disable kdump.service + + +# Setup the python path and increase the history size. +printf "export HISTSIZE=\"100000\"\n" > /etc/profile.d/histsize.sh +chcon "system_u:object_r:bin_t:s0" /etc/profile.d/histsize.sh +chmod 644 /etc/profile.d/histsize.sh + +# Set the timezone to Pacific time. +printf "ZONE=\"America/Los_Angeles\"\n" > /etc/sysconfig/clock + +# Reboot +shutdown --reboot --no-wall +1 diff --git a/scripts/fedora30/cleanup.sh b/scripts/fedora30/cleanup.sh new file mode 100644 index 000000000..6870d1f43 --- /dev/null +++ b/scripts/fedora30/cleanup.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +printf "Cleanup stage.\n" + +# Make sure the ethnernet configuration script doesn't retain identifiers. +printf "Remove the ethernet identity values.\n" +sed -i /UUID/d /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i /HWADDR/d /etc/sysconfig/network-scripts/ifcfg-eth0 + +# Clean up the dnf data. +printf "Remove packages only required for provisioning purposes and then dump the repository cache.\n" +dnf --assumeyes clean all + +# Remove the installation logs. +rm --force /root/anaconda-ks.cfg /root/install.log /root/install.log.syslog + +# Clear the command history. +export HISTSIZE=0 + +# Truncate the log files. +printf "Truncate the log files.\n" +find /var/log -type f -exec truncate --size=0 {} \; + +# Wipe the temp directory. +printf "Purge the setup files and temporary data.\n" +rm --recursive --force /var/tmp/* /tmp/* /var/cache/dnf/* /tmp/ks-script* diff --git a/scripts/fedora30/dnf.sh b/scripts/fedora30/dnf.sh new file mode 100644 index 000000000..5aa24b387 --- /dev/null +++ b/scripts/fedora30/dnf.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +error() { + if [ $? -ne 0 ]; then + printf "\n\ndnf failed...\n\n"; + exit 1 + fi +} + +# Tell dnf to retry 128 times before failing, so unattended installs don't skip packages when errors occur. +printf "\nretries=128\ndeltarpm=false\nmetadata_expire=20\ntimeout=300\n" >> /etc/dnf/dnf.conf + +# Disable IPv6 or dnf will resolve mirror names to IPv6 address and then fail to connect with them. +sysctl net.ipv6.conf.all.disable_ipv6=1 + +# Update the base install first. +retry dnf upgrade --assumeyes; error + +# Needed to retrieve source code, and other misc system tools. +retry dnf install --assumeyes vim git wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils psmisc; error + +# Packages needed beyond a minimal install to build and run magma. +retry dnf install --assumeyes valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive deltarpm net-tools; error + +# Grab the required packages from the EPEL repo. +retry dnf install --assumeyes libbsd libbsd-devel inotify-tools; error + +# Boosts the available entropy which allows magma to start faster. +retry dnf install --assumeyes haveged; error + +# The daemon services magma relies upon. +retry dnf install --assumeyes libevent memcached; error + +# Packages used to retrieve the magma code, but aren't required for building/running the daemon. +retry dnf install --assumeyes wget git rsync perl-Git perl-Error; error + +# These packages are required for the stacie.py script, which requires the python cryptography package (installed via pip). +retry dnf install --assumeyes python-crypto python-cryptography + +# Packages used during the provisioning process and then removed during the cleanup stage. +retry dnf install --assumeyes sudo dmidecode; error + +# Run update a second time, just in case it failed the first time. Mirror timeoutes and cosmic rays +# often interupt the the provisioning process. +retry dnf upgrade --assumeyes; error + +# Reboot onto the new kernel (if applicable). +shutdown --reboot --no-wall +1 diff --git a/scripts/fedora30/fixdns.sh b/scripts/fedora30/fixdns.sh new file mode 100644 index 000000000..1a269141b --- /dev/null +++ b/scripts/fedora30/fixdns.sh @@ -0,0 +1,19 @@ +#!/bin/bash -eux + +# Works around a bug which slows down DNS queries on Virtualbox. +# https://access.redhat.com/site/solutions/58625 + +# Bail if we are not running atop VirtualBox. +if [[ "$PACKER_BUILDER_TYPE" != virtualbox-iso ]]; then + exit 0 +fi + +printf "Fixing the problem with slow DNS queries.\n" + +cat >> /etc/NetworkManager/dispatcher.d/fix-slow-dns <> /etc/resolv.conf +EOF + +chmod +x /etc/NetworkManager/dispatcher.d/fix-slow-dns +systemctl restart NetworkManager.service diff --git a/scripts/fedora30/kernel.sh b/scripts/fedora30/kernel.sh new file mode 100644 index 000000000..a5de18ccf --- /dev/null +++ b/scripts/fedora30/kernel.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +error() { + if [ $? -ne 0 ]; then + printf "\n\ndnf failed...\n\n" + exit 1 + fi +} + +# Now that the system is running atop the updated kernel, we can install the +# development files for the kernel. These files are required to compile the +# virtualization kernel modules later in the provisioning process. +retry dnf --assumeyes install kernel-tools kernel-devel kernel-headers; error + +# Now that the system is running on the updated kernel, we can remove the +# old kernel(s) from the system. +if [[ `rpm -q kernel | wc -l` != 1 ]]; then + dnf --setopt=protected_packages= --assumeyes remove $(dnf repoquery --installonly --latest-limit=-1 -q); error +fi diff --git a/scripts/fedora30/magma.sh b/scripts/fedora30/magma.sh new file mode 100644 index 000000000..6a2a549d1 --- /dev/null +++ b/scripts/fedora30/magma.sh @@ -0,0 +1,169 @@ +#!/bin/bash -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# Create the clamav user to avoid spurious errors. +useradd clamav + +# Set the local hostname to resolve properly. +printf "\n127.0.0.1 bazinga.localdomain\n\n" >> /etc/hosts + +# Find out how much RAM is installed, and what 50% would be in KB. +TOTALMEM=`free -k | grep -E "^Mem:" | awk -F' ' '{print $2}'` +HALFMEM=`echo $(($TOTALMEM/2))` + +# Setup the memory locking limits. +printf "* soft memlock $HALFMEM\n" > /etc/security/limits.d/50-magmad.conf +printf "* hard memlock $HALFMEM\n" >> /etc/security/limits.d/50-magmad.conf +printf "* soft nofile 65536\n" >> /etc/security/limits.d/50-magmad.conf +printf "* hard nofile 65536\n" >> /etc/security/limits.d/50-magmad.conf + +# Fix the SELinux context. +chcon system_u:object_r:etc_t:s0 /etc/security/limits.d/50-magmad.conf + +# Packages required to compile magma. +retry dnf install --assumeyes cmake zlib-devel + +if [ -d /home/vagrant/ ]; then + OUTPUT="/home/vagrant/magma-build.sh" +else + OUTPUT="/root/magma-build.sh" +fi + +# Grab a snapshot of the development branch. +cat <<-EOF > $OUTPUT +#!/bin/bash + +error() { + if [ \$? -ne 0 ]; then + printf "\n\nmagma daemon compilation failed...\n\n"; + exit 1 + fi +} + +if [ -x /usr/bin/id ]; then + ID=\`/usr/bin/id -u\` + if [ -n "\$ID" -a "\$ID" -eq 0 ]; then + systemctl start mariadb.service + systemctl start postfix.service + systemctl start memcached.service + fi +fi + +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + +# We need to give the box 30 seconds to get the networking setup or +# the git clone operation will fail. +sleep 30 + +# Temporary [hopefully] workaround to avoid [yet another] bug in NSS. +export NSS_DISABLE_HW_AES=1 + +# If the directory is present, remove it so we can clone a fresh copy. +if [ -d magma-develop ]; then + rm --recursive --force magma-develop +fi + +# Clone the magma repository off Github. +git clone https://github.com/lavabit/magma.git magma-develop; error +cd magma-develop; error + +# Setup the bin links, just in case we need to troubleshoot things manually. +dev/scripts/linkup.sh; error + +# Compile the dependencies into a shared library. +dev/scripts/builders/build.lib.sh all; error + +# Reset the sandbox database and storage files. +dev/scripts/database/schema.reset.sh; error + +# Enable the anti-virus engine and update the signatures. +dev/scripts/freshen/freshen.clamav.sh 2>&1 | grep -v WARNING | grep -v PANIC; error +sed -i -e "s/virus.available = false/virus.available = true/g" sandbox/etc/magma.sandbox.config + +# Ensure the sandbox config uses port 2525 for relays. +sed -i -e "/magma.relay\[[0-9]*\].name.*/d" sandbox/etc/magma.sandbox.config +sed -i -e "/magma.relay\[[0-9]*\].port.*/d" sandbox/etc/magma.sandbox.config +sed -i -e "/magma.relay\[[0-9]*\].secure.*/d" sandbox/etc/magma.sandbox.config +printf "\n\nmagma.relay[1].name = localhost\nmagma.relay[1].port = 2525\n\n" >> sandbox/etc/magma.sandbox.config + +# Bug fix... create the scan directory so ClamAV unit tests work. +if [ ! -d 'sandbox/spool/scan/' ]; then + mkdir -p sandbox/spool/scan/ +fi + +# Compile the daemon and then compile the unit tests. +make all; error + +# Run the unit tests. +dev/scripts/launch/check.run.sh + +# If the unit tests fail, print an error, but contine running. +if [ \$? -ne 0 ]; then + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; + for i in 1 2 3; do + printf "\a"; sleep 1 + done + sleep 12 +fi + +# Alternatively, run the unit tests atop Valgrind. +# Note this takes awhile when the anti-virus engine is enabled. +# dev/scripts/launch/check.vg + +# Daemonize instead of running on the console. +# sed -i -e "s/magma.output.file = false/magma.output.file = true/g" sandbox/etc/magma.sandbox.config +# sed -i -e "s/magma.system.daemonize = false/magma.system.daemonize = true/g" sandbox/etc/magma.sandbox.config + +# Launch the daemon. +# ./magmad --config magma.system.daemonize=true sandbox/etc/magma.sandbox.config + +# Save the result. +# RETVAL=\$? + +# Give the daemon time to start before exiting. +sleep 15 + +# Exit wit a zero so Vagrant doesn't think a failed unit test is a provision failure. +exit \$RETVAL +EOF + +# Make the script executable. +if [ -d /home/vagrant/ ]; then + chown vagrant:vagrant /home/vagrant/magma-build.sh + chmod +x /home/vagrant/magma-build.sh +else + chmod +x /root/magma-build.sh +fi + +# Customize the message of the day +printf "Magma Daemon Development Environment\nTo download and compile magma, just execute the magma-build.sh script.\n\n" > /etc/motd diff --git a/scripts/fedora30/mariadb.sh b/scripts/fedora30/mariadb.sh new file mode 100644 index 000000000..9b2ef445d --- /dev/null +++ b/scripts/fedora30/mariadb.sh @@ -0,0 +1,96 @@ +#!/bin/bash -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# Install MariaDB +retry dnf install --assumeyes libevent memcached mariadb mariadb-libs mariadb-server perl-DBI perl-DBD-MySQL + +# Change the default temporary table directory or else the schema reset will fail when it creates a temp table. +printf "\n\n[server]\ntmpdir=/tmp/\n\n" >> /etc/my.cnf.d/server-tmpdir.cnf +chcon system_u:object_r:mysqld_etc_t:s0 /etc/my.cnf.d/server-tmpdir.cnf + +printf "[mysqld]\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "back_log = 1500\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "table_open_cache = 520\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "table_open_cache_instances = 32\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "key_buffer_size = 16M\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "query_cache_type = 0\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "join_buffer_size = 32K\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "sort_buffer_size = 32K\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_buffer_pool_size=128M\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_use_native_aio=1\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_data_file_path=ibdata1:50M:autoextend\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_file_per_table=1\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_open_files=100\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_flush_log_at_trx_commit=1\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_lock_wait_timeout = 120\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_doublewrite=0\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_buffer_pool_instances=16\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_mtflush_threads=16\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_compression_level=6\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_compression_algorithm=zlib\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "max-prepared-stmt-count=400000\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_fast_shutdown=0\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_log_buffer_size=128M\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_log_files_in_group=3\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_log_file_size=128M\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_thread_concurrency=32\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_flush_method = O_DIRECT\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_write_io_threads=16\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_read_io_threads=16\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_max_dirty_pages_pct=10\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "skip-name-resolve\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_adaptive_flushing=1\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_file_format=barracuda\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_fast_shutdown=0\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_mtflush_threads=16\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_use_mtflush=1\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_checksum_algorithm=crc32\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_flush_neighbors=0\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_lru_scan_depth=2500 \n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_io_capacity=25000\n" >> /etc/my.cnf.d/server-buffers.cnf +printf "innodb_io_capacity_max=35000\n" >> /etc/my.cnf.d/server-buffers.cnf +chcon system_u:object_r:mysqld_etc_t:s0 /etc/my.cnf.d/server-buffers.cnf + +# Enable and start the daemons. +systemctl enable mariadb +systemctl start mariadb + +# Setup the mysql root account with a random password. +export PRAND=`openssl rand -base64 18` +mysqladmin --user=root password "$PRAND" + +# Allow the root user to login to mysql as root by saving the randomly generated password. +printf "\n\n[mysql]\nuser=root\npassword=$PRAND\n\n" >> /root/.my.cnf + +# Change the default temporary table directory or else the schema reset will fail when it creates a temp table. +printf "\n\n[server]\ntmpdir=/tmp/\n\n" >> /etc/my.cnf.d/server-tmpdir.cnf +chcon system_u:object_r:mysqld_etc_t:s0 /etc/my.cnf.d/server-tmpdir.cnf + +# Create the mytool user and grant the required permissions. +mysql --execute="CREATE USER mytool@localhost IDENTIFIED BY 'aComplex1'" +mysql --execute="GRANT ALL ON *.* TO mytool@localhost" diff --git a/scripts/fedora30/parallels.sh b/scripts/fedora30/parallels.sh new file mode 100644 index 000000000..9e6d617a1 --- /dev/null +++ b/scripts/fedora30/parallels.sh @@ -0,0 +1,48 @@ +#!/bin/bash -ux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# Needed to check whether we're running atop Parallels. +retry dnf install --assumeyes dmidecode + +# Bail if we are not running atop Parallels. +if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then + exit 0 +fi + +# Read in the version number. +PARALLELSVERSION=`cat /root/parallels-tools-version.txt` + +mkdir -p /mnt/parallels/ +mount -o loop /root/parallels-tools-linux.iso /mnt/parallels/ +# bash /mnt/parallels/install --install-unattended-with-deps +umount /mnt/parallels/ +rmdir /mnt/parallels/ + +# Cleanup the guest additions. +rm --force /root/parallels-tools-linux.iso +rm --force /root/parallels-tools-version.txt diff --git a/scripts/fedora30/postfix.sh b/scripts/fedora30/postfix.sh new file mode 100644 index 000000000..b1b3080a7 --- /dev/null +++ b/scripts/fedora30/postfix.sh @@ -0,0 +1,75 @@ +#!/bin/bash -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# The postfix server for message relays. The checkpolicy, policycoreutils and the- +# policycoreutils-python packages are needed to compile the selinux module below. +retry dnf --assumeyes install postfix checkpolicy policycoreutils policycoreutils-python policycoreutils-python-utils + +# Postfix opportunistic TLS relay. +printf "smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt\n" >> /etc/postfix/main.cf +printf "smtp_tls_ciphers = high\n" >> /etc/postfix/main.cf +printf "smtp_tls_loglevel = 2\n" >> /etc/postfix/main.cf +printf "smtp_tls_mandatory_ciphers = medium\n" >> /etc/postfix/main.cf +printf "smtp_tls_mandatory_protocols = SSLv3 TLSv1\n" >> /etc/postfix/main.cf +printf "smtp_tls_protocols = !SSLv2 !SSLv3\n" >> /etc/postfix/main.cf +printf "smtp_tls_security_level = may\n" >> /etc/postfix/main.cf +printf "tls_daemon_random_bytes = 128\n" >> /etc/postfix/main.cf +printf "tls_random_bytes = 255\n" >> /etc/postfix/main.cf +printf "tls_random_reseed_period = 1800s\n\n" >> /etc/postfix/main.cf + +# Postfix size limits. +printf "body_checks_size_limit = 134217728\n" +printf "mailbox_size_limit = 0\n" +printf "message_size_limit = 134217728\n" +printf "virtual_mailbox_limit = 0\n\n" + +# Configure the postfix hostname and origin parameters. +printf "\ninet_interfaces = localhost\n" >> /etc/postfix/main.cf +printf "inet_protocols = ipv4\n" >> /etc/postfix/main.cf +printf "myhostname = relay.magma.builder\n" >> /etc/postfix/main.cf +printf "myorigin = magma.builder\n" >> /etc/postfix/main.cf +printf "transport_maps = hash:/etc/postfix/transport\n" >> /etc/postfix/main.cf + +# Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. +sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf + +# Classify port 2525 as as SMTP so Postfix can bind to it running afoul of selinux. +semanage port -a -t smtp_port_t -p tcp 2525 + +# Setup logrotate so it only stores 7 days worth of logs. +printf "/var/log/maillog {\n\tdaily\n\trotate 7\n\tmissingok\n}\n" > /etc/logrotate.d/postfix + +# Fix the SELinux context for the postfix logrotate config. +chcon system_u:object_r:etc_t:s0 /etc/logrotate.d/postfix + +#printf "\nmagma.builder smtp:[127.0.0.1]:7000\n" >> /etc/postfix/transport +#printf "magmadaemon.com smtp:[127.0.0.1]:7000\n" >> /etc/postfix/transport +postmap /etc/postfix/transport + +# So it gets started automatically. +systemctl enable postfix.service && systemctl start postfix.service diff --git a/scripts/fedora30/qemu.sh b/scripts/fedora30/qemu.sh new file mode 100644 index 000000000..0d99c0725 --- /dev/null +++ b/scripts/fedora30/qemu.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +error() { + if [ $? -ne 0 ]; then + printf "\n\nqemu addons failed to install...\n\n"; + exit 1 + fi +} + + +# Bail if we are not running atop QEMU. +if [[ `dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then + exit 0 +fi + +# Install the QEMU using Yum. +printf "Installing the QEMU Tools.\n" + +retry dnf install --assumeyes qemu-guest-agent; error diff --git a/scripts/fedora30/sshd.sh b/scripts/fedora30/sshd.sh new file mode 100644 index 000000000..873168e59 --- /dev/null +++ b/scripts/fedora30/sshd.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +printf "Harden the SSHD Configuration.\n" + +# Tweak sshd to prevent reverse DNS lookups which speeds up the login process. +sed -i -e "s/^#\(UseDNS\) yes$/\1 no/g" /etc/ssh/sshd_config +sed -i -e "s/^\(PasswordAuthentication\) yes$/\1 no/g" /etc/ssh/sshd_config + +# This option will also disable DNS lookups. +printf "\nOPTIONS=\"-u0\"\n\n" >> /etc/sysconfig/sshd + +# We want our sshd host keys to be stronger than the default value. This will force sshd to +# use a stronger entropy source. It requires an entropy daemon like haveged or connections +# will experience massive delays while they wait for the kernel to collect enough entropy. +# It will also ensure we only generate ssh protocol version 2 RSA host keys. +#sed --in-place "s/SSH_USE_STRONG_RNG=0/SSH_USE_STRONG_RNG=1024/g" /etc/sysconfig/sshd +sed --in-place "s/# AUTOCREATE_SERVER_KEYS=\"\"/AUTOCREATE_SERVER_KEYS=\"RSA\"/g" /etc/sysconfig/sshd + +# This will update the init script so when it goes to autogenerate the host keys, they are +# 4096 bits, instead of the default. +sed --in-place "s/\\-t rsa /\-t rsa -b 4096 /g" /usr/sbin/sshd-keygen + +# We uncomment the RSA host key path in the sshd config to avoid complaints about the missing DSA host key. +sed --in-place "s/HostKey \/etc\/ssh\/ssh_host_ecdsa_key/#HostKey \/etc\/ssh\/ssh_host_ecdsa_key/g" /etc/ssh/sshd_config +sed --in-place "s/HostKey \/etc\/ssh\/ssh_host_ed25519_key/#HostKey \/etc\/ssh\/ssh_host_ed25519_key/g" /etc/ssh/sshd_config + +# Finally we are going to delete the existing host keys so they get recreated during the next reboot +# cycle. +rm --force /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key.pub +rm --force /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ecdsa_key.pub +rm --force /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_ed25519_key.pub + +# Remove the file exist test from the sshd-keygen.service +sed --in-place -e "/ConditionFileNotEmpty=|\!\/etc\/ssh\/ssh_host_ecdsa_key/d" /usr/lib/systemd/system/sshd-keygen.service +sed --in-place -e "/ConditionFileNotEmpty=|\!\/etc\/ssh\/ssh_host_ed25519_key/d" /usr/lib/systemd/system/sshd-keygen.service + +# Generate a new stronger host key. +#/usr/bin/ssh-keygen -q -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -C '' -N '' +#chgrp ssh_keys /etc/ssh/ssh_host_rsa_key +#chmod 640 /etc/ssh/ssh_host_rsa_key +#chmod 644 /etc/ssh/ssh_host_rsa_key.pub +#chcon system_u:object_r:sshd_key_t:s0 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key.pub + + + diff --git a/scripts/fedora30/tuning.sh b/scripts/fedora30/tuning.sh new file mode 100644 index 000000000..e43e609a8 --- /dev/null +++ b/scripts/fedora30/tuning.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +# Configure tuned +retry dnf install --assumeyes tuned +systemctl enable tuned +systemctl start tuned + +# Set the profile to virtual guest. +tuned-adm profile virtual-guest + +# Configure grub to wait just 1 second before booting +sed -i -e 's/^GRUB_TIMEOUT=[0-9]\+$/GRUB_TIMEOUT=1/' /etc/default/grub +grub2-mkconfig -o /boot/grub2/grub.cfg diff --git a/scripts/fedora30/vagrant.sh b/scripts/fedora30/vagrant.sh new file mode 100644 index 000000000..d320b3528 --- /dev/null +++ b/scripts/fedora30/vagrant.sh @@ -0,0 +1,38 @@ +#!/bin/bash -ux + +# Create the vagrant user account. +/usr/sbin/useradd vagrant + +# Enable exit/failure on error. +set -eux + +if [ -d /etc/polkit-1/rules.d/ ]; then +cat < /etc/polkit-1/rules.d/49-vagrant.rules +polkit.addRule(function(action, subject) { + if (subject.isInGroup("vagrant")) { + return polkit.Result.YES; + } +}); +EOF +chmod 0440 /etc/polkit-1/rules.d/49-vagrant.rules +fi + +printf "vagrant\nvagrant\n" | passwd vagrant +sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers +printf "vagrant ALL=(ALL) NOPASSWD: ALL\n" > /etc/sudoers.d/vagrant +chmod 0440 /etc/sudoers.d/vagrant + +# Create the vagrant user ssh directory. +mkdir -pm 700 /home/vagrant/.ssh + +# Create an authorized keys file and insert the insecure public vagrant key. +cat <<-EOF > /home/vagrant/.ssh/authorized_keys +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key +EOF + +# Ensure the permissions are set correct to avoid OpenSSH complaints. +chmod 0600 /home/vagrant/.ssh/authorized_keys +chown -R vagrant:vagrant /home/vagrant/.ssh + +# Mark the vagrant box build time. +date --utc > /etc/vagrant_box_build_time diff --git a/scripts/fedora30/vga.sh b/scripts/fedora30/vga.sh new file mode 100644 index 000000000..2de934b37 --- /dev/null +++ b/scripts/fedora30/vga.sh @@ -0,0 +1,20 @@ +#!/bin/bash -eux + +# Remove the hard coded kernel VGA resolution needed to workaround Hyper-V bugs during installation. +# sed -i 's/^GRUB_CMDLINE_LINUX="\(.*\)vga=normal nomodeset text\(.*\)"$/GRUB_CMDLINE_LINUX="\1\2"/g' /etc/default/grub +sed -i 's/^GRUB_CMDLINE_LINUX="\(.*\)vga=792 nomodeset text\(.*\)"$/GRUB_CMDLINE_LINUX="\1\2"/g' /etc/default/grub + +# On UEFI systems. +if [ -f /boot/efi/EFI/fedora/grub.cfg ]; then + grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg + +elif [ -f /boot/efi/EFI/centos/grub.cfg ]; then + grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg + +elif [ -f /boot/efi/EFI/redhat/grub.cfg ]; then + grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg + +# On BIOS systems. +else + grub2-mkconfig -o /boot/grub2/grub.cfg +fi diff --git a/scripts/fedora30/virtualbox.sh b/scripts/fedora30/virtualbox.sh new file mode 100644 index 000000000..f08b50a0f --- /dev/null +++ b/scripts/fedora30/virtualbox.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +error() { + if [ $? -ne 0 ]; then + printf "\n\nThe VirtualBox install failed...\n\n" + + # if [ -f /var/log/VBoxGuestAdditions.log ]; then + # printf "\n\n/var/log/VBoxGuestAdditions.log\n\n" + # cat /var/log/VBoxGuestAdditions.log + # else + # printf "\n\nThe /var/log/VBoxGuestAdditions.log is missing...\n\n" + # fi + # + # if [ -f /var/log/vboxadd-install.log ]; then + # printf "\n\n/var/log/vboxadd-install.log\n\n" + # cat /var/log/vboxadd-install.log + # else + # printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" + # fi + exit 1 + fi +} + +# Bail if we are not running atop VirtualBox. +if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then + exit 0 +fi + +# Install the Virtual Box Tools from the Linux Guest Additions ISO. +printf "Installing the Virtual Box Tools.\n" + +# Read in the version number. +VBOXVERSION=`cat /root/VBoxVersion.txt` + +retry dnf install --assumeyes virtualbox-guest-additions; error + +# # Experimental logic. Guessing it doesn't work yet because the RPM is dependent upon a repo specific kernel dependency. +# retry curl --location --output akmod-VirtualBox-5.2.20-1.fc30.x86_64.rpm "https://download1.rpmfusion.org/free/fedora/releases/29/Everything/x86_64/os/Packages/a/akmod-VirtualBox-5.2.20-1.fc30.x86_64.rpm"; error +# echo "0b898908a8cf8965f5931f3cdc01f231743e858319cd83419d54863973bb584b akmod-VirtualBox-5.2.20-1.fc30.x86_64.rpm" | sha256sum --check; error +# dnf install --assumeyes akmod-VirtualBox-5.2.20-1.fc29.x86_64.rpm; error + +# dnf install --assumeyes dkms binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel bzip2 kernel-headers kernel-devel kernel-cross-headers; error +# +# # The group vboxsf is needed for shared folder access. +# getent group vboxsf >/dev/null || groupadd --system vboxsf; error +# getent passwd vboxadd >/dev/null || useradd --system --gid bin --home-dir /var/run/vboxadd --shell /sbin/nologin vboxadd; error +# +# mkdir -p /mnt/virtualbox; error +# mount -o loop /root/VBoxGuestAdditions.iso /mnt/virtualbox; error +# +# # For some reason the vboxsf module fails the first time, but installs +# # successfully if we run the installer a second time. +# sh /mnt/virtualbox/VBoxLinuxAdditions.run --nox11 || sh /mnt/virtualbox/VBoxLinuxAdditions.run --nox11; error +# ln -s /opt/VBoxGuestAdditions-$VBOXVERSION/lib/VBoxGuestAdditions /usr/lib/VBoxGuestAdditions; error +# +# umount /mnt/virtualbox; error +rm -rf /root/VBoxVersion.txt; error +rm -rf /root/VBoxGuestAdditions.iso; error diff --git a/scripts/fedora30/vmware.sh b/scripts/fedora30/vmware.sh new file mode 100644 index 000000000..1d0856556 --- /dev/null +++ b/scripts/fedora30/vmware.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +error() { + if [ $? -ne 0 ]; then + printf "\n\nvmware install failed...\n\n"; + exit 1 + fi +} + + +# Bail if we are not running inside VMWare. +if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then + exit 0 +fi + +# Install the VMWare Tools from the Linux ISO. +printf "Installing the VMWare Tools.\n" + +retry dnf install --assumeyes open-vm-tools fuse-libs libdnet libicu libmspack +systemctl enable vmtoolsd +systemctl start vmtoolsd + +#mkdir -p /mnt/vmware; error +#mount -o loop /root/linux.iso /mnt/vmware; error + +#cd /tmp; error +#tar xzf /mnt/vmware/VMwareTools-*.tar.gz; error + +#umount /mnt/vmware; error +rm -rf /root/linux.iso; error + +#/tmp/vmware-tools-distrib/vmware-install.pl -d; error +#rm -rf /tmp/vmware-tools-distrib; error diff --git a/scripts/freebsd11/hostname.sh b/scripts/freebsd11/hostname.sh index cc09d9fa0..87173dccd 100644 --- a/scripts/freebsd11/hostname.sh +++ b/scripts/freebsd11/hostname.sh @@ -1,18 +1,15 @@ #!/bin/bash -eux if [[ "$PACKER_BUILD_NAME" =~ ^magma-freebsd11-(vmware|hyperv|libvirt|parallels|virtualbox)$ ]]; then - sed -i -e "s/hostname=\".*\"/hostname=\"magma.localdomain\"/g" /etc/defaults/rc.conf-e - sed -i -e "s/hostname=\".*\"/hostname=\"magma.localdomain\"/g" /etc/defaults/rc.conf + sed -i "" -e "s/hostname=\".*\"/hostname=\"magma.localdomain\"/g" /etc/defaults/rc.conf printf "\n127.0.0.1 magma magma.localdomain\n" >> /etc/hosts hostname magma.localdomain elif [[ "$PACKER_BUILD_NAME" =~ ^generic-freebsd11-(vmware|hyperv|libvirt|parallels|virtualbox)$ ]]; then - sed -i -e "s/hostname=\".*\"/hostname=\"freebsd11.localdomain\"/g" /etc/defaults/rc.conf-e - sed -i -e "s/hostname=\".*\"/hostname=\"freebsd11.localdomain\"/g" /etc/defaults/rc.conf + sed -i "" -e "s/hostname=\".*\"/hostname=\"freebsd11.localdomain\"/g" /etc/defaults/rc.conf printf "\n127.0.0.1 freebsd11 freebsd11.localdomain\n" >> /etc/hosts hostname freebsd11.localdomain else - sed -i -e "s/hostname=\".*\"/hostname=\"bazinga.localdomain\"/g" /etc/defaults/rc.conf-e - sed -i -e "s/hostname=\".*\"/hostname=\"bazinga.localdomain\"/g" /etc/defaults/rc.conf + sed -i "" -e "s/hostname=\".*\"/hostname=\"bazinga.localdomain\"/g" /etc/defaults/rc.conf printf "\n127.0.0.1 bazinga bazinga.localdomain\n" >> /etc/hosts hostname bazinga.localdomain fi diff --git a/scripts/freebsd11/magma.sh b/scripts/freebsd11/magma.sh index 451e89f12..716b6dfa5 100644 --- a/scripts/freebsd11/magma.sh +++ b/scripts/freebsd11/magma.sh @@ -33,6 +33,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -60,12 +67,12 @@ dev/scripts/database/schema.reset.sh; error # Enable the anti-virus engine and update the signatures. dev/scripts/freshen/freshen.clamav.sh 2>&1 | grep -v WARNING | grep -v PANIC; error -sed -i -e "s/virus.available = false/virus.available = true/g" sandbox/etc/magma.sandbox.config +sed -i "" -e "s/virus.available = false/virus.available = true/g" sandbox/etc/magma.sandbox.config # Ensure the sandbox config uses port 2525 for relays. -sed -i -e "/magma.relay\[[0-9]*\].name.*/d" sandbox/etc/magma.sandbox.config -sed -i -e "/magma.relay\[[0-9]*\].port.*/d" sandbox/etc/magma.sandbox.config -sed -i -e "/magma.relay\[[0-9]*\].secure.*/d" sandbox/etc/magma.sandbox.config +sed -i "" -e "/magma.relay\[[0-9]*\].name.*/d" sandbox/etc/magma.sandbox.config +sed -i "" -e "/magma.relay\[[0-9]*\].port.*/d" sandbox/etc/magma.sandbox.config +sed -i "" -e "/magma.relay\[[0-9]*\].secure.*/d" sandbox/etc/magma.sandbox.config printf "\n\nmagma.relay[1].name = localhost\nmagma.relay[1].port = 2525\n\n" >> sandbox/etc/magma.sandbox.config # Bug fix... create the scan directory so ClamAV unit tests work. @@ -81,7 +88,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done @@ -93,8 +100,8 @@ fi # dev/scripts/launch/check.vg # Daemonize instead of running on the console. -# sed -i -e "s/magma.output.file = false/magma.output.file = true/g" sandbox/etc/magma.sandbox.config -# sed -i -e "s/magma.system.daemonize = false/magma.system.daemonize = true/g" sandbox/etc/magma.sandbox.config +# sed -i "" -e "s/magma.output.file = false/magma.output.file = true/g" sandbox/etc/magma.sandbox.config +# sed -i "" -e "s/magma.system.daemonize = false/magma.system.daemonize = true/g" sandbox/etc/magma.sandbox.config # Launch the daemon. # ./magmad --config magma.system.daemonize=true sandbox/etc/magma.sandbox.config diff --git a/scripts/freebsd11/motd.sh b/scripts/freebsd11/motd.sh index 5a32e55a8..7db814140 100644 --- a/scripts/freebsd11/motd.sh +++ b/scripts/freebsd11/motd.sh @@ -1,6 +1,6 @@ #!/bin/bash -eux -sed -i -e "s/update_motd=\"YES\"/update_motd=\"NO\"/g" /etc/defaults/rc.conf +sed -i "" -e "s/update_motd=\"YES\"/update_motd=\"NO\"/g" /etc/defaults/rc.conf cat << EOF > /etc/motd EOF diff --git a/scripts/freebsd11/pkg.sh b/scripts/freebsd11/pkg.sh index c444ae2b9..74d75e955 100644 --- a/scripts/freebsd11/pkg.sh +++ b/scripts/freebsd11/pkg.sh @@ -20,12 +20,11 @@ pkg install --yes vim curl wget sudo bash gnuls gnugrep psmisc ln -s /usr/local/bin/bash /bin/bash # Disable fortunate cookies. -sed -i -e "/fortune/d" /usr/share/skel/dot.login -sed -i -e "/fortune/d" /usr/share/skel/dot.profile -sed -i -e "/fortune/d" /usr/share/skel/dot.profile-e +sed -i "" -e "/fortune/d" /usr/share/skel/dot.login +sed -i "" -e "/fortune/d" /usr/share/skel/dot.profile -sed -i -e "/fortune/d" /home/vagrant/.login -sed -i -e "/fortune/d" /home/vagrant/.profile +sed -i "" -e "/fortune/d" /home/vagrant/.login +sed -i "" -e "/fortune/d" /home/vagrant/.profile # Update the locate database. /etc/periodic/weekly/310.locate @@ -34,4 +33,4 @@ sed -i -e "/fortune/d" /home/vagrant/.profile echo '# 315.locate' >> /etc/periodic.conf echo 'daily_locate_enable="YES" # Update locate daily' >> /etc/periodic.conf cp /etc/periodic/weekly/310.locate /usr/local/etc/periodic/daily/315.locate -sed -i -e "s/weekly_locate_enable/daily_locate_enable=/g" /usr/local/etc/periodic/daily/315.locate +sed -i "" -e "s/weekly_locate_enable/daily_locate_enable=/g" /usr/local/etc/periodic/daily/315.locate diff --git a/scripts/freebsd11/vmware.sh b/scripts/freebsd11/vmware.sh index a66314f40..40dba146b 100644 --- a/scripts/freebsd11/vmware.sh +++ b/scripts/freebsd11/vmware.sh @@ -16,8 +16,8 @@ fi pkg-static install --yes open-vm-tools-nox11 # Disable vmxnet in favor of whatever the OpenVM Tools are suggesting. -sed -i -e 's#^ifconfig_vmx0#ifconfig_em0#g' /etc/rc.conf -sed -i -e '/^if_vmx_load=.*/d' /boot/loader.conf +sed -i "" -e 's#^ifconfig_vmx0#ifconfig_em0#g' /etc/rc.conf +sed -i "" -e '/^if_vmx_load=.*/d' /boot/loader.conf sysrc vmware_guest_vmblock_enable=YES sysrc vmware_guest_vmhgfs_enable=YES diff --git a/scripts/freebsd12/hostname.sh b/scripts/freebsd12/hostname.sh index 0cedc16ba..e9a9cac8b 100644 --- a/scripts/freebsd12/hostname.sh +++ b/scripts/freebsd12/hostname.sh @@ -1,18 +1,15 @@ #!/bin/bash -eux if [[ "$PACKER_BUILD_NAME" =~ ^magma-freebsd12-(vmware|hyperv|libvirt|parallels|virtualbox)$ ]]; then - sed -i -e "s/hostname=\".*\"/hostname=\"magma.localdomain\"/g" /etc/defaults/rc.conf-e - sed -i -e "s/hostname=\".*\"/hostname=\"magma.localdomain\"/g" /etc/defaults/rc.conf + sed -i "" -e "s/hostname=\".*\"/hostname=\"magma.localdomain\"/g" /etc/defaults/rc.conf printf "\n127.0.0.1 magma magma.localdomain\n" >> /etc/hosts hostname magma.localdomain elif [[ "$PACKER_BUILD_NAME" =~ ^generic-freebsd12-(vmware|hyperv|libvirt|parallels|virtualbox)$ ]]; then - sed -i -e "s/hostname=\".*\"/hostname=\"freebsd12.localdomain\"/g" /etc/defaults/rc.conf-e - sed -i -e "s/hostname=\".*\"/hostname=\"freebsd12.localdomain\"/g" /etc/defaults/rc.conf + sed -i "" -e "s/hostname=\".*\"/hostname=\"freebsd12.localdomain\"/g" /etc/defaults/rc.conf printf "\n127.0.0.1 freebsd12 freebsd12.localdomain\n" >> /etc/hosts hostname freebsd12.localdomain else - sed -i -e "s/hostname=\".*\"/hostname=\"bazinga.localdomain\"/g" /etc/defaults/rc.conf-e - sed -i -e "s/hostname=\".*\"/hostname=\"bazinga.localdomain\"/g" /etc/defaults/rc.conf + sed -i "" -e "s/hostname=\".*\"/hostname=\"bazinga.localdomain\"/g" /etc/defaults/rc.conf printf "\n127.0.0.1 bazinga bazinga.localdomain\n" >> /etc/hosts hostname bazinga.localdomain fi diff --git a/scripts/freebsd12/magma.sh b/scripts/freebsd12/magma.sh index 451e89f12..716b6dfa5 100644 --- a/scripts/freebsd12/magma.sh +++ b/scripts/freebsd12/magma.sh @@ -33,6 +33,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -60,12 +67,12 @@ dev/scripts/database/schema.reset.sh; error # Enable the anti-virus engine and update the signatures. dev/scripts/freshen/freshen.clamav.sh 2>&1 | grep -v WARNING | grep -v PANIC; error -sed -i -e "s/virus.available = false/virus.available = true/g" sandbox/etc/magma.sandbox.config +sed -i "" -e "s/virus.available = false/virus.available = true/g" sandbox/etc/magma.sandbox.config # Ensure the sandbox config uses port 2525 for relays. -sed -i -e "/magma.relay\[[0-9]*\].name.*/d" sandbox/etc/magma.sandbox.config -sed -i -e "/magma.relay\[[0-9]*\].port.*/d" sandbox/etc/magma.sandbox.config -sed -i -e "/magma.relay\[[0-9]*\].secure.*/d" sandbox/etc/magma.sandbox.config +sed -i "" -e "/magma.relay\[[0-9]*\].name.*/d" sandbox/etc/magma.sandbox.config +sed -i "" -e "/magma.relay\[[0-9]*\].port.*/d" sandbox/etc/magma.sandbox.config +sed -i "" -e "/magma.relay\[[0-9]*\].secure.*/d" sandbox/etc/magma.sandbox.config printf "\n\nmagma.relay[1].name = localhost\nmagma.relay[1].port = 2525\n\n" >> sandbox/etc/magma.sandbox.config # Bug fix... create the scan directory so ClamAV unit tests work. @@ -81,7 +88,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done @@ -93,8 +100,8 @@ fi # dev/scripts/launch/check.vg # Daemonize instead of running on the console. -# sed -i -e "s/magma.output.file = false/magma.output.file = true/g" sandbox/etc/magma.sandbox.config -# sed -i -e "s/magma.system.daemonize = false/magma.system.daemonize = true/g" sandbox/etc/magma.sandbox.config +# sed -i "" -e "s/magma.output.file = false/magma.output.file = true/g" sandbox/etc/magma.sandbox.config +# sed -i "" -e "s/magma.system.daemonize = false/magma.system.daemonize = true/g" sandbox/etc/magma.sandbox.config # Launch the daemon. # ./magmad --config magma.system.daemonize=true sandbox/etc/magma.sandbox.config diff --git a/scripts/freebsd12/motd.sh b/scripts/freebsd12/motd.sh index 5a32e55a8..7db814140 100644 --- a/scripts/freebsd12/motd.sh +++ b/scripts/freebsd12/motd.sh @@ -1,6 +1,6 @@ #!/bin/bash -eux -sed -i -e "s/update_motd=\"YES\"/update_motd=\"NO\"/g" /etc/defaults/rc.conf +sed -i "" -e "s/update_motd=\"YES\"/update_motd=\"NO\"/g" /etc/defaults/rc.conf cat << EOF > /etc/motd EOF diff --git a/scripts/freebsd12/pkg.sh b/scripts/freebsd12/pkg.sh index c444ae2b9..74d75e955 100644 --- a/scripts/freebsd12/pkg.sh +++ b/scripts/freebsd12/pkg.sh @@ -20,12 +20,11 @@ pkg install --yes vim curl wget sudo bash gnuls gnugrep psmisc ln -s /usr/local/bin/bash /bin/bash # Disable fortunate cookies. -sed -i -e "/fortune/d" /usr/share/skel/dot.login -sed -i -e "/fortune/d" /usr/share/skel/dot.profile -sed -i -e "/fortune/d" /usr/share/skel/dot.profile-e +sed -i "" -e "/fortune/d" /usr/share/skel/dot.login +sed -i "" -e "/fortune/d" /usr/share/skel/dot.profile -sed -i -e "/fortune/d" /home/vagrant/.login -sed -i -e "/fortune/d" /home/vagrant/.profile +sed -i "" -e "/fortune/d" /home/vagrant/.login +sed -i "" -e "/fortune/d" /home/vagrant/.profile # Update the locate database. /etc/periodic/weekly/310.locate @@ -34,4 +33,4 @@ sed -i -e "/fortune/d" /home/vagrant/.profile echo '# 315.locate' >> /etc/periodic.conf echo 'daily_locate_enable="YES" # Update locate daily' >> /etc/periodic.conf cp /etc/periodic/weekly/310.locate /usr/local/etc/periodic/daily/315.locate -sed -i -e "s/weekly_locate_enable/daily_locate_enable=/g" /usr/local/etc/periodic/daily/315.locate +sed -i "" -e "s/weekly_locate_enable/daily_locate_enable=/g" /usr/local/etc/periodic/daily/315.locate diff --git a/scripts/freebsd12/vmware.sh b/scripts/freebsd12/vmware.sh index a66314f40..40dba146b 100644 --- a/scripts/freebsd12/vmware.sh +++ b/scripts/freebsd12/vmware.sh @@ -16,8 +16,8 @@ fi pkg-static install --yes open-vm-tools-nox11 # Disable vmxnet in favor of whatever the OpenVM Tools are suggesting. -sed -i -e 's#^ifconfig_vmx0#ifconfig_em0#g' /etc/rc.conf -sed -i -e '/^if_vmx_load=.*/d' /boot/loader.conf +sed -i "" -e 's#^ifconfig_vmx0#ifconfig_em0#g' /etc/rc.conf +sed -i "" -e '/^if_vmx_load=.*/d' /boot/loader.conf sysrc vmware_guest_vmblock_enable=YES sysrc vmware_guest_vmhgfs_enable=YES diff --git a/scripts/gentoo/magma.sh b/scripts/gentoo/magma.sh index bd7bba5b7..2c06c4897 100644 --- a/scripts/gentoo/magma.sh +++ b/scripts/gentoo/magma.sh @@ -65,6 +65,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -113,7 +120,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/hardenedbsd11/firstboot.sh b/scripts/hardenedbsd11/firstboot.sh index 36967ee12..68807e048 100644 --- a/scripts/hardenedbsd11/firstboot.sh +++ b/scripts/hardenedbsd11/firstboot.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure fetch so it retries temprorary failures. export FETCH_RETRY=5 export FETCH_TIMEOUT=30 export ASSUME_ALWAYS_YES=yes -pkg-static install -y firstboot-pkgs firstboot-growfs +retry pkg-static install -y firstboot-pkgs firstboot-growfs sysrc firstboot-growfs=YES sysrc firstboot_pkgs=YES diff --git a/scripts/hardenedbsd11/magma.sh b/scripts/hardenedbsd11/magma.sh index 451e89f12..f161248b5 100644 --- a/scripts/hardenedbsd11/magma.sh +++ b/scripts/hardenedbsd11/magma.sh @@ -33,6 +33,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -81,7 +88,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/hardenedbsd11/parallels.sh b/scripts/hardenedbsd11/parallels.sh index 79a9550cb..078cc3d1e 100644 --- a/scripts/hardenedbsd11/parallels.sh +++ b/scripts/hardenedbsd11/parallels.sh @@ -1,12 +1,38 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure fetch so it retries temprorary failures. export FETCH_RETRY=5 export FETCH_TIMEOUT=30 export ASSUME_ALWAYS_YES=yes # Needed to check whether we're running atop Parallels. -pkg-static install --yes dmidecode +retry pkg-static install --yes dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then @@ -14,7 +40,7 @@ if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; the fi # Install the HardenedBSD package with the Parallels guest tools. -pkg-static install --yes parallels-tools +retry pkg-static install --yes parallels-tools # Read in the version number. PARALLELSVERSION=`cat /root/parallels-tools-version.txt` diff --git a/scripts/hardenedbsd11/pkg.sh b/scripts/hardenedbsd11/pkg.sh index 6331ba9d8..676919af4 100644 --- a/scripts/hardenedbsd11/pkg.sh +++ b/scripts/hardenedbsd11/pkg.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure fetch so it retries temprorary failures. export FETCH_RETRY=5 export FETCH_TIMEOUT=30 @@ -9,12 +35,12 @@ export ASSUME_ALWAYS_YES=yes mkdir -p /usr/local/etc/pkg/repos/ echo 'HardenedBSD: { url: "pkg+https://pkg.hardenedbsd.org/HardenedBSD/pkg/${ABI}" }' > /usr/local/etc/pkg/repos/HardenedBSD.conf -pkg bootstrap -pkg-static update --force -pkg-static upgrade --yes --force +retry pkg bootstrap +retry pkg-static update --force +retry pkg-static upgrade --yes --force # Generic system utils. -pkg install --yes curl wget sudo bash gnuls gnugrep psmisc vim-console +retry pkg install --yes curl wget sudo bash gnuls gnugrep psmisc vim-console # Since most scripts expect bash to be in the bin directory, create a symlink. ln -s /usr/local/bin/bash /bin/bash diff --git a/scripts/hardenedbsd11/qemu.sh b/scripts/hardenedbsd11/qemu.sh index e71042770..0b1cea508 100644 --- a/scripts/hardenedbsd11/qemu.sh +++ b/scripts/hardenedbsd11/qemu.sh @@ -1,12 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure fetch so it retries temprorary failures. export FETCH_RETRY=5 export FETCH_TIMEOUT=30 export ASSUME_ALWAYS_YES=yes # Ensure dmideocode is available. -pkg-static install --yes dmidecode +retry pkg-static install --yes dmidecode # Bail if we are not running atop QEMU. if [[ `dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then diff --git a/scripts/hardenedbsd11/vagrant.sh b/scripts/hardenedbsd11/vagrant.sh index 6cf6d036f..f1480bbc5 100644 --- a/scripts/hardenedbsd11/vagrant.sh +++ b/scripts/hardenedbsd11/vagrant.sh @@ -1,6 +1,32 @@ #!/bin/bash -ux -pkg-static install --yes sudo +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +retry pkg-static install --yes sudo # Setup the default user password and ensure the vagrant shell is bash. echo 'vagrant' | pw useradd vagrant -h 0 -m diff --git a/scripts/hardenedbsd11/virtualbox.sh b/scripts/hardenedbsd11/virtualbox.sh index f0d984bb9..9d0115781 100644 --- a/scripts/hardenedbsd11/virtualbox.sh +++ b/scripts/hardenedbsd11/virtualbox.sh @@ -1,12 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure fetch so it retries temprorary failures. export FETCH_RETRY=5 export FETCH_TIMEOUT=30 export ASSUME_ALWAYS_YES=yes # Ensure dmideocode is available. -pkg-static install --yes dmidecode +retry pkg-static install --yes dmidecode # Bail if we are not running atop VirtualBox. if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then @@ -14,7 +40,7 @@ if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then fi # Install the virtualbox guest additions. -pkg-static install --yes virtualbox-ose-additions-nox11 +retry pkg-static install --yes virtualbox-ose-additions-nox11 # Load the virtio module at boot. echo 'if_vtnet_load="YES"' >> /boot/loader.conf diff --git a/scripts/hardenedbsd11/vmware.sh b/scripts/hardenedbsd11/vmware.sh index a66314f40..1e816f37a 100644 --- a/scripts/hardenedbsd11/vmware.sh +++ b/scripts/hardenedbsd11/vmware.sh @@ -1,19 +1,45 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure fetch so it retries temprorary failures. export FETCH_RETRY=5 export FETCH_TIMEOUT=30 export ASSUME_ALWAYS_YES=yes # Ensure dmideocode is available. -pkg-static install --yes dmidecode +retry pkg-static install --yes dmidecode # Bail if we are not running inside VMWare. if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then exit 0 fi -pkg-static install --yes open-vm-tools-nox11 +retry pkg-static install --yes open-vm-tools-nox11 # Disable vmxnet in favor of whatever the OpenVM Tools are suggesting. sed -i -e 's#^ifconfig_vmx0#ifconfig_em0#g' /etc/rc.conf diff --git a/scripts/hardenedbsd12/firstboot.sh b/scripts/hardenedbsd12/firstboot.sh index 36967ee12..68807e048 100644 --- a/scripts/hardenedbsd12/firstboot.sh +++ b/scripts/hardenedbsd12/firstboot.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure fetch so it retries temprorary failures. export FETCH_RETRY=5 export FETCH_TIMEOUT=30 export ASSUME_ALWAYS_YES=yes -pkg-static install -y firstboot-pkgs firstboot-growfs +retry pkg-static install -y firstboot-pkgs firstboot-growfs sysrc firstboot-growfs=YES sysrc firstboot_pkgs=YES diff --git a/scripts/hardenedbsd12/magma.sh b/scripts/hardenedbsd12/magma.sh index 451e89f12..f161248b5 100644 --- a/scripts/hardenedbsd12/magma.sh +++ b/scripts/hardenedbsd12/magma.sh @@ -33,6 +33,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -81,7 +88,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/hardenedbsd12/parallels.sh b/scripts/hardenedbsd12/parallels.sh index 79a9550cb..078cc3d1e 100644 --- a/scripts/hardenedbsd12/parallels.sh +++ b/scripts/hardenedbsd12/parallels.sh @@ -1,12 +1,38 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure fetch so it retries temprorary failures. export FETCH_RETRY=5 export FETCH_TIMEOUT=30 export ASSUME_ALWAYS_YES=yes # Needed to check whether we're running atop Parallels. -pkg-static install --yes dmidecode +retry pkg-static install --yes dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then @@ -14,7 +40,7 @@ if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; the fi # Install the HardenedBSD package with the Parallels guest tools. -pkg-static install --yes parallels-tools +retry pkg-static install --yes parallels-tools # Read in the version number. PARALLELSVERSION=`cat /root/parallels-tools-version.txt` diff --git a/scripts/hardenedbsd12/pkg.sh b/scripts/hardenedbsd12/pkg.sh index 6331ba9d8..676919af4 100644 --- a/scripts/hardenedbsd12/pkg.sh +++ b/scripts/hardenedbsd12/pkg.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure fetch so it retries temprorary failures. export FETCH_RETRY=5 export FETCH_TIMEOUT=30 @@ -9,12 +35,12 @@ export ASSUME_ALWAYS_YES=yes mkdir -p /usr/local/etc/pkg/repos/ echo 'HardenedBSD: { url: "pkg+https://pkg.hardenedbsd.org/HardenedBSD/pkg/${ABI}" }' > /usr/local/etc/pkg/repos/HardenedBSD.conf -pkg bootstrap -pkg-static update --force -pkg-static upgrade --yes --force +retry pkg bootstrap +retry pkg-static update --force +retry pkg-static upgrade --yes --force # Generic system utils. -pkg install --yes curl wget sudo bash gnuls gnugrep psmisc vim-console +retry pkg install --yes curl wget sudo bash gnuls gnugrep psmisc vim-console # Since most scripts expect bash to be in the bin directory, create a symlink. ln -s /usr/local/bin/bash /bin/bash diff --git a/scripts/hardenedbsd12/qemu.sh b/scripts/hardenedbsd12/qemu.sh index e71042770..0b1cea508 100644 --- a/scripts/hardenedbsd12/qemu.sh +++ b/scripts/hardenedbsd12/qemu.sh @@ -1,12 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure fetch so it retries temprorary failures. export FETCH_RETRY=5 export FETCH_TIMEOUT=30 export ASSUME_ALWAYS_YES=yes # Ensure dmideocode is available. -pkg-static install --yes dmidecode +retry pkg-static install --yes dmidecode # Bail if we are not running atop QEMU. if [[ `dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then diff --git a/scripts/hardenedbsd12/vagrant.sh b/scripts/hardenedbsd12/vagrant.sh index 6cf6d036f..f1480bbc5 100644 --- a/scripts/hardenedbsd12/vagrant.sh +++ b/scripts/hardenedbsd12/vagrant.sh @@ -1,6 +1,32 @@ #!/bin/bash -ux -pkg-static install --yes sudo +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + +retry pkg-static install --yes sudo # Setup the default user password and ensure the vagrant shell is bash. echo 'vagrant' | pw useradd vagrant -h 0 -m diff --git a/scripts/hardenedbsd12/virtualbox.sh b/scripts/hardenedbsd12/virtualbox.sh index f0d984bb9..9d0115781 100644 --- a/scripts/hardenedbsd12/virtualbox.sh +++ b/scripts/hardenedbsd12/virtualbox.sh @@ -1,12 +1,38 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure fetch so it retries temprorary failures. export FETCH_RETRY=5 export FETCH_TIMEOUT=30 export ASSUME_ALWAYS_YES=yes # Ensure dmideocode is available. -pkg-static install --yes dmidecode +retry pkg-static install --yes dmidecode # Bail if we are not running atop VirtualBox. if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then @@ -14,7 +40,7 @@ if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then fi # Install the virtualbox guest additions. -pkg-static install --yes virtualbox-ose-additions-nox11 +retry pkg-static install --yes virtualbox-ose-additions-nox11 # Load the virtio module at boot. echo 'if_vtnet_load="YES"' >> /boot/loader.conf diff --git a/scripts/hardenedbsd12/vmware.sh b/scripts/hardenedbsd12/vmware.sh index a66314f40..1e816f37a 100644 --- a/scripts/hardenedbsd12/vmware.sh +++ b/scripts/hardenedbsd12/vmware.sh @@ -1,19 +1,45 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Configure fetch so it retries temprorary failures. export FETCH_RETRY=5 export FETCH_TIMEOUT=30 export ASSUME_ALWAYS_YES=yes # Ensure dmideocode is available. -pkg-static install --yes dmidecode +retry pkg-static install --yes dmidecode # Bail if we are not running inside VMWare. if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then exit 0 fi -pkg-static install --yes open-vm-tools-nox11 +retry pkg-static install --yes open-vm-tools-nox11 # Disable vmxnet in favor of whatever the OpenVM Tools are suggesting. sed -i -e 's#^ifconfig_vmx0#ifconfig_em0#g' /etc/rc.conf diff --git a/scripts/netbsd8/magma.sh b/scripts/netbsd8/magma.sh index b6d246b1d..d4647bcc5 100644 --- a/scripts/netbsd8/magma.sh +++ b/scripts/netbsd8/magma.sh @@ -34,6 +34,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -82,7 +89,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/netbsd8/parallels.sh b/scripts/netbsd8/parallels.sh index f09a74117..7e00d7ba0 100644 --- a/scripts/netbsd8/parallels.sh +++ b/scripts/netbsd8/parallels.sh @@ -1,5 +1,31 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure the pkg utilities are in the path. export PATH="/usr/sbin/:/usr/pkg/bin/:$PATH" @@ -7,7 +33,7 @@ export PATH="/usr/sbin/:/usr/pkg/bin/:$PATH" export PKG_PATH="ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/8.0/All" # Needed to check whether we're running atop Parallels. -pkg_add dmidecode +retry pkg_add dmidecode # Bail if we are not running atop Parallels. if [[ `/usr/pkg/sbin/dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/netbsd8/qemu.sh b/scripts/netbsd8/qemu.sh index 4f817afa8..c124963f2 100644 --- a/scripts/netbsd8/qemu.sh +++ b/scripts/netbsd8/qemu.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure the pkg utilities are in the path. export PATH="/usr/sbin/:/usr/pkg/bin/:$PATH" @@ -7,7 +33,7 @@ export PATH="/usr/sbin/:/usr/pkg/bin/:$PATH" export PKG_PATH="ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/8.0/All" # Ensure dmideocode is available. -pkg_add dmidecode +retry pkg_add dmidecode # Bail if we are not running atop QEMU. if [[ `/usr/pkg/sbin/dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then diff --git a/scripts/netbsd8/vagrant.sh b/scripts/netbsd8/vagrant.sh index f6147a14f..8970a8380 100644 --- a/scripts/netbsd8/vagrant.sh +++ b/scripts/netbsd8/vagrant.sh @@ -1,5 +1,31 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure the pkg utilities are in the path. export PATH="/usr/sbin/:/usr/pkg/bin/:$PATH" @@ -7,7 +33,7 @@ export PATH="/usr/sbin/:/usr/pkg/bin/:$PATH" export PKG_PATH="ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/8.0/All" # Sudo should already be installed, but just in case. -pkg_add sudo +retry pkg_add sudo # Password hash. PASSWORDHASH="$(pwhash vagrant)" diff --git a/scripts/netbsd8/virtualbox.sh b/scripts/netbsd8/virtualbox.sh index 90d5b4bb6..43bb29dca 100644 --- a/scripts/netbsd8/virtualbox.sh +++ b/scripts/netbsd8/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure the pkg utilities are in the path. export PATH="/usr/sbin/:/usr/pkg/bin/:$PATH" @@ -7,7 +33,7 @@ export PATH="/usr/sbin/:/usr/pkg/bin/:$PATH" export PKG_PATH="ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/8.0/All" # Ensure dmideocode is available. -pkg_add dmidecode +retry pkg_add dmidecode # Bail if we are not running atop VirtualBox. if [[ `/usr/pkg/sbin/dmidecode -s system-product-name` != "VirtualBox" ]]; then diff --git a/scripts/netbsd8/vmware.sh b/scripts/netbsd8/vmware.sh index 6fa8f7fb1..e8581a411 100644 --- a/scripts/netbsd8/vmware.sh +++ b/scripts/netbsd8/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Ensure the pkg utilities are in the path. export PATH="/usr/sbin/:/usr/pkg/bin/:$PATH" @@ -7,7 +33,7 @@ export PATH="/usr/sbin/:/usr/pkg/bin/:$PATH" export PKG_PATH="ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/8.0/All" # Ensure dmideocode is available. -pkg_add dmidecode +retry pkg_add dmidecode # Bail if we are not running inside VMWare. if [[ `/usr/pkg/sbin/dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then diff --git a/scripts/openbsd6/magma.sh b/scripts/openbsd6/magma.sh index a64bebcfb..91eebd7b7 100644 --- a/scripts/openbsd6/magma.sh +++ b/scripts/openbsd6/magma.sh @@ -28,6 +28,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -76,7 +83,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/opensuse15/floppy.sh b/scripts/opensuse15/floppy.sh new file mode 100644 index 000000000..6af666049 --- /dev/null +++ b/scripts/opensuse15/floppy.sh @@ -0,0 +1,5 @@ +#!/bin/bash -eux + +# Disable the floppy module. +printf 'blacklist floppy\n' > /etc/modprobe.d/60-floppy.conf +mkinitrd diff --git a/scripts/opensuse15/network.sh b/scripts/opensuse15/network.sh new file mode 100644 index 000000000..e7aaf7ce2 --- /dev/null +++ b/scripts/opensuse15/network.sh @@ -0,0 +1,6 @@ +#!/bin/bash -eux + +# Make sure Udev doesn't block our network +printf "Cleaning up udev rules.\n" +rm /etc/udev/rules.d/70-persistent-net.rules +mkdir /etc/udev/rules.d/70-persistent-net.rules diff --git a/scripts/opensuse15/parallels.sh b/scripts/opensuse15/parallels.sh new file mode 100644 index 000000000..99ceb5686 --- /dev/null +++ b/scripts/opensuse15/parallels.sh @@ -0,0 +1,22 @@ +#!/bin/bash -ux + +# Needed to check whether we're running atop Parallels. +zypper --non-interactive install dmidecode + +# Bail if we are not running atop Parallels. +if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then + exit 0 +fi + +# Read in the version number. +PARALLELSVERSION=`cat /root/parallels-tools-version.txt` + +mkdir -p /mnt/parallels/ +mount -o loop /root/parallels-tools-linux.iso /mnt/parallels/ +# bash /mnt/parallels/install --install-unattended-with-deps +umount /mnt/parallels/ +rmdir /mnt/parallels/ + +# Cleanup the guest additions. +rm --force /root/parallels-tools-linux.iso +rm --force /root/parallels-tools-version.txt diff --git a/scripts/opensuse15/postfix.sh b/scripts/opensuse15/postfix.sh new file mode 100644 index 000000000..77c836efc --- /dev/null +++ b/scripts/opensuse15/postfix.sh @@ -0,0 +1,6 @@ +#!/bin/bash -eux + +# Ensure Postfix doesn't barf when IPv6 is unavailable. +# printf '\ninet_protocols=ipv4\n' >> /etc/postfix/main.cf + + diff --git a/scripts/opensuse15/qemu.sh b/scripts/opensuse15/qemu.sh new file mode 100644 index 000000000..f89dc0634 --- /dev/null +++ b/scripts/opensuse15/qemu.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +error() { + if [ $? -ne 0 ]; then + printf "\n\nqemu addons failed to install...\n\n"; + exit 1 + fi +} + +zypper --non-interactive install dmidecode; error + +# Bail if we are not running atop QEMU. +if [[ `dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then + exit 0 +fi + +# Install the QEMU using Yum. +printf "Installing the QEMU Tools.\n" + +zypper --non-interactive install qemu-guest-agent; error diff --git a/scripts/opensuse15/vagrant.sh b/scripts/opensuse15/vagrant.sh new file mode 100644 index 000000000..4f2a25c9a --- /dev/null +++ b/scripts/opensuse15/vagrant.sh @@ -0,0 +1,38 @@ +#!/bin/bash -eux + +# Create the vagrant user account. +/usr/sbin/useradd vagrant + +# Enable exit/failure on error. +set -eux + +if [ -d /etc/polkit-1/rules.d/ ]; then +cat < /etc/polkit-1/rules.d/49-vagrant.rules +polkit.addRule(function(action, subject) { + if (subject.isInGroup("vagrant")) { + return polkit.Result.YES; + } +}); +EOF +chmod 0440 /etc/polkit-1/rules.d/49-vagrant.rules +fi + +printf "vagrant\nvagrant\n" | passwd vagrant +sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers +printf "vagrant ALL=(ALL) NOPASSWD: ALL\n" > /etc/sudoers.d/vagrant +chmod 0440 /etc/sudoers.d/vagrant + +# Create the vagrant user ssh directory. +mkdir -pm 700 /home/vagrant/.ssh + +# Create an authorized keys file and insert the insecure public vagrant key. +cat <<-EOF > /home/vagrant/.ssh/authorized_keys +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key +EOF + +# Ensure the permissions are set correct to avoid OpenSSH complaints. +chmod 0600 /home/vagrant/.ssh/authorized_keys +chown -R vagrant:vagrant /home/vagrant/.ssh + +# Mark the vagrant box build time. +date --utc > /etc/vagrant_box_build_time diff --git a/scripts/opensuse15/virtualbox.sh b/scripts/opensuse15/virtualbox.sh new file mode 100644 index 000000000..216b68d73 --- /dev/null +++ b/scripts/opensuse15/virtualbox.sh @@ -0,0 +1,24 @@ +#!/bin/bash + + +error() { + if [ $? -ne 0 ]; then + printf "\n\nThe VirtualBox install failed...\n\n" + exit 1 + fi +} + +zypper --non-interactive install dmidecode; error + +# Bail if we are not running atop VirtualBox. +if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then + exit 0 +fi + +# Install the Virtual Box Tools from the Linux Guest Additions ISO. +printf "Installing the Virtual Box Tools.\n" + +zypper --non-interactive install virtualbox-guest-tools virtualbox-guest-kmp-default; error + +rm -rf /root/VBoxVersion.txt; error +rm -rf /root/VBoxGuestAdditions.iso; error diff --git a/scripts/opensuse15/vmware.sh b/scripts/opensuse15/vmware.sh new file mode 100644 index 000000000..c9359b611 --- /dev/null +++ b/scripts/opensuse15/vmware.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +error() { + if [ $? -ne 0 ]; then + printf "\n\nvmware install failed...\n\n"; + exit 1 + fi +} + +zypper --non-interactive install dmidecode; error + +# Bail if we are not running inside VMWare. +if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then + exit 0 +fi + +# Install the VMWare Tools. +printf "Installing the VMWare Tools.\n" + + +zypper --non-interactive install open-vm-tools; error + +systemctl enable vmtoolsd +systemctl start vmtoolsd + +#mkdir -p /mnt/vmware; error +#mount -o loop /root/linux.iso /mnt/vmware; error + +#cd /tmp; error +#tar xzf /mnt/vmware/VMwareTools-*.tar.gz; error + +#umount /mnt/vmware; error +rm -rf /root/linux.iso; error + +#/tmp/vmware-tools-distrib/vmware-install.pl -d; error +#rm -rf /tmp/vmware-tools-distrib; error diff --git a/scripts/opensuse15/zypper.sh b/scripts/opensuse15/zypper.sh new file mode 100644 index 000000000..f5af5abca --- /dev/null +++ b/scripts/opensuse15/zypper.sh @@ -0,0 +1,37 @@ +#!/bin/bash -eux + +version=`grep VERSION= /etc/os-release | cut -f2 -d\" | cut -f1 -d\ ` + +# Remove locks to avoid dependency problems. +zypper --non-interactive removelock virtualbox-guest-tools || echo "The virtualbox-guest-tools lock removal failed." +zypper --non-interactive removelock virtualbox-guest-kmp-default || echo "The virtualbox-guest-kmp-defaul lock removal failed." + +# Remove the default installation repository. +zypper --non-interactive removerepo "openSUSE-Leap-${version}-0" + +# Add the default repositories for this release. +# zypper --non-interactive addrepo https://download.opensuse.org/distribution/leap/${version}/repo/oss/ openSUSE-Leap-${version}-Oss +# zypper --non-interactive addrepo https://download.opensuse.org/distribution/leap/${version}/repo/non-oss/ openSUSE-Leap-${version}-Non-Oss +# zypper --non-interactive addrepo https://download.opensuse.org/update/leap/${version}/oss/ openSUSE-Leap-${version}-Update +# zypper --non-interactive addrepo https://download.opensuse.org/update/leap/${version}/non-oss/ openSUSE-Leap-${version}-Update-Non-Oss + +zypper --non-interactive addrepo https://mirrors.kernel.org/opensuse/distribution/leap/${version}/repo/oss/ openSUSE-Leap-${version}-Oss +zypper --non-interactive addrepo https://mirrors.kernel.org/opensuse/distribution/leap/${version}/repo/non-oss/ openSUSE-Leap-${version}-Non-Oss +zypper --non-interactive addrepo https://mirrors.kernel.org/opensuse/update/leap/${version}/oss/ openSUSE-Leap-${version}-Update +zypper --non-interactive addrepo https://mirrors.kernel.org/opensuse/update/leap/${version}/non-oss/ openSUSE-Leap-${version}-Update-Non-Oss + + +# Clean out any stale cache data. +zypper --non-interactive clean --all + +# Refresh the repository metadata. +zypper --non-interactive refresh + +# Update the system packages. +zypper --non-interactive update --auto-agree-with-licenses + +# Install the packages we'd expect to find. +zypper --non-interactive install man mlocate sysstat psmisc + +# Update the locate database. +# /etc/cron.daily/mlocate.cron diff --git a/scripts/oracle7/virtualbox.sh b/scripts/oracle7/virtualbox.sh index 0bb575ae0..49af543a1 100644 --- a/scripts/oracle7/virtualbox.sh +++ b/scripts/oracle7/virtualbox.sh @@ -18,6 +18,13 @@ error() { printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" fi + if [ -f /var/log/vboxadd-setup.log ]; then + printf "\n\n/var/log/vboxadd-setup.log\n\n" + cat /var/log/vboxadd-setup.log + else + printf "\n\nThe /var/log/vboxadd-setup.log is missing...\n\n" + fi + exit 1 fi } diff --git a/scripts/oracle8/cleanup.sh b/scripts/oracle8/cleanup.sh new file mode 100644 index 000000000..844992473 --- /dev/null +++ b/scripts/oracle8/cleanup.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +printf "Cleanup stage.\n" + +# Make sure the ethnernet configuration script doesn't retain identifiers. +printf "Remove the ethernet identity values.\n" +sed -i /UUID/d /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i /HWADDR/d /etc/sysconfig/network-scripts/ifcfg-eth0 + +# Clean up the dnf data. +printf "Remove packages only required for provisioning purposes and then dump the repository cache.\n" +dnf --quiet --assumeyes clean all + +# Remove the installation logs. +rm --force /root/install.log /root/anaconda-ks.cfg /root/original-ks.cfg /root/install.log.syslog + +# Clear the command history. +export HISTSIZE=0 + +# Truncate the log files. +printf "Truncate the log files.\n" +find /var/log -type f -exec truncate --size=0 {} \; + +# Wipe the temp directory. +printf "Purge the setup files and temporary data.\n" +rm --recursive --force /var/tmp/* /tmp/* /var/cache/yum/* /tmp/ks-script* diff --git a/scripts/oracle8/dockerize.sh b/scripts/oracle8/dockerize.sh new file mode 100644 index 000000000..deeead4ed --- /dev/null +++ b/scripts/oracle8/dockerize.sh @@ -0,0 +1,98 @@ +#!/bin/bash + +# Cleanup. +rpm -Va --nofiles --nodigest +dnf clean all + +# Stop services to avoid tarring sockets. +systemctl stop abrt +systemctl stop dbus +systemctl stop mariadb +systemctl stop postfix + +awk '(NF==0&&!done){print "override_install_langs='$LANG'\ntsflags=nodocs";done=1}{print}' \ + < /etc/yum.conf > /etc/yum.conf.new +mv /etc/yum.conf.new /etc/yum.conf +echo 'container' > /etc/yum/vars/infra + +rm -f /usr/lib/locale/locale-archive + +# Setup the login message instructions. +if [[ ! "$PACKER_BUILD_NAME" =~ ^generic-.*$ ]]; then + printf "Magma Daemon Development Environment\nTo download and compile magma, just execute the magma-build.sh script.\n\n" > /etc/motd +fi + +# Add a profile directive to send docker logins to the home directory. +printf "if [ \"\$PS1\" ]; then\n cd \$HOME\nfi\n" > /etc/profile.d/home.sh + +# Setup the locale, and arrogantly assume everyone lives in the US. +localedef -v -c -i en_US -f UTF-8 en_US.UTF-8 + +rm -rf /var/cache/yum/* +rm -f /tmp/ks-script* +rm -rf /var/log/* +rm -rf /tmp/* + +# Fix /run/lock breakage since it's not tmpfs in docker +umount /run +systemd-tmpfiles --create --boot + +# Make sure login works +rm /var/run/nologin + +# Mark the docker box build time. +date --utc > /etc/docker_box_build_time + +# Randomize the root password and then lock the root account. +dd if=/dev/urandom count=50 | md5sum | passwd --stdin root +passwd --lock root + +if [ -f /etc/machine-id ]; then + truncate --size=0 /etc/machine-id +fi + +# tar --create --numeric-owner --one-file-system --directory=/ --file=/tmp/$PACKER_BUILD_NAME.tar \ +# --exclude=/tmp/$PACKER_BUILD_NAME.tar --exclude=/boot --exclude=/run/* --exclude=/var/spool/postfix/private/* . + +# Exclude the extraction files from the tarball. +printf "/tmp/excludes\n" > /tmp/excludes +printf "/tmp/$PACKER_BUILD_NAME.tar\n" >> /tmp/excludes + +# Exclude all of the special files from the tarball. +find -L $(ls -1 -d /* | grep -Ev "sys|dev|proc") -type b -print >> /tmp/excludes +find -L $(ls -1 -d /* | grep -Ev "sys|dev|proc") -type c -print >> /tmp/excludes +find -L $(ls -1 -d /* | grep -Ev "sys|dev|proc") -type p -print >> /tmp/excludes +find -L $(ls -1 -d /* | grep -Ev "sys|dev|proc") -type s -print >> /tmp/excludes +find /var/log/ -type f -print >> /tmp/excludes +find /lib/modules/ -mindepth 1 -print >> /tmp/excludes +find /usr/src/kernels/ -mindepth 1 -print >> /tmp/excludes +# find /var/lib/yum/yumdb/ -mindepth 1 -print >> /tmp/excludes +find /etc/sysconfig/network-scripts/ -name "ifcfg-*" -print >> /tmp/excludes +find /tmp -type f -or -type d -print | grep --invert-match --extended-regexp "^/tmp/$|^/tmp$" >> /tmp/excludes + +# Remove the files associated with these packages since containers don't need them. +PACKAGES=`rpm -q kernel kernel-devel kernel-headers kernel-tools kernel-tools-libs bind-libs bind-libs-lite dhclient dhcp-common dhcp-libs dracut-network e2fsprogs e2fsprogs-libs ebtables ethtool firewalld grub2 grub2-tools grubby initscripts iproute iptables kexec-tools libmnl libnetfilter_conntrack libnfnetlink python-slip python-slip-dbus snappy sysvinit-tools linux-firmware | grep --invert "not installed"` + +# Manually exclude certain files/directories from the list. +rpm -q --list $PACKAGES | grep --invert "/usr/share/bash-completion/completions" | \ + grep --invert "/etc/profile.d" >> /tmp/excludes + +# Remove the leading slash so the names match up with tar. +sed --in-place "s/^\///g" /tmp/excludes + +# Tarball the filesystem. +tar --create --numeric-owner --preserve-permissions --one-file-system \ + --directory=/ --file=/tmp/$PACKER_BUILD_NAME.tar --exclude=/etc/firewalld \ + --exclude=/boot --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys -X /tmp/excludes / + +if [ $? != 0 ] || [ ! -f /tmp/$PACKER_BUILD_NAME.tar ]; then + printf "\n\nTarball generation failed.\n\n" + printf "locked\n" | passwd --stdin root + passwd --unlock root + exit 1 +else + printf "\nTarball generation succeeded.\n" +fi + +printf "locked\n" | passwd --stdin root +passwd --unlock root diff --git a/scripts/oracle8/fixdns.sh b/scripts/oracle8/fixdns.sh new file mode 100644 index 000000000..423eba333 --- /dev/null +++ b/scripts/oracle8/fixdns.sh @@ -0,0 +1,20 @@ +#!/bin/bash -eux + +# Works around a bug which slows down DNS queries on Virtualbox. We are assuming +# this issue also affects Oracle derivitatives. +# https://access.redhat.com/site/solutions/58625 + +# Bail if we are not running atop VirtualBox. +if [[ "$PACKER_BUILDER_TYPE" != virtualbox-iso ]]; then + exit 0 +fi + +printf "Fixing the problem with slow DNS queries.\n" + +cat >> /etc/NetworkManager/dispatcher.d/fix-slow-dns <> /etc/resolv.conf +EOF + +chmod +x /etc/NetworkManager/dispatcher.d/fix-slow-dns +systemctl restart NetworkManager.service diff --git a/scripts/oracle8/floppy.sh b/scripts/oracle8/floppy.sh new file mode 100644 index 000000000..2bd18db04 --- /dev/null +++ b/scripts/oracle8/floppy.sh @@ -0,0 +1,6 @@ +#!/bin/bash -eux + +printf 'blacklist floppy\n' > /etc/modprobe.d/floppy.conf +chcon system_u:object_r:modules_conf_t:s0 /etc/modprobe.d/floppy.conf +mkinitrd --force /boot/initramfs-$(uname -r).img $(uname -r) + diff --git a/scripts/oracle8/kernel.sh b/scripts/oracle8/kernel.sh new file mode 100644 index 000000000..c9014fcf1 --- /dev/null +++ b/scripts/oracle8/kernel.sh @@ -0,0 +1,28 @@ +#!/bin/bash -eux + +# Now that the system is running atop the updated kernel, we can install the +# development files for the kernel. These files are required to compile the +# virtualization kernel modules later in the provisioning process. +dnf --assumeyes install kernel-tools kernel-devel kernel-headers + +# Remove the duplicate UEK firmware packatges first. +PACKAGES=`rpm --query --last kernel-uek-firmware | awk -F' ' '{print $1}' | tail --lines=+2` +if [ ! -z $PACKAGES ]; then + rpm --erase $PACKAGES +fi + +# Then remove the duplicate UEK kernel packages. +PACKAGES=`rpm --query --last kernel-uek | awk -F' ' '{print $1}' | tail --lines=+2` +if [ ! -z $PACKAGES ]; then + rpm --erase $PACKAGES +fi + +# Make sure we have the right kernel-uek-devel package installed, or the VirtualBox +# addons won't build properly. +dnf --enablerepo=ol8_UEKR* --assumeyes install kernel-uek-devel-`uname -r` + +# Now that the system is running on the updated kernel, we can remove the +# old kernel(s) from the system. +if [[ `rpm -q kernel | wc -l` != 1 ]]; then + package-cleanup --assumeyes --oldkernels --count=1 +fi diff --git a/scripts/oracle8/network.sh b/scripts/oracle8/network.sh new file mode 100644 index 000000000..39ed44a35 --- /dev/null +++ b/scripts/oracle8/network.sh @@ -0,0 +1,62 @@ +#!/bin/bash -eux + +# Ensure a nameserver is being used that won't return an IP for non-existent domain names. +printf "nameserver 4.2.2.1\nnameserver 4.2.2.2\nnameserver 208.67.220.220\n"> /etc/resolv.conf + +# Set the hostname, and then ensure it will resolve properly. +if [[ "$PACKER_BUILD_NAME" =~ ^generic-oracle8-(vmware|hyperv|docker|libvirt|parallels|virtualbox)$ ]]; then + printf "oracle8.localdomain\n" > /etc/hostname + printf "\n127.0.0.1 oracle8.localdomain\n\n" >> /etc/hosts +else + printf "magma.builder\n" > /etc/hostname + printf "\n127.0.0.1 magma.builder\n\n" >> /etc/hosts +fi + +# Disable IPv6 or dnf will resolve mirror names to IPv6 address and then fail to connect with them. +sysctl net.ipv6.conf.all.disable_ipv6=1 + +# Disable IPv6 and the iptables module used to firewall IPv6. +printf "\n\nnet.ipv6.conf.all.disable_ipv6 = 1\n" >> /etc/sysctl.conf + +# Make sure the ethnernet configuration script doesn't retain identifiers. +printf "Remove the ethernet identity values.\n" +sed -i /UUID/d /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i /HWADDR/d /etc/sysconfig/network-scripts/ifcfg-eth0 + +sed -i -e "/IPV6INIT.*/d;$ a IPV6INIT=no" /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i -e "/IPV6_AUTOCONF.*/d;$ a IPV6_AUTOCONF=no" /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i -e "/IPV6_DEFROUTE.*/d;$ a IPV6_DEFROUTE=no" /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i -e "/IPV6_PEERDNS.*/d;$ a IPV6_PEERDNS=no" /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i -e "/IPV6_PEERROUTES.*/d;$ a IPV6_PEERROUTES=no" /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i -e "/IPV6FORWARDING.*/d;$ a IPV6FORWARDING=no" /etc/sysconfig/network-scripts/ifcfg-eth0 +sed -i -e "/IPV6_AUTOTUNNEL.*/d;$ a IPV6_AUTOTUNNEL=no" /etc/sysconfig/network-scripts/ifcfg-eth0 + +# Ensure good DNS servers are being used. +if [ -f /etc/sysconfig/network-scripts/ifcfg-eth0 ]; then + printf "DNS1=4.2.2.1\n" >> /etc/sysconfig/network-scripts/ifcfg-eth0 + printf "DNS2=4.2.2.2\n" >> /etc/sysconfig/network-scripts/ifcfg-eth0 +fi + +# If postfix is installed, configure it use only ipv4 interfaces, or it will fail to start properly. +if [ -f /etc/postfix/main.cf ]; then + sed -i "s/^inet_protocols.*$/inet_protocols = ipv4/g" /etc/postfix/main.cf +fi + +# Works around a bug which slows down DNS queries on Virtualbox. +# We assume that this bug applies to Oracle as well. +# https://access.redhat.com/site/solutions/58625 + +# Bail if we are not running atop VirtualBox. +if [[ "$PACKER_BUILDER_TYPE" != virtualbox-iso ]]; then + exit 0 +fi + +printf "Fixing the problem with slow DNS queries.\n" + +cat >> /etc/NetworkManager/dispatcher.d/fix-slow-dns <> /etc/resolv.conf +EOF + +chmod +x /etc/NetworkManager/dispatcher.d/fix-slow-dns +systemctl restart NetworkManager.service diff --git a/scripts/oracle8/parallels.sh b/scripts/oracle8/parallels.sh new file mode 100644 index 000000000..a13be8ce2 --- /dev/null +++ b/scripts/oracle8/parallels.sh @@ -0,0 +1,22 @@ +#!/bin/bash -ux + +# Needed to check whether we're running atop Parallels. +dnf --assumeyes install dmidecode + +# Bail if we are not running atop Parallels. +if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then + exit 0 +fi + +# Read in the version number. +PARALLELSVERSION=`cat /root/parallels-tools-version.txt` + +mkdir -p /mnt/parallels/ +mount -o loop /root/parallels-tools-linux.iso /mnt/parallels/ +# bash /mnt/parallels/install --install-unattended-with-deps +umount /mnt/parallels/ +rmdir /mnt/parallels/ + +# Cleanup the guest additions. +rm --force /root/parallels-tools-linux.iso +rm --force /root/parallels-tools-version.txt diff --git a/scripts/oracle8/qemu.sh b/scripts/oracle8/qemu.sh new file mode 100644 index 000000000..08001baf4 --- /dev/null +++ b/scripts/oracle8/qemu.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +error() { + if [ $? -ne 0 ]; then + printf "\n\nqemu addons failed to install...\n\n"; + exit 1 + fi +} + + +# Bail if we are not running atop QEMU. +if [[ `dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then + exit 0 +fi + +# Install the QEMU using Yum. +printf "Installing the QEMU Tools.\n" + +dnf --assumeyes install qemu-guest-agent; error diff --git a/scripts/oracle8/tuning.sh b/scripts/oracle8/tuning.sh new file mode 100644 index 000000000..7ae768f5e --- /dev/null +++ b/scripts/oracle8/tuning.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Configure tuned +dnf --assumeyes install tuned +systemctl enable tuned +systemctl start tuned + +# Set the profile to virtual guest. +tuned-adm profile virtual-guest + +# Configure grub to wait just 1 second before booting +sed -i -e 's/^GRUB_TIMEOUT=[0-9]\+$/GRUB_TIMEOUT=1/' /etc/default/grub +grub2-mkconfig -o /boot/grub2/grub.cfg diff --git a/scripts/oracle8/vagrant.sh b/scripts/oracle8/vagrant.sh new file mode 100644 index 000000000..d320b3528 --- /dev/null +++ b/scripts/oracle8/vagrant.sh @@ -0,0 +1,38 @@ +#!/bin/bash -ux + +# Create the vagrant user account. +/usr/sbin/useradd vagrant + +# Enable exit/failure on error. +set -eux + +if [ -d /etc/polkit-1/rules.d/ ]; then +cat < /etc/polkit-1/rules.d/49-vagrant.rules +polkit.addRule(function(action, subject) { + if (subject.isInGroup("vagrant")) { + return polkit.Result.YES; + } +}); +EOF +chmod 0440 /etc/polkit-1/rules.d/49-vagrant.rules +fi + +printf "vagrant\nvagrant\n" | passwd vagrant +sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers +printf "vagrant ALL=(ALL) NOPASSWD: ALL\n" > /etc/sudoers.d/vagrant +chmod 0440 /etc/sudoers.d/vagrant + +# Create the vagrant user ssh directory. +mkdir -pm 700 /home/vagrant/.ssh + +# Create an authorized keys file and insert the insecure public vagrant key. +cat <<-EOF > /home/vagrant/.ssh/authorized_keys +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key +EOF + +# Ensure the permissions are set correct to avoid OpenSSH complaints. +chmod 0600 /home/vagrant/.ssh/authorized_keys +chown -R vagrant:vagrant /home/vagrant/.ssh + +# Mark the vagrant box build time. +date --utc > /etc/vagrant_box_build_time diff --git a/scripts/oracle8/virtualbox.sh b/scripts/oracle8/virtualbox.sh new file mode 100644 index 000000000..b8adbe144 --- /dev/null +++ b/scripts/oracle8/virtualbox.sh @@ -0,0 +1,64 @@ +#!/bin/bash -eux + +error() { + if [ $? -ne 0 ]; then + printf "\n\nThe VirtualBox install failed...\n\n" + + if [ -f /var/log/VBoxGuestAdditions.log ]; then + printf "\n\n/var/log/VBoxGuestAdditions.log\n\n" + cat /var/log/VBoxGuestAdditions.log + else + printf "\n\nThe /var/log/VBoxGuestAdditions.log is missing...\n\n" + fi + + if [ -f /var/log/vboxadd-install.log ]; then + printf "\n\n/var/log/vboxadd-install.log\n\n" + cat /var/log/vboxadd-install.log + else + printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" + fi + + if [ -f /var/log/vboxadd-setup.log ]; then + printf "\n\n/var/log/vboxadd-setup.log\n\n" + cat /var/log/vboxadd-setup.log + else + printf "\n\nThe /var/log/vboxadd-setup.log is missing...\n\n" + fi + + exit 1 + fi +} + +# Needed to check whether we're running atop VirtualBox. +dnf --assumeyes install dmidecode; error + +# The group vboxsf is needed for shared folder access. +getent group vboxsf >/dev/null || groupadd --system vboxsf; error +getent passwd vboxadd >/dev/null || useradd --system --gid bin --home-dir /var/run/vboxadd --shell /sbin/nologin vboxadd; error + +# Bail if we are not running atop VirtualBox. +if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then + exit 0 +fi + +# Install the Virtual Box Tools from the Linux Guest Additions ISO. +printf "Installing the Virtual Box Tools.\n" + +# Read in the version number. +VBOXVERSION=`cat /root/VBoxVersion.txt` + +# Packages required to build the guest additions. +# dnf --assumeyes install gcc make perl dkms bzip2 kernel-tools kernel-headers kernel-devel kernel-uek-devel autoconf automake binutils bison elfutils-libelf-devel flex gcc-c++ gettext libtool make patch pkgconfig zlib-devel; error +dnf --assumeyes install gcc make perl bzip2 kernel-tools kernel-headers kernel-devel autoconf automake binutils bison elfutils-libelf-devel flex gcc-c++ gettext libtool make patch pkgconfig zlib-devel; error + +mkdir -p /mnt/virtualbox; error +mount -o loop /root/VBoxGuestAdditions.iso /mnt/virtualbox; error + +# For some reason the vboxsf module fails the first time, but installs +# successfully if we run the installer a second time. +sh /mnt/virtualbox/VBoxLinuxAdditions.run --nox11 || sh /mnt/virtualbox/VBoxLinuxAdditions.run --nox11; error +ln -s /opt/VBoxGuestAdditions-$VBOXVERSION/lib/VBoxGuestAdditions /usr/lib/VBoxGuestAdditions; error + +umount /mnt/virtualbox; error +rm -rf /root/VBoxVersion.txt +rm -rf /root/VBoxGuestAdditions.iso diff --git a/scripts/oracle8/vmware.sh b/scripts/oracle8/vmware.sh new file mode 100644 index 000000000..b6104e750 --- /dev/null +++ b/scripts/oracle8/vmware.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +error() { + if [ $? -ne 0 ]; then + printf "\n\nvmware install failed...\n\n"; + exit 1 + fi +} + + +# Bail if we are not running inside VMWare. +if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then + exit 0 +fi + +# Install the VMWare Tools. +printf "Installing the VMWare Tools.\n" + +dnf --assumeyes install open-vm-tools fuse-libs libdnet libicu libmspack +systemctl enable vmtoolsd +systemctl start vmtoolsd + +#mkdir -p /mnt/vmware; error +#mount -o loop /root/linux.iso /mnt/vmware; error + +#cd /tmp; error +#tar xzf /mnt/vmware/VMwareTools-*.tar.gz; error + +#umount /mnt/vmware; error +rm -rf /root/linux.iso; error + +#/tmp/vmware-tools-distrib/vmware-install.pl -d; error +#rm -rf /tmp/vmware-tools-distrib; error diff --git a/scripts/oracle8/yum.sh b/scripts/oracle8/yum.sh new file mode 100644 index 000000000..b1c3ae913 --- /dev/null +++ b/scripts/oracle8/yum.sh @@ -0,0 +1,11 @@ +#!/bin/bash -eux + +# Update the base install first. +dnf --assumeyes update + +# The basic utilities we'd expect to find. +dnf --assumeyes install net-tools yum-utils bash-completion man-pages vim-enhanced mlocate sysstat bind-utils wget dos2unix unix2dos lsof telnet net-tools coreutils grep gawk sed curl psmisc tar + +# Schedule a reboot, but give the computer time to cleanly shutdown the +# network interface first. +shutdown --reboot --no-wall +1 diff --git a/scripts/rhel6/magma.sh b/scripts/rhel6/magma.sh index 891188e85..055b53252 100644 --- a/scripts/rhel6/magma.sh +++ b/scripts/rhel6/magma.sh @@ -99,6 +99,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -147,7 +154,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/rhel6/virtualbox.sh b/scripts/rhel6/virtualbox.sh index c3d7a47fd..d272959aa 100644 --- a/scripts/rhel6/virtualbox.sh +++ b/scripts/rhel6/virtualbox.sh @@ -18,6 +18,13 @@ error() { printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" fi + if [ -f /var/log/vboxadd-setup.log ]; then + printf "\n\n/var/log/vboxadd-setup.log\n\n" + cat /var/log/vboxadd-setup.log + else + printf "\n\nThe /var/log/vboxadd-setup.log is missing...\n\n" + fi + exit 1 fi } diff --git a/scripts/rhel7/magma.sh b/scripts/rhel7/magma.sh index ed1b3e3e4..b58b508fa 100644 --- a/scripts/rhel7/magma.sh +++ b/scripts/rhel7/magma.sh @@ -77,6 +77,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -125,7 +132,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/rhel7/virtualbox.sh b/scripts/rhel7/virtualbox.sh index 2424514fe..d643ccfa4 100644 --- a/scripts/rhel7/virtualbox.sh +++ b/scripts/rhel7/virtualbox.sh @@ -18,6 +18,13 @@ error() { printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" fi + if [ -f /var/log/vboxadd-setup.log ]; then + printf "\n\n/var/log/vboxadd-setup.log\n\n" + cat /var/log/vboxadd-setup.log + else + printf "\n\nThe /var/log/vboxadd-setup.log is missing...\n\n" + fi + exit 1 fi } diff --git a/scripts/rhel8/base.sh b/scripts/rhel8/base.sh index bfad317cf..92b5ce3c5 100644 --- a/scripts/rhel8/base.sh +++ b/scripts/rhel8/base.sh @@ -2,7 +2,7 @@ error() { if [ $? -ne 0 ]; then - printf "\n\nyum failed...\n\n"; + printf "\n\ndnf failed...\n\n"; exit 1 fi } diff --git a/scripts/rhel8/cleanup.sh b/scripts/rhel8/cleanup.sh index 54384a226..54574eeca 100644 --- a/scripts/rhel8/cleanup.sh +++ b/scripts/rhel8/cleanup.sh @@ -7,9 +7,9 @@ printf "Remove the ethernet identity values.\n" sed -i /UUID/d /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i /HWADDR/d /etc/sysconfig/network-scripts/ifcfg-eth0 -# Clean up the yum data. +# Clean up the dnf data. printf "Remove packages only required for provisioning purposes and then dump the repository cache.\n" -yum --quiet --assumeyes clean all +dnf --quiet --assumeyes clean all # Remove the installation logs. rm --force /root/anaconda-ks.cfg /root/install.log /root/install.log.syslog diff --git a/scripts/rhel8/dockerize.sh b/scripts/rhel8/dockerize.sh index 66a530d56..85f868d77 100644 --- a/scripts/rhel8/dockerize.sh +++ b/scripts/rhel8/dockerize.sh @@ -2,7 +2,7 @@ # Cleanup. rpm -Va --nofiles --nodigest -yum clean all +dnf clean all # Stop services to avoid tarring sockets. systemctl stop abrt diff --git a/scripts/rhel8/kernel.sh b/scripts/rhel8/kernel.sh index b050da9a5..bafd753b1 100644 --- a/scripts/rhel8/kernel.sh +++ b/scripts/rhel8/kernel.sh @@ -8,7 +8,7 @@ fi # Now that the system is running atop the updated kernel, we can install the # development files for the kernel. These files are required to compile the # virtualization kernel modules later in the provisioning process. -yum --assumeyes install kernel-tools kernel-devel kernel-headers +dnf --assumeyes install kernel-tools kernel-devel kernel-headers # Now that the system is running on the updated kernel, we can remove the # old kernel(s) from the system. diff --git a/scripts/rhel8/magma.sh b/scripts/rhel8/magma.sh index 6cf18cc4a..dc9de166f 100644 --- a/scripts/rhel8/magma.sh +++ b/scripts/rhel8/magma.sh @@ -14,22 +14,22 @@ if [ ! -d /media/BaseOS/ ] || [ ! -d /media/AppStream/ ]; then fi # Install the the EPEL repository. -yum --assumeyes --enablerepo=extras install epel-release; error +dnf --assumeyes --enablerepo=extras install epel-release; error # Packages needed beyond a minimal install to build and run magma. -yum --quiet --assumeyes install valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive zlib-devel; error +dnf --quiet --assumeyes install valgrind valgrind-devel texinfo autoconf automake libtool ncurses-devel gcc-c++ libstdc++-devel gcc cpp glibc-devel glibc-headers kernel-headers mpfr ppl perl perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version patch sysstat perl-Time-HiRes make cmake libarchive zlib-devel; error # Grab the required packages from the EPEL repo. -yum --quiet --assumeyes install libbsd libbsd-devel inotify-tools; error +dnf --quiet --assumeyes install libbsd libbsd-devel inotify-tools; error # Boosts the available entropy which allows magma to start faster. -yum --quiet --assumeyes install haveged; error +dnf --quiet --assumeyes install haveged; error # Packages used to retrieve the magma code, but aren't required for building/running the daemon. -yum --quiet --assumeyes install wget git rsync perl-Git perl-Error; error +dnf --quiet --assumeyes install wget git rsync perl-Git perl-Error; error # These packages are required for the stacie.py script, which requires the python cryptography package (installed via pip). -yum --quiet --assumeyes install python-crypto python-cryptography +dnf --quiet --assumeyes install python-crypto python-cryptography # Create the clamav user to avoid spurious errors. useradd clamav @@ -77,6 +77,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -125,7 +132,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/rhel8/mariadb.sh b/scripts/rhel8/mariadb.sh index 8cad84eae..00f4fcdc9 100644 --- a/scripts/rhel8/mariadb.sh +++ b/scripts/rhel8/mariadb.sh @@ -5,7 +5,7 @@ if [ ! -d /media/BaseOS/ ] || [ ! -d /media/AppStream/ ]; then fi # Install MariaDB -yum install --assumeyes mariadb mariadb-libs mariadb-server perl-DBI perl-DBD-MySQL +dnf install --assumeyes mariadb mariadb-libs mariadb-server perl-DBI perl-DBD-MySQL # Change the default temporary table directory or else the schema reset will fail when it creates a temp table. printf "\n\n[server]\ntmpdir=/tmp/\n\n" >> /etc/my.cnf.d/server-tmpdir.cnf diff --git a/scripts/rhel8/memcached.sh b/scripts/rhel8/memcached.sh index 29f2d2235..31c687d95 100644 --- a/scripts/rhel8/memcached.sh +++ b/scripts/rhel8/memcached.sh @@ -5,7 +5,7 @@ if [ ! -d /media/BaseOS/ ] || [ ! -d /media/AppStream/ ]; then fi # Install memcached. -yum install --assumeyes libevent memcached +dnf install --assumeyes libevent memcached # Ensure memcached doesn't try to use IPv6. if [ -f /etc/sysconfig/memcached ]; then diff --git a/scripts/rhel8/network.sh b/scripts/rhel8/network.sh index 942481e4f..3533f86dd 100644 --- a/scripts/rhel8/network.sh +++ b/scripts/rhel8/network.sh @@ -12,7 +12,7 @@ else printf "\n127.0.0.1 magma.builder\n\n" >> /etc/hosts fi -# Disable IPv6 or yum will resolve mirror names to IPv6 address and then fail to connect with them. +# Disable IPv6 or dnf will resolve mirror names to IPv6 address and then fail to connect with them. sysctl net.ipv6.conf.all.disable_ipv6=1 # Disable IPv6 and the iptables module used to firewall IPv6. diff --git a/scripts/rhel8/parallels.sh b/scripts/rhel8/parallels.sh index a542448a0..0336a515a 100644 --- a/scripts/rhel8/parallels.sh +++ b/scripts/rhel8/parallels.sh @@ -5,7 +5,7 @@ if [ ! -d /media/BaseOS/ ] || [ ! -d /media/AppStream/ ]; then fi # Needed to check whether we're running atop Parallels. -yum --assumeyes install dmidecode +dnf --assumeyes install dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/rhel8/postfix.sh b/scripts/rhel8/postfix.sh index 16f80c00f..c86b6872b 100644 --- a/scripts/rhel8/postfix.sh +++ b/scripts/rhel8/postfix.sh @@ -7,7 +7,7 @@ fi # The postfix server for message relays. The checkpolicy, policycoreutils and the- # policycoreutils-python packages are needed to compile the selinux module below. -yum --assumeyes install postfix checkpolicy policycoreutils policycoreutils-python +dnf --assumeyes install postfix checkpolicy policycoreutils policycoreutils-python # Postfix opportunistic TLS relay. printf "smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt\n" >> /etc/postfix/main.cf diff --git a/scripts/rhel8/qemu.sh b/scripts/rhel8/qemu.sh index 865d1b3d9..c495d585a 100644 --- a/scripts/rhel8/qemu.sh +++ b/scripts/rhel8/qemu.sh @@ -12,7 +12,7 @@ if [ ! -d /media/BaseOS/ ] || [ ! -d /media/AppStream/ ]; then mount /dev/cdrom /media || (printf "\nFailed mount RHEL cdrom.\n"; exit 1) fi -yum --assumeyes install dmidecode; error +dnf --assumeyes install dmidecode; error # Bail if we are not running atop QEMU. if [[ `dmidecode -s system-product-name` != "KVM" && `dmidecode -s system-manufacturer` != "QEMU" ]]; then @@ -22,4 +22,4 @@ fi # Install the QEMU using Yum. printf "Installing the QEMU Tools.\n" -yum --quiet --assumeyes install qemu-guest-agent; error +dnf --quiet --assumeyes install qemu-guest-agent; error diff --git a/scripts/rhel8/randomness.sh b/scripts/rhel8/randomness.sh index 384264abc..ba517ae09 100644 --- a/scripts/rhel8/randomness.sh +++ b/scripts/rhel8/randomness.sh @@ -9,7 +9,7 @@ fi # inside a virtual machines, but be careful, it doesn't end up running # on systems which aren't virtualized. The patch command is included # to ensure its use below doesn't cause an error. -yum --assumeyes install haveged patch +dnf --assumeyes install haveged patch # Enable and start the daemons. systemctl enable haveged diff --git a/scripts/rhel8/sshd.sh b/scripts/rhel8/sshd.sh index ffafc679b..82fecdbe6 100644 --- a/scripts/rhel8/sshd.sh +++ b/scripts/rhel8/sshd.sh @@ -18,7 +18,7 @@ sed --in-place "s/# AUTOCREATE_SERVER_KEYS=\"\"/AUTOCREATE_SERVER_KEYS=\"RSA\"/g # This will update the init script so when it goes to autogenerate the host keys, they are # 4096 bits, instead of the default. -sed --in-place "s/\\-t rsa /\-t rsa -b 4096 /g" /usr/sbin/sshd-keygen +# sed --in-place "s/\\-t rsa /\-t rsa -b 4096 /g" /usr/sbin/sshd-keygen # We uncomment the RSA host key path in the sshd config to avoid complaints about the missing DSA host key. sed --in-place "s/HostKey \/etc\/ssh\/ssh_host_ecdsa_key/#HostKey \/etc\/ssh\/ssh_host_ecdsa_key/g" /etc/ssh/sshd_config diff --git a/scripts/rhel8/tuning.sh b/scripts/rhel8/tuning.sh index 94a121450..7e8270a5a 100644 --- a/scripts/rhel8/tuning.sh +++ b/scripts/rhel8/tuning.sh @@ -5,10 +5,10 @@ if [ ! -d /media/BaseOS/ ] || [ ! -d /media/AppStream/ ]; then mount /dev/cdrom /media || (printf "\nFailed mount RHEL cdrom.\n"; exit 1) fi -yum --assumeyes install dmidecode +dnf --assumeyes install dmidecode # Configure tuned -yum --assumeyes install tuned +dnf --assumeyes install tuned systemctl enable tuned systemctl start tuned diff --git a/scripts/rhel8/updatedb.sh b/scripts/rhel8/updatedb.sh index 6263a8d08..2ff063ca7 100644 --- a/scripts/rhel8/updatedb.sh +++ b/scripts/rhel8/updatedb.sh @@ -1,9 +1,9 @@ #!/bin/bash -eux -yum --assumeyes install mlocate +dnf --assumeyes install mlocate # Update the locate database. -cp /etc/cron.daily/mlocate.cron /etc/cron.hourly/mlocate.cron && /etc/cron.daily/mlocate.cron +# cp /etc/cron.daily/mlocate.cron /etc/cron.hourly/mlocate.cron && /etc/cron.daily/mlocate.cron # A very simple script designed to ensure the locate database gets updated # automatically when the box is booted and provisioned. diff --git a/scripts/rhel8/virtualbox.sh b/scripts/rhel8/virtualbox.sh index 588ef5789..addfcb8fd 100644 --- a/scripts/rhel8/virtualbox.sh +++ b/scripts/rhel8/virtualbox.sh @@ -18,6 +18,13 @@ error() { printf "\n\nThe /var/log/vboxadd-install.log is missing...\n\n" fi + if [ -f /var/log/vboxadd-setup.log ]; then + printf "\n\n/var/log/vboxadd-setup.log\n\n" + cat /var/log/vboxadd-setup.log + else + printf "\n\nThe /var/log/vboxadd-setup.log is missing...\n\n" + fi + exit 1 fi } @@ -27,7 +34,7 @@ if [ ! -d /media/BaseOS/ ] || [ ! -d /media/AppStream/ ]; then mount /dev/cdrom /media || (printf "\nFailed mount RHEL cdrom.\n"; exit 1) fi -yum --assumeyes install dmidecode; error +dnf --assumeyes install dmidecode; error # Bail if we are not running atop VirtualBox. if [[ `dmidecode -s system-product-name` != "VirtualBox" ]]; then @@ -41,7 +48,7 @@ printf "Installing the Virtual Box Tools.\n" VBOXVERSION=`cat /root/VBoxVersion.txt` # Build will fail without the elf utilities. -yum --quiet --assumeyes install bzip2 elfutils-libelf-devel; error +dnf --quiet --assumeyes install bzip2 elfutils-libelf-devel; error # The group vboxsf is needed for shared folder access. getent group vboxsf >/dev/null || groupadd --system vboxsf; error diff --git a/scripts/rhel8/vmware.sh b/scripts/rhel8/vmware.sh index bb9199d3e..e3a6d9f0d 100644 --- a/scripts/rhel8/vmware.sh +++ b/scripts/rhel8/vmware.sh @@ -12,7 +12,7 @@ if [ ! -d /media/BaseOS/ ] || [ ! -d /media/AppStream/ ]; then mount /dev/cdrom /media || (printf "\nFailed mount RHEL cdrom.\n"; exit 1) fi -yum --assumeyes install dmidecode; error +dnf --assumeyes install dmidecode; error # Bail if we are not running inside VMWare. if [[ `dmidecode -s system-product-name` != "VMware Virtual Platform" ]]; then @@ -22,7 +22,7 @@ fi # Install the VMWare Tools. printf "Installing the VMWare Tools.\n" -yum --quiet --assumeyes install open-vm-tools fuse-libs libdnet libicu libmspack +dnf --quiet --assumeyes install open-vm-tools fuse-libs libdnet libicu libmspack systemctl enable vmtoolsd systemctl start vmtoolsd diff --git a/scripts/rhel8/yum.sh b/scripts/rhel8/yum.sh index 07f1c84e1..b151b9aba 100644 --- a/scripts/rhel8/yum.sh +++ b/scripts/rhel8/yum.sh @@ -5,7 +5,7 @@ if [ ! -d /media/BaseOS/ ] || [ ! -d /media/AppStream/ ]; then mount /dev/cdrom /media || (printf "\nFailed mount RHEL cdrom.\n"; exit 1) fi -# Setup the install DVD as the yum repo location. +# Setup the install DVD as the dnf repo location. cat <<-EOF > /etc/yum.repos.d/media.repo [rhel8-base-media] name=rhel8-base @@ -34,7 +34,7 @@ rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release # EOF # # # Install the EPEL release RPM. -# yum --assumeyes install epel-release-8-0.noarch.rpm +# dnf --assumeyes install epel-release-8-0.noarch.rpm # # # Setup the EPEL release signing key. # rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 @@ -48,10 +48,10 @@ rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release # sed -i -e "s/http:\/\/download.fedoraproject.org\/pub\/epel\//https:\/\/mirrors.kernel.org\/fedora-epel\//g" /etc/yum.repos.d/epel.repo # Install the basic packages we'd expect to find. -yum --assumeyes install sudo dmidecode yum-utils bash-completion man man-pages vim-enhanced sysstat bind-utils wget dos2unix unix2dos lsof telnet net-tools coreutils grep gawk sed curl patch sysstat make cmake libarchive info autoconf automake libtool gcc-c++ libstdc++-devel gcc cpp ncurses-devel glibc-devel glibc-headers kernel-headers psmisc +dnf --assumeyes install sudo dmidecode yum-utils bash-completion man man-pages vim-enhanced sysstat bind-utils wget dos2unix unix2dos lsof telnet net-tools coreutils grep gawk sed curl patch sysstat make cmake libarchive info autoconf automake libtool gcc-c++ libstdc++-devel gcc cpp ncurses-devel glibc-devel glibc-headers kernel-headers psmisc # For some reason the beta thinks this package is installed, when in fact it's missing. -yum --assumeyes reinstall libunistring +dnf --assumeyes reinstall libunistring # Whois is missing from the beta. # jwhois diff --git a/scripts/ubuntu1604/apt.sh b/scripts/ubuntu1604/apt.sh index bc9fafc53..3a31fb1f6 100644 --- a/scripts/ubuntu1604/apt.sh +++ b/scripts/ubuntu1604/apt.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\napt failed...\n\n"; @@ -35,17 +61,17 @@ systemctl stop apt-daily.service apt-daily.timer systemctl stop snapd.service snapd.socket snapd.refresh.timer # Update the package database. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error # Ensure the linux-tools and linux-cloud-tools get updated with the kernel. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic # Upgrade the installed packages. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error # Needed to retrieve source code, and other misc system tools. -apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc; error +retry apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc; error # Enable the sysstat collection service. sed -i -e "s|.*ENABLED=\".*\"|ENABLED=\"true\"|g" /etc/default/sysstat diff --git a/scripts/ubuntu1604/cleanup.sh b/scripts/ubuntu1604/cleanup.sh index 530efe178..d19adcff5 100644 --- a/scripts/ubuntu1604/cleanup.sh +++ b/scripts/ubuntu1604/cleanup.sh @@ -1,10 +1,10 @@ #!/bin/bash error() { - if [ $? -ne 0 ]; then - printf "\n\napt failed...\n\n"; - exit 1 - fi + if [ $? -ne 0 ]; then + printf "\n\napt failed...\n\n"; + exit 1 + fi } # To allow for autmated installs, we disable interactive configuration steps. diff --git a/scripts/ubuntu1604/lineage.sh b/scripts/ubuntu1604/lineage.sh index 2e4509b14..26ebf1750 100644 --- a/scripts/ubuntu1604/lineage.sh +++ b/scripts/ubuntu1604/lineage.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Disable IPv6 or DNS names will resolve to AAAA yet connections will fail. sysctl net.ipv6.conf.all.disable_ipv6=1 @@ -8,28 +34,28 @@ export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # Install developer tools. -apt-get --assume-yes install vim vim-nox wget curl gnupg mlocate sysstat lsof pciutils usbutils +retry apt-get --assume-yes install vim vim-nox wget curl gnupg mlocate sysstat lsof pciutils usbutils # Install the build dependencies. -apt-get --assume-yes install bc bison build-essential curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline6-dev lib32z1-dev libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev ninja-build +retry apt-get --assume-yes install bc bison build-essential curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline6-dev lib32z1-dev libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev ninja-build # Java 8 Support -apt-get --assume-yes install openjdk-8-jdk openjdk-8-jdk-headless openjdk-8-jre openjdk-8-jre-headless icedtea-8-plugin +retry apt-get --assume-yes install openjdk-8-jdk openjdk-8-jdk-headless openjdk-8-jre openjdk-8-jre-headless icedtea-8-plugin # Java dependencies -apt-get --assume-yes install maven libatk-wrapper-java libatk-wrapper-java-jni libpng16-16 libsctp1 +retry apt-get --assume-yes install maven libatk-wrapper-java libatk-wrapper-java-jni libpng16-16 libsctp1 # Download the OpenJDK 1.7 packages. -curl --location --output openjdk-7-jre_7u121-2.6.8-2_amd64.deb https://mirrors.kernel.org/debian/pool/main/o/openjdk-7/openjdk-7-jre_7u121-2.6.8-2_amd64.deb -curl --location --output openjdk-7-jre-headless_7u121-2.6.8-2_amd64.deb https://mirrors.kernel.org/debian/pool/main/o/openjdk-7/openjdk-7-jre-headless_7u121-2.6.8-2_amd64.deb -curl --location --output openjdk-7-jdk_7u121-2.6.8-2_amd64.deb https://mirrors.kernel.org/debian/pool/main/o/openjdk-7/openjdk-7-jdk_7u121-2.6.8-2_amd64.deb -curl --location --output libjpeg62-turbo_1.5.1-2_amd64.deb https://mirrors.kernel.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.1-2_amd64.deb +retry curl --location --output openjdk-7-jre_7u121-2.6.8-2_amd64.deb https://mirrors.kernel.org/debian/pool/main/o/openjdk-7/openjdk-7-jre_7u121-2.6.8-2_amd64.deb +retry curl --location --output openjdk-7-jre-headless_7u121-2.6.8-2_amd64.deb https://mirrors.kernel.org/debian/pool/main/o/openjdk-7/openjdk-7-jre-headless_7u121-2.6.8-2_amd64.deb +retry curl --location --output openjdk-7-jdk_7u121-2.6.8-2_amd64.deb https://mirrors.kernel.org/debian/pool/main/o/openjdk-7/openjdk-7-jdk_7u121-2.6.8-2_amd64.deb +retry curl --location --output libjpeg62-turbo_1.5.1-2_amd64.deb https://mirrors.kernel.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.1-2_amd64.deb # Install via dpkg. dpkg -i openjdk-7-jre_7u121-2.6.8-2_amd64.deb openjdk-7-jre-headless_7u121-2.6.8-2_amd64.deb openjdk-7-jdk_7u121-2.6.8-2_amd64.deb libjpeg62-turbo_1.5.1-2_amd64.deb # Assuming the OpenJDK has dependencies... install them here. -apt --assume-yes install -f +retry apt --assume-yes install -f # Setup OpenJDK 1.7 as the default, which is required for the 13.0 branch. update-java-alternatives -s java-1.7.0-openjdk-amd64 @@ -39,19 +65,19 @@ rm --force openjdk-7-jre_7u121-2.6.8-2_amd64.deb openjdk-7-jre-headless_7u121-2. # Enable the source code repositories. sed -i -e "s|.*deb-src |deb-src |g" /etc/apt/sources.list -apt-get --assume-yes update +retry apt-get --assume-yes update # Ensure the dependencies required to compile git are available. -apt-get --assume-yes install build-essential fakeroot dpkg-dev -apt-get --assume-yes build-dep git +retry apt-get --assume-yes install build-essential fakeroot dpkg-dev +retry apt-get --assume-yes build-dep git # The build-dep command will remove the OpenSSL version of libcurl, so we have to # install here instead. -apt-get --assume-yes install libcurl4-openssl-dev +retry apt-get --assume-yes install libcurl4-openssl-dev # Download the git sourcecode. mkdir -p $HOME/git-openssl && cd $HOME/git-openssl -apt-get source git +retry apt-get source git dpkg-source -x `find * -type f -name *.dsc` cd `find * -maxdepth 0 -type d` @@ -67,7 +93,7 @@ dpkg -i `find ../* -type f -name *amd64.deb` cd $HOME && rm --force --recursive $HOME/git-openssl # Download the Android tools. -curl --location --output platform-tools-latest-linux.zip https://dl.google.com/android/repository/platform-tools-latest-linux.zip +retry curl --location --output platform-tools-latest-linux.zip https://dl.google.com/android/repository/platform-tools-latest-linux.zip # Install the platform tools. unzip platform-tools-latest-linux.zip -d /usr/local/ @@ -79,7 +105,7 @@ rm --force platform-tools-latest-linux.zip printf "PATH=/usr/local/platform-tools/:$PATH\n" > /etc/profile.d/platform-tools.sh # Install the repo utility. -curl --location https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo +retry curl --location https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo chmod a+x /usr/bin/repo # Setup higher resource limits. diff --git a/scripts/ubuntu1604/magma.sh b/scripts/ubuntu1604/magma.sh index d7920d16a..b610ca8ef 100644 --- a/scripts/ubuntu1604/magma.sh +++ b/scripts/ubuntu1604/magma.sh @@ -1,23 +1,49 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The packages needed to compile magma. -apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr4 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config +retry apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr4 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config # Need to retrieve the source code. -apt-get --assume-yes install git git-man liberror-perl rsync wget +retry apt-get --assume-yes install git git-man liberror-perl rsync wget # Needed to run the watcher and status scripts. -apt-get --assume-yes install sysstat inotify-tools +retry apt-get --assume-yes install sysstat inotify-tools # Needed to run the stacie script. -apt-get --assume-yes install python-crypto python-cryptography +retry apt-get --assume-yes install python-crypto python-cryptography # Make sure the MySQLs server is available. -apt-get --assume-yes install mysql-server +retry apt-get --assume-yes install mysql-server # Force MySQL/MariaDB except the old fashioned '0000-00-00' date format. if [ -d /etc/mysql/mysql.conf.d/ ]; then @@ -33,7 +59,7 @@ mysql --execute="CREATE USER mytool@localhost IDENTIFIED BY 'aComplex1'" mysql --execute="GRANT ALL ON *.* TO mytool@localhost" # The postfix server for message relays. -apt-get --assume-yes install postfix +retry apt-get --assume-yes install postfix # Configure the postfix hostname and origin parameters. printf "\ninet_interfaces = localhost\n" >> /etc/postfix/main.cf @@ -76,6 +102,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -127,7 +160,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/ubuntu1604/memcached.sh b/scripts/ubuntu1604/memcached.sh index c08cdbdef..b0b281a83 100644 --- a/scripts/ubuntu1604/memcached.sh +++ b/scripts/ubuntu1604/memcached.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The memcached server. -apt-get --assume-yes install memcached libevent-dev +retry apt-get --assume-yes install memcached libevent-dev # Setup memcached to start automatically. systemctl start memcached.service && systemctl enable memcached.service diff --git a/scripts/ubuntu1604/mysql.sh b/scripts/ubuntu1604/mysql.sh index 5ef119290..1d12c3ba6 100644 --- a/scripts/ubuntu1604/mysql.sh +++ b/scripts/ubuntu1604/mysql.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The mysql client and related utilities. -apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl +retry apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl # Enable mysql and configure it to automatically start. systemctl start mysql.service && systemctl enable mysql.service diff --git a/scripts/ubuntu1604/network.sh b/scripts/ubuntu1604/network.sh index 8c65e029b..fabcb4841 100644 --- a/scripts/ubuntu1604/network.sh +++ b/scripts/ubuntu1604/network.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true @@ -43,7 +69,7 @@ printf "pre-up sleep 2\n" >> /etc/network/interfaces printf "nameserver 4.2.2.1\nnameserver 4.2.2.2\nnameserver 208.67.220.220\n" > /etc/resolv.conf # Install ifplugd so we can monitor and auto-configure nics. -apt-get --assume-yes install ifplugd +retry apt-get --assume-yes install ifplugd # Configure ifplugd to monitor the eth0 interface. sed -i -e 's/INTERFACES=.*/INTERFACES="eth0"/g' /etc/default/ifplugd diff --git a/scripts/ubuntu1604/parallels.sh b/scripts/ubuntu1604/parallels.sh index 0e6b33dc8..c009e94aa 100644 --- a/scripts/ubuntu1604/parallels.sh +++ b/scripts/ubuntu1604/parallels.sh @@ -1,9 +1,36 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install dmidecode + +retry apt-get --assume-yes install dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/ubuntu1604/postfix.sh b/scripts/ubuntu1604/postfix.sh index a75a8b6d1..7465e77bb 100644 --- a/scripts/ubuntu1604/postfix.sh +++ b/scripts/ubuntu1604/postfix.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The postfix server for message relays. -apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert +retry apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert # Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf diff --git a/scripts/ubuntu1604/qemu.sh b/scripts/ubuntu1604/qemu.sh index 23eef3717..a85127758 100644 --- a/scripts/ubuntu1604/qemu.sh +++ b/scripts/ubuntu1604/qemu.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -20,13 +46,13 @@ printf "Installing the QEMU Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install qemu-guest-agent; error +retry apt-get --assume-yes install qemu-guest-agent; error # For some reason the VMWare tools are installed on QEMU guest images. systemctl disable open-vm-tools.service # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1604/virtualbox.sh b/scripts/ubuntu1604/virtualbox.sh index 17d54d4b1..741c458c2 100644 --- a/scripts/ubuntu1604/virtualbox.sh +++ b/scripts/ubuntu1604/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -19,7 +45,7 @@ printf "Installing the Virtual Box Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install virtualbox-guest-utils; error +retry apt-get --assume-yes install virtualbox-guest-utils; error # Read in the version number. export VBOXVERSION=`cat /root/VBoxVersion.txt` @@ -45,7 +71,7 @@ rm -rf /root/VBoxVersion.txt; error rm -rf /root/VBoxGuestAdditions.iso; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1604/vmware.sh b/scripts/ubuntu1604/vmware.sh index c94e04bf5..51c572155 100644 --- a/scripts/ubuntu1604/vmware.sh +++ b/scripts/ubuntu1604/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -20,7 +46,7 @@ printf "Installing the VMWare Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree +retry apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree systemctl enable open-vm-tools.service systemctl start open-vm-tools.service @@ -37,7 +63,7 @@ rm -rf /root/linux.iso; error #rm -rf /tmp/vmware-tools-distrib; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1610/apt.sh b/scripts/ubuntu1610/apt.sh index 21a8c5413..986685091 100644 --- a/scripts/ubuntu1610/apt.sh +++ b/scripts/ubuntu1610/apt.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Use the Lavabit mirror. sed -i -e "s/http:\/\/old-releases.ubuntu.com/https:\/\/mirrors.lavabit.com/g" /etc/apt/sources.list @@ -26,22 +52,23 @@ printf "APT::Periodic::Enable \"0\";\n" >> /etc/apt/apt.conf.d/10periodic printf "APT::Periodic::Enable \"0\";\n" >> /etc/apt/apt.conf.d/20retries fi + # Keep the daily apt updater from deadlocking our installs. systemctl stop apt-daily.service apt-daily.timer systemctl stop snapd.service snapd.socket snapd.refresh.timer # Update the package database. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update # Ensure the linux-tools and linux-cloud-tools get updated with the kernel. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic # Upgrade the installed packages. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade # Needed to retrieve source code, and other misc system tools. -apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc +retry apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc # Enable the sysstat collection service. sed -i -e "s|.*ENABLED=\".*\"|ENABLED=\"true\"|g" /etc/default/sysstat diff --git a/scripts/ubuntu1610/cleanup.sh b/scripts/ubuntu1610/cleanup.sh index add5a6988..b460fd79c 100644 --- a/scripts/ubuntu1610/cleanup.sh +++ b/scripts/ubuntu1610/cleanup.sh @@ -1,10 +1,10 @@ #!/bin/bash error() { - if [ $? -ne 0 ]; then - printf "\n\napt failed...\n\n"; - exit 1 - fi + if [ $? -ne 0 ]; then + printf "\n\napt failed...\n\n"; + exit 1 + fi } # To allow for autmated installs, we disable interactive configuration steps. @@ -14,7 +14,6 @@ export DEBCONF_NONINTERACTIVE_SEEN=true # Reset the apt sources. sed -i -e "s/https:\/\/mirrors.lavabit.com/http:\/\/old-releases.ubuntu.com/g" /etc/apt/sources.list - # Keep the daily apt updater from deadlocking our installs. systemctl stop apt-daily.service apt-daily.timer systemctl stop snapd.service snapd.socket snapd.refresh.timer diff --git a/scripts/ubuntu1610/magma.sh b/scripts/ubuntu1610/magma.sh index d7920d16a..b610ca8ef 100644 --- a/scripts/ubuntu1610/magma.sh +++ b/scripts/ubuntu1610/magma.sh @@ -1,23 +1,49 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The packages needed to compile magma. -apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr4 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config +retry apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr4 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config # Need to retrieve the source code. -apt-get --assume-yes install git git-man liberror-perl rsync wget +retry apt-get --assume-yes install git git-man liberror-perl rsync wget # Needed to run the watcher and status scripts. -apt-get --assume-yes install sysstat inotify-tools +retry apt-get --assume-yes install sysstat inotify-tools # Needed to run the stacie script. -apt-get --assume-yes install python-crypto python-cryptography +retry apt-get --assume-yes install python-crypto python-cryptography # Make sure the MySQLs server is available. -apt-get --assume-yes install mysql-server +retry apt-get --assume-yes install mysql-server # Force MySQL/MariaDB except the old fashioned '0000-00-00' date format. if [ -d /etc/mysql/mysql.conf.d/ ]; then @@ -33,7 +59,7 @@ mysql --execute="CREATE USER mytool@localhost IDENTIFIED BY 'aComplex1'" mysql --execute="GRANT ALL ON *.* TO mytool@localhost" # The postfix server for message relays. -apt-get --assume-yes install postfix +retry apt-get --assume-yes install postfix # Configure the postfix hostname and origin parameters. printf "\ninet_interfaces = localhost\n" >> /etc/postfix/main.cf @@ -76,6 +102,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -127,7 +160,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/ubuntu1610/memcached.sh b/scripts/ubuntu1610/memcached.sh index c08cdbdef..b0b281a83 100644 --- a/scripts/ubuntu1610/memcached.sh +++ b/scripts/ubuntu1610/memcached.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The memcached server. -apt-get --assume-yes install memcached libevent-dev +retry apt-get --assume-yes install memcached libevent-dev # Setup memcached to start automatically. systemctl start memcached.service && systemctl enable memcached.service diff --git a/scripts/ubuntu1610/mysql.sh b/scripts/ubuntu1610/mysql.sh index 5ef119290..1d12c3ba6 100644 --- a/scripts/ubuntu1610/mysql.sh +++ b/scripts/ubuntu1610/mysql.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The mysql client and related utilities. -apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl +retry apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl # Enable mysql and configure it to automatically start. systemctl start mysql.service && systemctl enable mysql.service diff --git a/scripts/ubuntu1610/network.sh b/scripts/ubuntu1610/network.sh index 1b555315c..04d1e310a 100644 --- a/scripts/ubuntu1610/network.sh +++ b/scripts/ubuntu1610/network.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true @@ -40,7 +66,7 @@ printf "pre-up sleep 2\n" >> /etc/network/interfaces printf "nameserver 4.2.2.1\nnameserver 4.2.2.2\nnameserver 208.67.220.220\n" > /etc/resolv.conf # Install ifplugd so we can monitor and auto-configure nics. -apt-get --assume-yes install ifplugd +retry apt-get --assume-yes install ifplugd # Configure ifplugd to monitor the eth0 interface. sed -i -e 's/INTERFACES=.*/INTERFACES="eth0"/g' /etc/default/ifplugd diff --git a/scripts/ubuntu1610/parallels.sh b/scripts/ubuntu1610/parallels.sh index 0e6b33dc8..244d5d0e1 100644 --- a/scripts/ubuntu1610/parallels.sh +++ b/scripts/ubuntu1610/parallels.sh @@ -1,9 +1,35 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install dmidecode +retry apt-get --assume-yes install dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/ubuntu1610/postfix.sh b/scripts/ubuntu1610/postfix.sh index a75a8b6d1..7465e77bb 100644 --- a/scripts/ubuntu1610/postfix.sh +++ b/scripts/ubuntu1610/postfix.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The postfix server for message relays. -apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert +retry apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert # Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf diff --git a/scripts/ubuntu1610/qemu.sh b/scripts/ubuntu1610/qemu.sh index 2aba1ee0b..0639c0c3d 100644 --- a/scripts/ubuntu1610/qemu.sh +++ b/scripts/ubuntu1610/qemu.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -20,7 +46,7 @@ printf "Installing the QEMU Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install qemu-guest-agent; error +retry apt-get --assume-yes install qemu-guest-agent; error # For some reason the VMWare tools are installed on QEMU guest images. systemctl disable open-vm-tools.service diff --git a/scripts/ubuntu1610/virtualbox.sh b/scripts/ubuntu1610/virtualbox.sh index 11ae658ae..e610963d5 100644 --- a/scripts/ubuntu1610/virtualbox.sh +++ b/scripts/ubuntu1610/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -19,7 +45,7 @@ printf "Installing the Virtual Box Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install virtualbox-guest-utils; error +retry apt-get --assume-yes install virtualbox-guest-utils; error # Read in the version number. export VBOXVERSION=`cat /root/VBoxVersion.txt` diff --git a/scripts/ubuntu1610/vmware.sh b/scripts/ubuntu1610/vmware.sh index c825028ae..6dc60e8f8 100644 --- a/scripts/ubuntu1610/vmware.sh +++ b/scripts/ubuntu1610/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -20,7 +46,7 @@ printf "Installing the VMWare Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree +retry apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree systemctl enable open-vm-tools.service systemctl start open-vm-tools.service diff --git a/scripts/ubuntu1704/apt.sh b/scripts/ubuntu1704/apt.sh index aba04d65e..1e3d5d18e 100644 --- a/scripts/ubuntu1704/apt.sh +++ b/scripts/ubuntu1704/apt.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\napt failed...\n\n"; @@ -91,17 +117,17 @@ deb http://old-releases.ubuntu.com/ubuntu zesty-backports main restricted univer EOF # Update the package database. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error # Ensure the linux-tools and linux-cloud-tools get updated with the kernel. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic # Upgrade the installed packages. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error # Needed to retrieve source code, and other misc system tools. -apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc; error +retry apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc; error # Enable the sysstat collection service. sed -i -e "s|.*ENABLED=\".*\"|ENABLED=\"true\"|g" /etc/default/sysstat diff --git a/scripts/ubuntu1704/cleanup.sh b/scripts/ubuntu1704/cleanup.sh index 530efe178..d19adcff5 100644 --- a/scripts/ubuntu1704/cleanup.sh +++ b/scripts/ubuntu1704/cleanup.sh @@ -1,10 +1,10 @@ #!/bin/bash error() { - if [ $? -ne 0 ]; then - printf "\n\napt failed...\n\n"; - exit 1 - fi + if [ $? -ne 0 ]; then + printf "\n\napt failed...\n\n"; + exit 1 + fi } # To allow for autmated installs, we disable interactive configuration steps. diff --git a/scripts/ubuntu1704/magma.sh b/scripts/ubuntu1704/magma.sh index 136e63a9e..b610ca8ef 100644 --- a/scripts/ubuntu1704/magma.sh +++ b/scripts/ubuntu1704/magma.sh @@ -1,23 +1,49 @@ - #!/bin/bash -eux + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The packages needed to compile magma. -apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr4 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config +retry apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr4 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config # Need to retrieve the source code. -apt-get --assume-yes install git git-man liberror-perl rsync wget +retry apt-get --assume-yes install git git-man liberror-perl rsync wget # Needed to run the watcher and status scripts. -apt-get --assume-yes install sysstat inotify-tools +retry apt-get --assume-yes install sysstat inotify-tools # Needed to run the stacie script. -apt-get --assume-yes install python-crypto python-cryptography +retry apt-get --assume-yes install python-crypto python-cryptography # Make sure the MySQLs server is available. -apt-get --assume-yes install mysql-server +retry apt-get --assume-yes install mysql-server # Force MySQL/MariaDB except the old fashioned '0000-00-00' date format. if [ -d /etc/mysql/mysql.conf.d/ ]; then @@ -33,7 +59,7 @@ mysql --execute="CREATE USER mytool@localhost IDENTIFIED BY 'aComplex1'" mysql --execute="GRANT ALL ON *.* TO mytool@localhost" # The postfix server for message relays. -apt-get --assume-yes install postfix +retry apt-get --assume-yes install postfix # Configure the postfix hostname and origin parameters. printf "\ninet_interfaces = localhost\n" >> /etc/postfix/main.cf @@ -76,6 +102,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -127,7 +160,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/ubuntu1704/memcached.sh b/scripts/ubuntu1704/memcached.sh index c08cdbdef..b0b281a83 100644 --- a/scripts/ubuntu1704/memcached.sh +++ b/scripts/ubuntu1704/memcached.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The memcached server. -apt-get --assume-yes install memcached libevent-dev +retry apt-get --assume-yes install memcached libevent-dev # Setup memcached to start automatically. systemctl start memcached.service && systemctl enable memcached.service diff --git a/scripts/ubuntu1704/mysql.sh b/scripts/ubuntu1704/mysql.sh index 5ef119290..1d12c3ba6 100644 --- a/scripts/ubuntu1704/mysql.sh +++ b/scripts/ubuntu1704/mysql.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The mysql client and related utilities. -apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl +retry apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl # Enable mysql and configure it to automatically start. systemctl start mysql.service && systemctl enable mysql.service diff --git a/scripts/ubuntu1704/network.sh b/scripts/ubuntu1704/network.sh index ef244de41..217a78a10 100644 --- a/scripts/ubuntu1704/network.sh +++ b/scripts/ubuntu1704/network.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true @@ -40,7 +66,7 @@ printf "pre-up sleep 2\n" >> /etc/network/interfaces printf "nameserver 4.2.2.1\nnameserver 4.2.2.2\nnameserver 208.67.220.220\n" > /etc/resolv.conf # Install ifplugd so we can monitor and auto-configure nics. -apt-get --assume-yes install ifplugd +retry apt-get --assume-yes install ifplugd # Configure ifplugd to monitor the eth0 interface. sed -i -e 's/INTERFACES=.*/INTERFACES="eth0"/g' /etc/default/ifplugd diff --git a/scripts/ubuntu1704/parallels.sh b/scripts/ubuntu1704/parallels.sh index 0e6b33dc8..244d5d0e1 100644 --- a/scripts/ubuntu1704/parallels.sh +++ b/scripts/ubuntu1704/parallels.sh @@ -1,9 +1,35 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install dmidecode +retry apt-get --assume-yes install dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/ubuntu1704/postfix.sh b/scripts/ubuntu1704/postfix.sh index a75a8b6d1..7465e77bb 100644 --- a/scripts/ubuntu1704/postfix.sh +++ b/scripts/ubuntu1704/postfix.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The postfix server for message relays. -apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert +retry apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert # Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf diff --git a/scripts/ubuntu1704/qemu.sh b/scripts/ubuntu1704/qemu.sh index 23eef3717..a85127758 100644 --- a/scripts/ubuntu1704/qemu.sh +++ b/scripts/ubuntu1704/qemu.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -20,13 +46,13 @@ printf "Installing the QEMU Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install qemu-guest-agent; error +retry apt-get --assume-yes install qemu-guest-agent; error # For some reason the VMWare tools are installed on QEMU guest images. systemctl disable open-vm-tools.service # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1704/virtualbox.sh b/scripts/ubuntu1704/virtualbox.sh index dd87d891c..a11537182 100644 --- a/scripts/ubuntu1704/virtualbox.sh +++ b/scripts/ubuntu1704/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -19,7 +45,7 @@ printf "Installing the Virtual Box Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install virtualbox-guest-utils; error +retry apt-get --assume-yes install virtualbox-guest-utils; error # Read in the version number. export VBOXVERSION=`cat /root/VBoxVersion.txt` @@ -45,7 +71,7 @@ rm -rf /root/VBoxVersion.txt; error rm -rf /root/VBoxGuestAdditions.iso; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1704/vmware.sh b/scripts/ubuntu1704/vmware.sh index c94e04bf5..51c572155 100644 --- a/scripts/ubuntu1704/vmware.sh +++ b/scripts/ubuntu1704/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -20,7 +46,7 @@ printf "Installing the VMWare Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree +retry apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree systemctl enable open-vm-tools.service systemctl start open-vm-tools.service @@ -37,7 +63,7 @@ rm -rf /root/linux.iso; error #rm -rf /tmp/vmware-tools-distrib; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1710/apt.sh b/scripts/ubuntu1710/apt.sh index bc9fafc53..3a31fb1f6 100644 --- a/scripts/ubuntu1710/apt.sh +++ b/scripts/ubuntu1710/apt.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\napt failed...\n\n"; @@ -35,17 +61,17 @@ systemctl stop apt-daily.service apt-daily.timer systemctl stop snapd.service snapd.socket snapd.refresh.timer # Update the package database. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error # Ensure the linux-tools and linux-cloud-tools get updated with the kernel. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic # Upgrade the installed packages. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error # Needed to retrieve source code, and other misc system tools. -apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc; error +retry apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc; error # Enable the sysstat collection service. sed -i -e "s|.*ENABLED=\".*\"|ENABLED=\"true\"|g" /etc/default/sysstat diff --git a/scripts/ubuntu1710/cleanup.sh b/scripts/ubuntu1710/cleanup.sh index 530efe178..d19adcff5 100644 --- a/scripts/ubuntu1710/cleanup.sh +++ b/scripts/ubuntu1710/cleanup.sh @@ -1,10 +1,10 @@ #!/bin/bash error() { - if [ $? -ne 0 ]; then - printf "\n\napt failed...\n\n"; - exit 1 - fi + if [ $? -ne 0 ]; then + printf "\n\napt failed...\n\n"; + exit 1 + fi } # To allow for autmated installs, we disable interactive configuration steps. diff --git a/scripts/ubuntu1710/magma.sh b/scripts/ubuntu1710/magma.sh index d7920d16a..b610ca8ef 100644 --- a/scripts/ubuntu1710/magma.sh +++ b/scripts/ubuntu1710/magma.sh @@ -1,23 +1,49 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The packages needed to compile magma. -apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr4 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config +retry apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr4 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config # Need to retrieve the source code. -apt-get --assume-yes install git git-man liberror-perl rsync wget +retry apt-get --assume-yes install git git-man liberror-perl rsync wget # Needed to run the watcher and status scripts. -apt-get --assume-yes install sysstat inotify-tools +retry apt-get --assume-yes install sysstat inotify-tools # Needed to run the stacie script. -apt-get --assume-yes install python-crypto python-cryptography +retry apt-get --assume-yes install python-crypto python-cryptography # Make sure the MySQLs server is available. -apt-get --assume-yes install mysql-server +retry apt-get --assume-yes install mysql-server # Force MySQL/MariaDB except the old fashioned '0000-00-00' date format. if [ -d /etc/mysql/mysql.conf.d/ ]; then @@ -33,7 +59,7 @@ mysql --execute="CREATE USER mytool@localhost IDENTIFIED BY 'aComplex1'" mysql --execute="GRANT ALL ON *.* TO mytool@localhost" # The postfix server for message relays. -apt-get --assume-yes install postfix +retry apt-get --assume-yes install postfix # Configure the postfix hostname and origin parameters. printf "\ninet_interfaces = localhost\n" >> /etc/postfix/main.cf @@ -76,6 +102,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -127,7 +160,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/ubuntu1710/memcached.sh b/scripts/ubuntu1710/memcached.sh index c08cdbdef..b0b281a83 100644 --- a/scripts/ubuntu1710/memcached.sh +++ b/scripts/ubuntu1710/memcached.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The memcached server. -apt-get --assume-yes install memcached libevent-dev +retry apt-get --assume-yes install memcached libevent-dev # Setup memcached to start automatically. systemctl start memcached.service && systemctl enable memcached.service diff --git a/scripts/ubuntu1710/mysql.sh b/scripts/ubuntu1710/mysql.sh index 5ef119290..1d12c3ba6 100644 --- a/scripts/ubuntu1710/mysql.sh +++ b/scripts/ubuntu1710/mysql.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The mysql client and related utilities. -apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl +retry apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl # Enable mysql and configure it to automatically start. systemctl start mysql.service && systemctl enable mysql.service diff --git a/scripts/ubuntu1710/network.sh b/scripts/ubuntu1710/network.sh index 974fe6fea..85a3518d7 100644 --- a/scripts/ubuntu1710/network.sh +++ b/scripts/ubuntu1710/network.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true @@ -40,7 +66,7 @@ printf "pre-up sleep 2\n" >> /etc/network/interfaces printf "nameserver 4.2.2.1\nnameserver 4.2.2.2\nnameserver 208.67.220.220\n" > /etc/resolv.conf # Install ifplugd so we can monitor and auto-configure nics. -apt-get --assume-yes install ifplugd +retry apt-get --assume-yes install ifplugd # Configure ifplugd to monitor the eth0 interface. sed -i -e 's/INTERFACES=.*/INTERFACES="eth0"/g' /etc/default/ifplugd diff --git a/scripts/ubuntu1710/parallels.sh b/scripts/ubuntu1710/parallels.sh index 0e6b33dc8..244d5d0e1 100644 --- a/scripts/ubuntu1710/parallels.sh +++ b/scripts/ubuntu1710/parallels.sh @@ -1,9 +1,35 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install dmidecode +retry apt-get --assume-yes install dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/ubuntu1710/postfix.sh b/scripts/ubuntu1710/postfix.sh index a75a8b6d1..7465e77bb 100644 --- a/scripts/ubuntu1710/postfix.sh +++ b/scripts/ubuntu1710/postfix.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The postfix server for message relays. -apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert +retry apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert # Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf diff --git a/scripts/ubuntu1710/qemu.sh b/scripts/ubuntu1710/qemu.sh index 23eef3717..a85127758 100644 --- a/scripts/ubuntu1710/qemu.sh +++ b/scripts/ubuntu1710/qemu.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -20,13 +46,13 @@ printf "Installing the QEMU Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install qemu-guest-agent; error +retry apt-get --assume-yes install qemu-guest-agent; error # For some reason the VMWare tools are installed on QEMU guest images. systemctl disable open-vm-tools.service # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1710/virtualbox.sh b/scripts/ubuntu1710/virtualbox.sh index dd87d891c..a11537182 100644 --- a/scripts/ubuntu1710/virtualbox.sh +++ b/scripts/ubuntu1710/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -19,7 +45,7 @@ printf "Installing the Virtual Box Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install virtualbox-guest-utils; error +retry apt-get --assume-yes install virtualbox-guest-utils; error # Read in the version number. export VBOXVERSION=`cat /root/VBoxVersion.txt` @@ -45,7 +71,7 @@ rm -rf /root/VBoxVersion.txt; error rm -rf /root/VBoxGuestAdditions.iso; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1710/vmware.sh b/scripts/ubuntu1710/vmware.sh index c94e04bf5..51c572155 100644 --- a/scripts/ubuntu1710/vmware.sh +++ b/scripts/ubuntu1710/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -20,7 +46,7 @@ printf "Installing the VMWare Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree +retry apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree systemctl enable open-vm-tools.service systemctl start open-vm-tools.service @@ -37,7 +63,7 @@ rm -rf /root/linux.iso; error #rm -rf /tmp/vmware-tools-distrib; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1804/apt.sh b/scripts/ubuntu1804/apt.sh index bc9fafc53..3a31fb1f6 100644 --- a/scripts/ubuntu1804/apt.sh +++ b/scripts/ubuntu1804/apt.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\napt failed...\n\n"; @@ -35,17 +61,17 @@ systemctl stop apt-daily.service apt-daily.timer systemctl stop snapd.service snapd.socket snapd.refresh.timer # Update the package database. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error # Ensure the linux-tools and linux-cloud-tools get updated with the kernel. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic # Upgrade the installed packages. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error # Needed to retrieve source code, and other misc system tools. -apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc; error +retry apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc; error # Enable the sysstat collection service. sed -i -e "s|.*ENABLED=\".*\"|ENABLED=\"true\"|g" /etc/default/sysstat diff --git a/scripts/ubuntu1804/cleanup.sh b/scripts/ubuntu1804/cleanup.sh index 530efe178..d19adcff5 100644 --- a/scripts/ubuntu1804/cleanup.sh +++ b/scripts/ubuntu1804/cleanup.sh @@ -1,10 +1,10 @@ #!/bin/bash error() { - if [ $? -ne 0 ]; then - printf "\n\napt failed...\n\n"; - exit 1 - fi + if [ $? -ne 0 ]; then + printf "\n\napt failed...\n\n"; + exit 1 + fi } # To allow for autmated installs, we disable interactive configuration steps. diff --git a/scripts/ubuntu1804/magma.sh b/scripts/ubuntu1804/magma.sh index 7a2dece31..b3d9bf920 100644 --- a/scripts/ubuntu1804/magma.sh +++ b/scripts/ubuntu1804/magma.sh @@ -1,23 +1,49 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The packages needed to compile magma. -apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr6 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config +retry apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr6 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config # Need to retrieve the source code. -apt-get --assume-yes install git git-man liberror-perl rsync wget +retry apt-get --assume-yes install git git-man liberror-perl rsync wget # Needed to run the watcher and status scripts. -apt-get --assume-yes install sysstat inotify-tools +retry apt-get --assume-yes install sysstat inotify-tools # Needed to run the stacie script. -apt-get --assume-yes install python-crypto python-cryptography +retry apt-get --assume-yes install python-crypto python-cryptography # Make sure the MySQLs server is available. -apt-get --assume-yes install mysql-server +retry apt-get --assume-yes install mysql-server # Force MySQL/MariaDB except the old fashioned '0000-00-00' date format. if [ -d /etc/mysql/mysql.conf.d/ ]; then @@ -33,7 +59,7 @@ mysql --execute="CREATE USER mytool@localhost IDENTIFIED BY 'aComplex1'" mysql --execute="GRANT ALL ON *.* TO mytool@localhost" # The postfix server for message relays. -apt-get --assume-yes install postfix +retry apt-get --assume-yes install postfix # Configure the postfix hostname and origin parameters. printf "\ninet_interfaces = localhost\n" >> /etc/postfix/main.cf @@ -76,6 +102,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -127,7 +160,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/ubuntu1804/memcached.sh b/scripts/ubuntu1804/memcached.sh index c08cdbdef..b0b281a83 100644 --- a/scripts/ubuntu1804/memcached.sh +++ b/scripts/ubuntu1804/memcached.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The memcached server. -apt-get --assume-yes install memcached libevent-dev +retry apt-get --assume-yes install memcached libevent-dev # Setup memcached to start automatically. systemctl start memcached.service && systemctl enable memcached.service diff --git a/scripts/ubuntu1804/mysql.sh b/scripts/ubuntu1804/mysql.sh index 5ef119290..1d12c3ba6 100644 --- a/scripts/ubuntu1804/mysql.sh +++ b/scripts/ubuntu1804/mysql.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The mysql client and related utilities. -apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl +retry apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl # Enable mysql and configure it to automatically start. systemctl start mysql.service && systemctl enable mysql.service diff --git a/scripts/ubuntu1804/network.sh b/scripts/ubuntu1804/network.sh index a9736b633..358638221 100644 --- a/scripts/ubuntu1804/network.sh +++ b/scripts/ubuntu1804/network.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Disable IPv6 for the current boot. sysctl net.ipv6.conf.all.disable_ipv6=1 @@ -40,7 +66,7 @@ sed -i -e "s/#Cache=.*/Cache=yes/g" /etc/systemd/resolved.conf sed -i -e "s/#DNSStubListener=.*/DNSStubListener=yes/g" /etc/systemd/resolved.conf # Install ifplugd so we can monitor and auto-configure nics. -apt-get --assume-yes install ifplugd +retry apt-get --assume-yes install ifplugd # Configure ifplugd to monitor the eth0 interface. sed -i -e 's/INTERFACES=.*/INTERFACES="eth0"/g' /etc/default/ifplugd diff --git a/scripts/ubuntu1804/parallels.sh b/scripts/ubuntu1804/parallels.sh index 0e6b33dc8..244d5d0e1 100644 --- a/scripts/ubuntu1804/parallels.sh +++ b/scripts/ubuntu1804/parallels.sh @@ -1,9 +1,35 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install dmidecode +retry apt-get --assume-yes install dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/ubuntu1804/postfix.sh b/scripts/ubuntu1804/postfix.sh index a75a8b6d1..7465e77bb 100644 --- a/scripts/ubuntu1804/postfix.sh +++ b/scripts/ubuntu1804/postfix.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The postfix server for message relays. -apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert +retry apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert # Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf diff --git a/scripts/ubuntu1804/qemu.sh b/scripts/ubuntu1804/qemu.sh index 23eef3717..a85127758 100644 --- a/scripts/ubuntu1804/qemu.sh +++ b/scripts/ubuntu1804/qemu.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -20,13 +46,13 @@ printf "Installing the QEMU Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install qemu-guest-agent; error +retry apt-get --assume-yes install qemu-guest-agent; error # For some reason the VMWare tools are installed on QEMU guest images. systemctl disable open-vm-tools.service # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1804/virtualbox.sh b/scripts/ubuntu1804/virtualbox.sh index dd87d891c..a11537182 100644 --- a/scripts/ubuntu1804/virtualbox.sh +++ b/scripts/ubuntu1804/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -19,7 +45,7 @@ printf "Installing the Virtual Box Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install virtualbox-guest-utils; error +retry apt-get --assume-yes install virtualbox-guest-utils; error # Read in the version number. export VBOXVERSION=`cat /root/VBoxVersion.txt` @@ -45,7 +71,7 @@ rm -rf /root/VBoxVersion.txt; error rm -rf /root/VBoxGuestAdditions.iso; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1804/vmware.sh b/scripts/ubuntu1804/vmware.sh index c94e04bf5..51c572155 100644 --- a/scripts/ubuntu1804/vmware.sh +++ b/scripts/ubuntu1804/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -20,7 +46,7 @@ printf "Installing the VMWare Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree +retry apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree systemctl enable open-vm-tools.service systemctl start open-vm-tools.service @@ -37,7 +63,7 @@ rm -rf /root/linux.iso; error #rm -rf /tmp/vmware-tools-distrib; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1810/apt.sh b/scripts/ubuntu1810/apt.sh index bc9fafc53..3a31fb1f6 100644 --- a/scripts/ubuntu1810/apt.sh +++ b/scripts/ubuntu1810/apt.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\napt failed...\n\n"; @@ -35,17 +61,17 @@ systemctl stop apt-daily.service apt-daily.timer systemctl stop snapd.service snapd.socket snapd.refresh.timer # Update the package database. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error # Ensure the linux-tools and linux-cloud-tools get updated with the kernel. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic # Upgrade the installed packages. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error # Needed to retrieve source code, and other misc system tools. -apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc; error +retry apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc; error # Enable the sysstat collection service. sed -i -e "s|.*ENABLED=\".*\"|ENABLED=\"true\"|g" /etc/default/sysstat diff --git a/scripts/ubuntu1810/cleanup.sh b/scripts/ubuntu1810/cleanup.sh index 530efe178..d19adcff5 100644 --- a/scripts/ubuntu1810/cleanup.sh +++ b/scripts/ubuntu1810/cleanup.sh @@ -1,10 +1,10 @@ #!/bin/bash error() { - if [ $? -ne 0 ]; then - printf "\n\napt failed...\n\n"; - exit 1 - fi + if [ $? -ne 0 ]; then + printf "\n\napt failed...\n\n"; + exit 1 + fi } # To allow for autmated installs, we disable interactive configuration steps. diff --git a/scripts/ubuntu1810/magma.sh b/scripts/ubuntu1810/magma.sh index 7a2dece31..e2b5d26bc 100644 --- a/scripts/ubuntu1810/magma.sh +++ b/scripts/ubuntu1810/magma.sh @@ -1,23 +1,49 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The packages needed to compile magma. -apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr6 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config +retry apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr6 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config # Need to retrieve the source code. -apt-get --assume-yes install git git-man liberror-perl rsync wget +retry apt-get --assume-yes install git git-man liberror-perl rsync wget # Needed to run the watcher and status scripts. -apt-get --assume-yes install sysstat inotify-tools +retry apt-get --assume-yes install sysstat inotify-tools # Needed to run the stacie script. apt-get --assume-yes install python-crypto python-cryptography # Make sure the MySQLs server is available. -apt-get --assume-yes install mysql-server +retry apt-get --assume-yes install mysql-server # Force MySQL/MariaDB except the old fashioned '0000-00-00' date format. if [ -d /etc/mysql/mysql.conf.d/ ]; then @@ -33,7 +59,7 @@ mysql --execute="CREATE USER mytool@localhost IDENTIFIED BY 'aComplex1'" mysql --execute="GRANT ALL ON *.* TO mytool@localhost" # The postfix server for message relays. -apt-get --assume-yes install postfix +retry apt-get --assume-yes install postfix # Configure the postfix hostname and origin parameters. printf "\ninet_interfaces = localhost\n" >> /etc/postfix/main.cf @@ -76,6 +102,13 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -127,7 +160,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/ubuntu1810/memcached.sh b/scripts/ubuntu1810/memcached.sh index c08cdbdef..b0b281a83 100644 --- a/scripts/ubuntu1810/memcached.sh +++ b/scripts/ubuntu1810/memcached.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The memcached server. -apt-get --assume-yes install memcached libevent-dev +retry apt-get --assume-yes install memcached libevent-dev # Setup memcached to start automatically. systemctl start memcached.service && systemctl enable memcached.service diff --git a/scripts/ubuntu1810/mysql.sh b/scripts/ubuntu1810/mysql.sh index 5ef119290..1d12c3ba6 100644 --- a/scripts/ubuntu1810/mysql.sh +++ b/scripts/ubuntu1810/mysql.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The mysql client and related utilities. -apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl +retry apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl # Enable mysql and configure it to automatically start. systemctl start mysql.service && systemctl enable mysql.service diff --git a/scripts/ubuntu1810/network.sh b/scripts/ubuntu1810/network.sh index c93d83120..3af70fe3c 100644 --- a/scripts/ubuntu1810/network.sh +++ b/scripts/ubuntu1810/network.sh @@ -1,5 +1,31 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Disable IPv6 for the current boot. sysctl net.ipv6.conf.all.disable_ipv6=1 @@ -40,7 +66,7 @@ sed -i -e "s/#Cache=.*/Cache=yes/g" /etc/systemd/resolved.conf sed -i -e "s/#DNSStubListener=.*/DNSStubListener=yes/g" /etc/systemd/resolved.conf # Install ifplugd so we can monitor and auto-configure nics. -apt-get --assume-yes install ifplugd +retry apt-get --assume-yes install ifplugd # Configure ifplugd to monitor the eth0 interface. sed -i -e 's/INTERFACES=.*/INTERFACES="eth0"/g' /etc/default/ifplugd diff --git a/scripts/ubuntu1810/parallels.sh b/scripts/ubuntu1810/parallels.sh index 0e6b33dc8..244d5d0e1 100644 --- a/scripts/ubuntu1810/parallels.sh +++ b/scripts/ubuntu1810/parallels.sh @@ -1,9 +1,35 @@ #!/bin/bash -ux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # Needed to check whether we're running atop Parallels. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install dmidecode +retry apt-get --assume-yes install dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/ubuntu1810/postfix.sh b/scripts/ubuntu1810/postfix.sh index a75a8b6d1..7465e77bb 100644 --- a/scripts/ubuntu1810/postfix.sh +++ b/scripts/ubuntu1810/postfix.sh @@ -1,11 +1,37 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The postfix server for message relays. -apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert +retry apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert # Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf diff --git a/scripts/ubuntu1810/qemu.sh b/scripts/ubuntu1810/qemu.sh index 23eef3717..a85127758 100644 --- a/scripts/ubuntu1810/qemu.sh +++ b/scripts/ubuntu1810/qemu.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nqemu addons failed to install...\n\n"; @@ -20,13 +46,13 @@ printf "Installing the QEMU Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install qemu-guest-agent; error +retry apt-get --assume-yes install qemu-guest-agent; error # For some reason the VMWare tools are installed on QEMU guest images. systemctl disable open-vm-tools.service # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1810/virtualbox.sh b/scripts/ubuntu1810/virtualbox.sh index dd87d891c..a11537182 100644 --- a/scripts/ubuntu1810/virtualbox.sh +++ b/scripts/ubuntu1810/virtualbox.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nThe VirtualBox install failed...\n\n" @@ -19,7 +45,7 @@ printf "Installing the Virtual Box Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install virtualbox-guest-utils; error +retry apt-get --assume-yes install virtualbox-guest-utils; error # Read in the version number. export VBOXVERSION=`cat /root/VBoxVersion.txt` @@ -45,7 +71,7 @@ rm -rf /root/VBoxVersion.txt; error rm -rf /root/VBoxGuestAdditions.iso; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1810/vmware.sh b/scripts/ubuntu1810/vmware.sh index c94e04bf5..51c572155 100644 --- a/scripts/ubuntu1810/vmware.sh +++ b/scripts/ubuntu1810/vmware.sh @@ -1,5 +1,31 @@ #!/bin/bash +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + error() { if [ $? -ne 0 ]; then printf "\n\nvmware install failed...\n\n"; @@ -20,7 +46,7 @@ printf "Installing the VMWare Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree +retry apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree systemctl enable open-vm-tools.service systemctl start open-vm-tools.service @@ -37,7 +63,7 @@ rm -rf /root/linux.iso; error #rm -rf /tmp/vmware-tools-distrib; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1904/apt.sh b/scripts/ubuntu1904/apt.sh index bc9fafc53..cda38bceb 100644 --- a/scripts/ubuntu1904/apt.sh +++ b/scripts/ubuntu1904/apt.sh @@ -1,4 +1,35 @@ -#!/bin/bash +#!/bin/bash -ex + +# If the TERM environment variable is missing, then tput may produce spurrious error messages. +if [[ ! -n "$TERM" ]] || [[ "$TERM" -eq "dumb" ]]; then + export TERM="vt100" +fi + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} error() { if [ $? -ne 0 ]; then @@ -32,20 +63,20 @@ printf "APT::Periodic::Enable \"0\";\n" >> /etc/apt/apt.conf.d/20retries fi # Keep the daily apt updater from deadlocking our installs. systemctl stop apt-daily.service apt-daily.timer -systemctl stop snapd.service snapd.socket snapd.refresh.timer +systemctl stop snapd.service snapd.socket # Update the package database. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" update; error # Ensure the linux-tools and linux-cloud-tools get updated with the kernel. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic +# retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" install linux-tools-generic linux-cloud-tools-generic # Upgrade the installed packages. -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error -apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" upgrade; error +retry apt-get --assume-yes -o Dpkg::Options::="--force-confnew" dist-upgrade; error # Needed to retrieve source code, and other misc system tools. -apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc; error +retry apt-get --assume-yes install vim vim-nox gawk git git-man liberror-perl wget curl rsync gnupg mlocate sysstat lsof pciutils usbutils lsb-release psmisc; error # Enable the sysstat collection service. sed -i -e "s|.*ENABLED=\".*\"|ENABLED=\"true\"|g" /etc/default/sysstat diff --git a/scripts/ubuntu1904/cleanup.sh b/scripts/ubuntu1904/cleanup.sh index 530efe178..d19adcff5 100644 --- a/scripts/ubuntu1904/cleanup.sh +++ b/scripts/ubuntu1904/cleanup.sh @@ -1,10 +1,10 @@ #!/bin/bash error() { - if [ $? -ne 0 ]; then - printf "\n\napt failed...\n\n"; - exit 1 - fi + if [ $? -ne 0 ]; then + printf "\n\napt failed...\n\n"; + exit 1 + fi } # To allow for autmated installs, we disable interactive configuration steps. diff --git a/scripts/ubuntu1904/magma.sh b/scripts/ubuntu1904/magma.sh index 7a2dece31..ce1465ce1 100644 --- a/scripts/ubuntu1904/magma.sh +++ b/scripts/ubuntu1904/magma.sh @@ -1,23 +1,49 @@ #!/bin/bash -eux +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\n${*} failed... retrying ${COUNT} of 10.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\\nThe command failed 10 times.\\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} + # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The packages needed to compile magma. -apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr6 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config +retry apt-get --assume-yes install gcc g++ gcc-multilib make autoconf automake libtool flex bison gdb valgrind valgrind-dbg libpython2.7 libc6-dev libc++-dev libncurses5-dev libmpfr6 libmpfr-dev patch make cmake libarchive13 libbsd-dev libsubunit-dev libsubunit0 pkg-config # Need to retrieve the source code. -apt-get --assume-yes install git git-man liberror-perl rsync wget +retry apt-get --assume-yes install git git-man liberror-perl rsync wget # Needed to run the watcher and status scripts. -apt-get --assume-yes install sysstat inotify-tools +retry apt-get --assume-yes install sysstat inotify-tools # Needed to run the stacie script. -apt-get --assume-yes install python-crypto python-cryptography +retry apt-get --assume-yes install python-crypto python-cryptography # Make sure the MySQLs server is available. -apt-get --assume-yes install mysql-server +retry apt-get --assume-yes install mysql-server # Force MySQL/MariaDB except the old fashioned '0000-00-00' date format. if [ -d /etc/mysql/mysql.conf.d/ ]; then @@ -33,7 +59,7 @@ mysql --execute="CREATE USER mytool@localhost IDENTIFIED BY 'aComplex1'" mysql --execute="GRANT ALL ON *.* TO mytool@localhost" # The postfix server for message relays. -apt-get --assume-yes install postfix +retry apt-get --assume-yes install postfix # Configure the postfix hostname and origin parameters. printf "\ninet_interfaces = localhost\n" >> /etc/postfix/main.cf @@ -76,6 +102,20 @@ if [ -x /usr/bin/id ]; then fi fi +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + +# If the TERM environment variable is missing, then tput may trigger a fatal error. +if [[ -n "$TERM" ]] && [[ "$TERM" -ne "dumb" ]]; then + export TPUT="tput" +else + export TPUT="tput -Tvt100" +fi + # We need to give the box 30 seconds to get the networking setup or # the git clone operation will fail. sleep 30 @@ -127,7 +167,7 @@ dev/scripts/launch/check.run.sh # If the unit tests fail, print an error, but contine running. if [ \$? -ne 0 ]; then - tput setaf 1; tput bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; tput sgr0; + \${TPUT} setaf 1; \${TPUT} bold; printf "\n\nsome of the magma daemon unit tests failed...\n\n"; \${TPUT} sgr0; for i in 1 2 3; do printf "\a"; sleep 1 done diff --git a/scripts/ubuntu1904/memcached.sh b/scripts/ubuntu1904/memcached.sh index c08cdbdef..f4291a363 100644 --- a/scripts/ubuntu1904/memcached.sh +++ b/scripts/ubuntu1904/memcached.sh @@ -1,11 +1,42 @@ -#!/bin/bash -eux +#!/bin/bash -ex + +# If the TERM environment variable is missing, then tput may produce spurrious error messages. +if [[ ! -n "$TERM" ]] || [[ "$TERM" -eq "dumb" ]]; then + export TERM="vt100" +fi + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The memcached server. -apt-get --assume-yes install memcached libevent-dev +retry apt-get --assume-yes install memcached libevent-dev # Setup memcached to start automatically. systemctl start memcached.service && systemctl enable memcached.service diff --git a/scripts/ubuntu1904/mysql.sh b/scripts/ubuntu1904/mysql.sh index 5ef119290..7aa662542 100644 --- a/scripts/ubuntu1904/mysql.sh +++ b/scripts/ubuntu1904/mysql.sh @@ -1,11 +1,42 @@ -#!/bin/bash -eux +#!/bin/bash -ex + +# If the TERM environment variable is missing, then tput may produce spurrious error messages. +if [[ ! -n "$TERM" ]] || [[ "$TERM" -eq "dumb" ]]; then + export TERM="vt100" +fi + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The mysql client and related utilities. -apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl +retry apt-get --assume-yes install mysql-client mysql-server perl libdbi-perl libmysqlclient20 mysql-common libdbd-mysql-perl # Enable mysql and configure it to automatically start. systemctl start mysql.service && systemctl enable mysql.service diff --git a/scripts/ubuntu1904/network.sh b/scripts/ubuntu1904/network.sh index e17eb2d8b..79fc96057 100644 --- a/scripts/ubuntu1904/network.sh +++ b/scripts/ubuntu1904/network.sh @@ -1,4 +1,35 @@ -#!/bin/bash -eux +#!/bin/bash -ex + +# If the TERM environment variable is missing, then tput may produce spurrious error messages. +if [[ ! -n "$TERM" ]] || [[ "$TERM" -eq "dumb" ]]; then + export TERM="vt100" +fi + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} # Disable IPv6 for the current boot. sysctl net.ipv6.conf.all.disable_ipv6=1 @@ -40,7 +71,7 @@ sed -i -e "s/#Cache=.*/Cache=yes/g" /etc/systemd/resolved.conf sed -i -e "s/#DNSStubListener=.*/DNSStubListener=yes/g" /etc/systemd/resolved.conf # Install ifplugd so we can monitor and auto-configure nics. -apt-get --assume-yes install ifplugd +retry apt-get --assume-yes install ifplugd # Configure ifplugd to monitor the eth0 interface. sed -i -e 's/INTERFACES=.*/INTERFACES="eth0"/g' /etc/default/ifplugd diff --git a/scripts/ubuntu1904/parallels.sh b/scripts/ubuntu1904/parallels.sh index 0e6b33dc8..24a10adcf 100644 --- a/scripts/ubuntu1904/parallels.sh +++ b/scripts/ubuntu1904/parallels.sh @@ -1,9 +1,40 @@ -#!/bin/bash -ux +#!/bin/bash -ex + +# If the TERM environment variable is missing, then tput may produce spurrious error messages. +if [[ ! -n "$TERM" ]] || [[ "$TERM" -eq "dumb" ]]; then + export TERM="vt100" +fi + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} # Needed to check whether we're running atop Parallels. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install dmidecode +retry apt-get --assume-yes install dmidecode # Bail if we are not running atop Parallels. if [[ `dmidecode -s system-product-name` != "Parallels Virtual Platform" ]]; then diff --git a/scripts/ubuntu1904/postfix.sh b/scripts/ubuntu1904/postfix.sh index a75a8b6d1..15fd195fd 100644 --- a/scripts/ubuntu1904/postfix.sh +++ b/scripts/ubuntu1904/postfix.sh @@ -1,11 +1,42 @@ -#!/bin/bash -eux +#!/bin/bash -ex + +# If the TERM environment variable is missing, then tput may produce spurrious error messages. +if [[ ! -n "$TERM" ]] || [[ "$TERM" -eq "dumb" ]]; then + export TERM="vt100" +fi + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} # To allow for autmated installs, we disable interactive configuration steps. export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true # The postfix server for message relays. -apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert +retry apt-get --assume-yes install postfix postfix-cdb libcdb1 ssl-cert # Configure postfix to listen for relays on port 2525 so it doesn't conflict with magma. sed -i -e "s/^smtp\([ ]*inet\)/127.0.0.1:2525\1/" /etc/postfix/master.cf diff --git a/scripts/ubuntu1904/qemu.sh b/scripts/ubuntu1904/qemu.sh index 23eef3717..a636fc845 100644 --- a/scripts/ubuntu1904/qemu.sh +++ b/scripts/ubuntu1904/qemu.sh @@ -1,4 +1,35 @@ -#!/bin/bash +#!/bin/bash -ex + +# If the TERM environment variable is missing, then tput may produce spurrious error messages. +if [[ ! -n "$TERM" ]] || [[ "$TERM" -eq "dumb" ]]; then + export TERM="vt100" +fi + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} error() { if [ $? -ne 0 ]; then @@ -20,13 +51,13 @@ printf "Installing the QEMU Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install qemu-guest-agent; error +retry apt-get --assume-yes install qemu-guest-agent; error # For some reason the VMWare tools are installed on QEMU guest images. systemctl disable open-vm-tools.service # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1904/vagrant.sh b/scripts/ubuntu1904/vagrant.sh index 564139d60..9ca5edf87 100644 --- a/scripts/ubuntu1904/vagrant.sh +++ b/scripts/ubuntu1904/vagrant.sh @@ -1,4 +1,4 @@ -#!/bin/bash -ux +#!/bin/bash -x # Create the vagrant user account. /usr/sbin/useradd vagrant diff --git a/scripts/ubuntu1904/virtualbox.sh b/scripts/ubuntu1904/virtualbox.sh index dd87d891c..a63b4892d 100644 --- a/scripts/ubuntu1904/virtualbox.sh +++ b/scripts/ubuntu1904/virtualbox.sh @@ -1,4 +1,35 @@ -#!/bin/bash +#!/bin/bash -ex + +# If the TERM environment variable is missing, then tput may produce spurrious error messages. +if [[ ! -n "$TERM" ]] || [[ "$TERM" -eq "dumb" ]]; then + export TERM="vt100" +fi + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} error() { if [ $? -ne 0 ]; then @@ -19,7 +50,7 @@ printf "Installing the Virtual Box Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install virtualbox-guest-utils; error +retry apt-get --assume-yes install virtualbox-guest-utils; error # Read in the version number. export VBOXVERSION=`cat /root/VBoxVersion.txt` @@ -45,7 +76,7 @@ rm -rf /root/VBoxVersion.txt; error rm -rf /root/VBoxGuestAdditions.iso; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/scripts/ubuntu1904/vmware.sh b/scripts/ubuntu1904/vmware.sh index c94e04bf5..179d0823b 100644 --- a/scripts/ubuntu1904/vmware.sh +++ b/scripts/ubuntu1904/vmware.sh @@ -1,4 +1,35 @@ -#!/bin/bash +#!/bin/bash -ex + +# If the TERM environment variable is missing, then tput may produce spurrious error messages. +if [[ ! -n "$TERM" ]] || [[ "$TERM" -eq "dumb" ]]; then + export TERM="vt100" +fi + +retry() { + local COUNT=1 + local RESULT=0 + while [[ "${COUNT}" -le 10 ]]; do + [[ "${RESULT}" -ne 0 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\n${*} failed... retrying ${COUNT} of 10.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + "${@}" && { RESULT=0 && break; } || RESULT="${?}" + COUNT="$((COUNT + 1))" + + # Increase the delay with each iteration. + DELAY="$((DELAY + 10))" + sleep $DELAY + done + + [[ "${COUNT}" -gt 10 ]] && { + [ "`which tput 2> /dev/null`" != "" ] && tput setaf 1 + echo -e "\nThe command failed 10 times.\n" >&2 + [ "`which tput 2> /dev/null`" != "" ] && tput sgr0 + } + + return "${RESULT}" +} error() { if [ $? -ne 0 ]; then @@ -20,7 +51,7 @@ printf "Installing the VMWare Tools.\n" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true -apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree +retry apt-get --assume-yes install open-vm-tools ethtool libdumbnet1 zerofree systemctl enable open-vm-tools.service systemctl start open-vm-tools.service @@ -37,7 +68,7 @@ rm -rf /root/linux.iso; error #rm -rf /tmp/vmware-tools-distrib; error # Boosts the available entropy which allows magma to start faster. -apt-get --assume-yes install haveged; error +retry apt-get --assume-yes install haveged; error # Autostart the haveged daemon. systemctl enable haveged.service diff --git a/tpl/developer.rb b/tpl/developer.rb index 22d9ad407..eb58aa955 100644 --- a/tpl/developer.rb +++ b/tpl/developer.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "lavabit/magma" config.vm.hostname = "magma.local" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -13,7 +14,9 @@ config.ssh.password = "magma" # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" config.vm.usable_port_range = 20000..30000 diff --git a/tpl/generic-alpine.rb b/tpl/generic-alpine310.rb similarity index 92% rename from tpl/generic-alpine.rb rename to tpl/generic-alpine310.rb index 99c961152..56d709863 100644 --- a/tpl/generic-alpine.rb +++ b/tpl/generic-alpine310.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -29,7 +32,7 @@ v.memory = 2048 v.driver = "kvm" v.video_vram = 256 - config.vm.guest = :alt + override.vm.guest = :alt v.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio' end @@ -51,6 +54,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.functional_hgfs = false v.gui = false diff --git a/tpl/generic-alpine35.rb b/tpl/generic-alpine35.rb index 99c961152..6c1550b72 100644 --- a/tpl/generic-alpine35.rb +++ b/tpl/generic-alpine35.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -29,7 +32,7 @@ v.memory = 2048 v.driver = "kvm" v.video_vram = 256 - config.vm.guest = :alt + override.vm.guest = :alt v.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio' end diff --git a/tpl/generic-alpine36.rb b/tpl/generic-alpine36.rb index 99c961152..6c1550b72 100644 --- a/tpl/generic-alpine36.rb +++ b/tpl/generic-alpine36.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -29,7 +32,7 @@ v.memory = 2048 v.driver = "kvm" v.video_vram = 256 - config.vm.guest = :alt + override.vm.guest = :alt v.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio' end diff --git a/tpl/generic-alpine37.rb b/tpl/generic-alpine37.rb index 99c961152..6c1550b72 100644 --- a/tpl/generic-alpine37.rb +++ b/tpl/generic-alpine37.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -29,7 +32,7 @@ v.memory = 2048 v.driver = "kvm" v.video_vram = 256 - config.vm.guest = :alt + override.vm.guest = :alt v.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio' end diff --git a/tpl/generic-alpine38.rb b/tpl/generic-alpine38.rb index 99c961152..6c1550b72 100644 --- a/tpl/generic-alpine38.rb +++ b/tpl/generic-alpine38.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -29,7 +32,7 @@ v.memory = 2048 v.driver = "kvm" v.video_vram = 256 - config.vm.guest = :alt + override.vm.guest = :alt v.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio' end diff --git a/tpl/generic-alpine39.rb b/tpl/generic-alpine39.rb index 99c961152..56d709863 100644 --- a/tpl/generic-alpine39.rb +++ b/tpl/generic-alpine39.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -29,7 +32,7 @@ v.memory = 2048 v.driver = "kvm" v.video_vram = 256 - config.vm.guest = :alt + override.vm.guest = :alt v.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio' end @@ -51,6 +54,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.functional_hgfs = false v.gui = false diff --git a/tpl/generic-arch.rb b/tpl/generic-arch.rb index b9b14864e..87de50822 100644 --- a/tpl/generic-arch.rb +++ b/tpl/generic-arch.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -48,6 +51,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" diff --git a/tpl/generic-centos6.rb b/tpl/generic-centos6.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-centos6.rb +++ b/tpl/generic-centos6.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-centos7.rb b/tpl/generic-centos7.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-centos7.rb +++ b/tpl/generic-centos7.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-debian10.rb b/tpl/generic-debian10.rb index b9b14864e..87de50822 100644 --- a/tpl/generic-debian10.rb +++ b/tpl/generic-debian10.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -48,6 +51,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" diff --git a/tpl/generic-debian8.rb b/tpl/generic-debian8.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-debian8.rb +++ b/tpl/generic-debian8.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-debian9.rb b/tpl/generic-debian9.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-debian9.rb +++ b/tpl/generic-debian9.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-default.rb b/tpl/generic-default.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-default.rb +++ b/tpl/generic-default.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-dragonflybsd5.rb b/tpl/generic-dragonflybsd5.rb index 5e066addc..e606e6e88 100644 --- a/tpl/generic-dragonflybsd5.rb +++ b/tpl/generic-dragonflybsd5.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-fedora25.rb b/tpl/generic-fedora25.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-fedora25.rb +++ b/tpl/generic-fedora25.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-fedora26.rb b/tpl/generic-fedora26.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-fedora26.rb +++ b/tpl/generic-fedora26.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-fedora27.rb b/tpl/generic-fedora27.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-fedora27.rb +++ b/tpl/generic-fedora27.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-fedora28.rb b/tpl/generic-fedora28.rb index b9b14864e..87de50822 100644 --- a/tpl/generic-fedora28.rb +++ b/tpl/generic-fedora28.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -48,6 +51,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" diff --git a/tpl/generic-fedora29.rb b/tpl/generic-fedora29.rb index b9b14864e..87de50822 100644 --- a/tpl/generic-fedora29.rb +++ b/tpl/generic-fedora29.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -48,6 +51,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" diff --git a/tpl/generic-fedora30.rb b/tpl/generic-fedora30.rb new file mode 100644 index 000000000..87de50822 --- /dev/null +++ b/tpl/generic-fedora30.rb @@ -0,0 +1,63 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure(2) do |config| + + config.vm.boot_timeout = 1800 + # config.vm.box = "generic/bazinga" + # config.vm.hostname = "bazinga.box" + config.vm.synced_folder ".", "/vagrant", disabled: true + + config.vm.box_check_update = true + + # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 + # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 + # config.vm.box_download_checksum_type = "sha256" + + # config.vm.provision "shell", run: "always", inline: <<-SHELL + # SHELL + + # Adding a second CPU and increasing the RAM to 2048MB will speed + # things up considerably should you decide to do anythinc with this box. + config.vm.provider :hyperv do |v, override| + v.maxmemory = 2048 + v.memory = 2048 + v.cpus = 2 + end + + config.vm.provider :libvirt do |v, override| + v.disk_bus = "scsi" + v.driver = "kvm" + v.video_vram = 256 + v.memory = 2048 + v.cpus = 2 + end + + config.vm.provider :parallels do |v, override| + v.customize ["set", :id, "--on-window-close", "keep-running"] + v.customize ["set", :id, "--startup-view", "headless"] + v.customize ["set", :id, "--memsize", "2048"] + v.customize ["set", :id, "--cpus", "2"] + end + + config.vm.provider :virtualbox do |v, override| + v.customize ["modifyvm", :id, "--memory", 2048] + v.customize ["modifyvm", :id, "--vram", 256] + v.customize ["modifyvm", :id, "--cpus", 2] + v.gui = false + end + + ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| + config.vm.provider provider do |v, override| + v.ssh_info_public = true + v.whitelist_verified = true + v.gui = false + v.vmx["cpuid.coresPerSocket"] = "1" + v.vmx["memsize"] = "2048" + v.vmx["numvcpus"] = "2" + end + end + +end diff --git a/tpl/generic-freebsd11.rb b/tpl/generic-freebsd11.rb index 5e066addc..e606e6e88 100644 --- a/tpl/generic-freebsd11.rb +++ b/tpl/generic-freebsd11.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-freebsd12.rb b/tpl/generic-freebsd12.rb index 5e066addc..bce2b3e01 100644 --- a/tpl/generic-freebsd12.rb +++ b/tpl/generic-freebsd12.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -50,6 +53,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.functional_hgfs = false v.gui = false diff --git a/tpl/generic-gentoo.rb b/tpl/generic-gentoo.rb index 1d8d6da8f..3176b3c38 100644 --- a/tpl/generic-gentoo.rb +++ b/tpl/generic-gentoo.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-hardenedbsd11.rb b/tpl/generic-hardenedbsd11.rb index 5e066addc..eb357775a 100644 --- a/tpl/generic-hardenedbsd11.rb +++ b/tpl/generic-hardenedbsd11.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -25,6 +28,7 @@ end config.vm.provider :libvirt do |v, override| + v.nic_model_type = "e1000" v.disk_bus = "scsi" v.driver = "kvm" v.video_vram = 256 diff --git a/tpl/generic-hardenedbsd12.rb b/tpl/generic-hardenedbsd12.rb index 5e066addc..bce2b3e01 100644 --- a/tpl/generic-hardenedbsd12.rb +++ b/tpl/generic-hardenedbsd12.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -50,6 +53,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.functional_hgfs = false v.gui = false diff --git a/tpl/generic-netbsd8.rb b/tpl/generic-netbsd8.rb index 5e066addc..e606e6e88 100644 --- a/tpl/generic-netbsd8.rb +++ b/tpl/generic-netbsd8.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-openbsd6.rb b/tpl/generic-openbsd6.rb index 5e066addc..bce2b3e01 100644 --- a/tpl/generic-openbsd6.rb +++ b/tpl/generic-openbsd6.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -50,6 +53,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.functional_hgfs = false v.gui = false diff --git a/tpl/generic-bsd.rb b/tpl/generic-opensuse15.rb similarity index 94% rename from tpl/generic-bsd.rb rename to tpl/generic-opensuse15.rb index 5e066addc..88fe55bc9 100644 --- a/tpl/generic-bsd.rb +++ b/tpl/generic-opensuse15.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -40,18 +43,15 @@ end config.vm.provider :virtualbox do |v, override| - v.gui = false - v.functional_vboxsf = false - v.check_guest_additions = false + v.customize ["modifyvm", :id, "--memory", 2048] v.customize ["modifyvm", :id, "--vram", 256] v.customize ["modifyvm", :id, "--cpus", 2] - v.customize ["modifyvm", :id, "--memory", 2048] + v.gui = false end ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| v.whitelist_verified = true - v.functional_hgfs = false v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" v.vmx["memsize"] = "2048" diff --git a/tpl/generic-opensuse42.rb b/tpl/generic-opensuse42.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-opensuse42.rb +++ b/tpl/generic-opensuse42.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-oracle7.rb b/tpl/generic-oracle7.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-oracle7.rb +++ b/tpl/generic-oracle7.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-oracle8.rb b/tpl/generic-oracle8.rb new file mode 100644 index 000000000..768c3fe20 --- /dev/null +++ b/tpl/generic-oracle8.rb @@ -0,0 +1,62 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure(2) do |config| + + config.vm.boot_timeout = 1800 + # config.vm.box = "generic/bazinga" + # config.vm.hostname = "bazinga.box" + config.vm.synced_folder ".", "/vagrant", disabled: true + + config.vm.box_check_update = true + + # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 + # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 + # config.vm.box_download_checksum_type = "sha256" + + # config.vm.provision "shell", run: "always", inline: <<-SHELL + # SHELL + + # Adding a second CPU and increasing the RAM to 2048MB will speed + # things up considerably should you decide to do anythinc with this box. + config.vm.provider :hyperv do |v, override| + v.maxmemory = 2048 + v.memory = 2048 + v.cpus = 2 + end + + config.vm.provider :libvirt do |v, override| + v.disk_bus = "virtio" + v.driver = "kvm" + v.video_vram = 256 + v.memory = 2048 + v.cpus = 2 + end + + config.vm.provider :parallels do |v, override| + v.customize ["set", :id, "--on-window-close", "keep-running"] + v.customize ["set", :id, "--startup-view", "headless"] + v.customize ["set", :id, "--memsize", "2048"] + v.customize ["set", :id, "--cpus", "2"] + end + + config.vm.provider :virtualbox do |v, override| + v.customize ["modifyvm", :id, "--memory", 2048] + v.customize ["modifyvm", :id, "--vram", 256] + v.customize ["modifyvm", :id, "--cpus", 2] + v.gui = false + end + + ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| + config.vm.provider provider do |v, override| + v.whitelist_verified = true + v.gui = false + v.vmx["cpuid.coresPerSocket"] = "1" + v.vmx["memsize"] = "2048" + v.vmx["numvcpus"] = "2" + end + end + +end diff --git a/tpl/generic-rhel6.rb b/tpl/generic-rhel6.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-rhel6.rb +++ b/tpl/generic-rhel6.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-rhel7.rb b/tpl/generic-rhel7.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-rhel7.rb +++ b/tpl/generic-rhel7.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-rhel8.rb b/tpl/generic-rhel8.rb index d5a8db5a3..592fa3596 100644 --- a/tpl/generic-rhel8.rb +++ b/tpl/generic-rhel8.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -48,6 +51,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" diff --git a/tpl/generic-ubuntu1604.rb b/tpl/generic-ubuntu1604.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-ubuntu1604.rb +++ b/tpl/generic-ubuntu1604.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-ubuntu1610.rb b/tpl/generic-ubuntu1610.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-ubuntu1610.rb +++ b/tpl/generic-ubuntu1610.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-ubuntu1704.rb b/tpl/generic-ubuntu1704.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-ubuntu1704.rb +++ b/tpl/generic-ubuntu1704.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-ubuntu1710.rb b/tpl/generic-ubuntu1710.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-ubuntu1710.rb +++ b/tpl/generic-ubuntu1710.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-ubuntu1804.rb b/tpl/generic-ubuntu1804.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-ubuntu1804.rb +++ b/tpl/generic-ubuntu1804.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-ubuntu1810.rb b/tpl/generic-ubuntu1810.rb index b9b14864e..88fe55bc9 100644 --- a/tpl/generic-ubuntu1810.rb +++ b/tpl/generic-ubuntu1810.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/generic-ubuntu1904.rb b/tpl/generic-ubuntu1904.rb index b9b14864e..87de50822 100644 --- a/tpl/generic-ubuntu1904.rb +++ b/tpl/generic-ubuntu1904.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "generic/bazinga" # config.vm.hostname = "bazinga.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -48,6 +51,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" diff --git a/tpl/lineage.rb b/tpl/lineage.rb index 221d0f8ea..58bff1a5a 100644 --- a/tpl/lineage.rb +++ b/tpl/lineage.rb @@ -3,6 +3,7 @@ Vagrant.configure("2") do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "lineage/lineage" # config.vm.hostname = "lineage.build.box" @@ -11,7 +12,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" config.vm.usable_port_range = 20000..30000 @@ -56,6 +59,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" diff --git a/tpl/lineageos.rb b/tpl/lineageos.rb index 25aa60edf..df0cac0be 100644 --- a/tpl/lineageos.rb +++ b/tpl/lineageos.rb @@ -3,6 +3,7 @@ Vagrant.configure("2") do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "lineageos/lineage" # config.vm.hostname = "lineageos.build.box" @@ -11,7 +12,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" config.vm.usable_port_range = 20000..30000 @@ -56,6 +59,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" diff --git a/tpl/magma-alpine.rb b/tpl/magma-alpine.rb index 928318139..5b7df712d 100644 --- a/tpl/magma-alpine.rb +++ b/tpl/magma-alpine.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "lavabit/magma" # config.vm.hostname = "magma.build.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" config.vm.usable_port_range = 20000..30000 @@ -103,7 +106,7 @@ v.memory = 2048 v.driver = "kvm" v.video_vram = 256 - config.vm.guest = :alt + override.vm.guest = :alt v.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio' end @@ -125,6 +128,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.functional_hgfs = false v.gui = false diff --git a/tpl/magma-bsd.rb b/tpl/magma-bsd.rb index b204caac4..6025d8e64 100644 --- a/tpl/magma-bsd.rb +++ b/tpl/magma-bsd.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "lavabit/magma" # config.vm.hostname = "magma.build.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" config.vm.usable_port_range = 20000..30000 @@ -124,6 +127,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.functional_hgfs = false v.gui = false diff --git a/tpl/magma-default.rb b/tpl/magma-default.rb index ecb3c0939..7ccd65bd9 100644 --- a/tpl/magma-default.rb +++ b/tpl/magma-default.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "lavabit/magma" # config.vm.hostname = "magma.build.box" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" config.vm.usable_port_range = 20000..30000 diff --git a/tpl/roboxes-alpine.rb b/tpl/roboxes-alpine310.rb similarity index 92% rename from tpl/roboxes-alpine.rb rename to tpl/roboxes-alpine310.rb index 5758dbf42..65867026d 100644 --- a/tpl/roboxes-alpine.rb +++ b/tpl/roboxes-alpine310.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -29,7 +32,7 @@ v.memory = 2048 v.driver = "kvm" v.video_vram = 256 - config.vm.guest = :alt + override.vm.guest = :alt v.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio' end @@ -51,6 +54,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.functional_hgfs = false v.gui = false diff --git a/tpl/roboxes-alpine35.rb b/tpl/roboxes-alpine35.rb index 5758dbf42..4c5b43cd4 100644 --- a/tpl/roboxes-alpine35.rb +++ b/tpl/roboxes-alpine35.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -29,7 +32,7 @@ v.memory = 2048 v.driver = "kvm" v.video_vram = 256 - config.vm.guest = :alt + override.vm.guest = :alt v.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio' end diff --git a/tpl/roboxes-alpine36.rb b/tpl/roboxes-alpine36.rb index 5758dbf42..4c5b43cd4 100644 --- a/tpl/roboxes-alpine36.rb +++ b/tpl/roboxes-alpine36.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -29,7 +32,7 @@ v.memory = 2048 v.driver = "kvm" v.video_vram = 256 - config.vm.guest = :alt + override.vm.guest = :alt v.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio' end diff --git a/tpl/roboxes-alpine37.rb b/tpl/roboxes-alpine37.rb index 5758dbf42..4c5b43cd4 100644 --- a/tpl/roboxes-alpine37.rb +++ b/tpl/roboxes-alpine37.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -29,7 +32,7 @@ v.memory = 2048 v.driver = "kvm" v.video_vram = 256 - config.vm.guest = :alt + override.vm.guest = :alt v.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio' end diff --git a/tpl/roboxes-alpine38.rb b/tpl/roboxes-alpine38.rb index 5758dbf42..4c5b43cd4 100644 --- a/tpl/roboxes-alpine38.rb +++ b/tpl/roboxes-alpine38.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -29,7 +32,7 @@ v.memory = 2048 v.driver = "kvm" v.video_vram = 256 - config.vm.guest = :alt + override.vm.guest = :alt v.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio' end diff --git a/tpl/roboxes-alpine39.rb b/tpl/roboxes-alpine39.rb index 5758dbf42..65867026d 100644 --- a/tpl/roboxes-alpine39.rb +++ b/tpl/roboxes-alpine39.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -29,7 +32,7 @@ v.memory = 2048 v.driver = "kvm" v.video_vram = 256 - config.vm.guest = :alt + override.vm.guest = :alt v.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio' end @@ -51,6 +54,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.functional_hgfs = false v.gui = false diff --git a/tpl/roboxes-arch.rb b/tpl/roboxes-arch.rb index 907f4406b..87d23cb88 100644 --- a/tpl/roboxes-arch.rb +++ b/tpl/roboxes-arch.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -48,6 +51,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" diff --git a/tpl/roboxes-centos6.rb b/tpl/roboxes-centos6.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-centos6.rb +++ b/tpl/roboxes-centos6.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-centos7.rb b/tpl/roboxes-centos7.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-centos7.rb +++ b/tpl/roboxes-centos7.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-debian10.rb b/tpl/roboxes-debian10.rb index 907f4406b..87d23cb88 100644 --- a/tpl/roboxes-debian10.rb +++ b/tpl/roboxes-debian10.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -48,6 +51,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" diff --git a/tpl/roboxes-debian8.rb b/tpl/roboxes-debian8.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-debian8.rb +++ b/tpl/roboxes-debian8.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-debian9.rb b/tpl/roboxes-debian9.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-debian9.rb +++ b/tpl/roboxes-debian9.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-default.rb b/tpl/roboxes-default.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-default.rb +++ b/tpl/roboxes-default.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-dragonflybsd5.rb b/tpl/roboxes-dragonflybsd5.rb index 8743099e5..959a9549e 100644 --- a/tpl/roboxes-dragonflybsd5.rb +++ b/tpl/roboxes-dragonflybsd5.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-fedora25.rb b/tpl/roboxes-fedora25.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-fedora25.rb +++ b/tpl/roboxes-fedora25.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-fedora26.rb b/tpl/roboxes-fedora26.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-fedora26.rb +++ b/tpl/roboxes-fedora26.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-fedora27.rb b/tpl/roboxes-fedora27.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-fedora27.rb +++ b/tpl/roboxes-fedora27.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-fedora28.rb b/tpl/roboxes-fedora28.rb index 907f4406b..87d23cb88 100644 --- a/tpl/roboxes-fedora28.rb +++ b/tpl/roboxes-fedora28.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -48,6 +51,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" diff --git a/tpl/roboxes-fedora29.rb b/tpl/roboxes-fedora29.rb index 907f4406b..87d23cb88 100644 --- a/tpl/roboxes-fedora29.rb +++ b/tpl/roboxes-fedora29.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -48,6 +51,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" diff --git a/tpl/roboxes-fedora30.rb b/tpl/roboxes-fedora30.rb new file mode 100644 index 000000000..87d23cb88 --- /dev/null +++ b/tpl/roboxes-fedora30.rb @@ -0,0 +1,63 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure(2) do |config| + + config.vm.boot_timeout = 1800 + # config.vm.box = "roboxes/bazinga" + # config.vm.hostname = "bazinga.roboxes" + config.vm.synced_folder ".", "/vagrant", disabled: true + + config.vm.box_check_update = true + + # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 + # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 + # config.vm.box_download_checksum_type = "sha256" + + # config.vm.provision "shell", run: "always", inline: <<-SHELL + # SHELL + + # Adding a second CPU and increasing the RAM to 2048MB will speed + # things up considerably should you decide to do anythinc with this box. + config.vm.provider :hyperv do |v, override| + v.maxmemory = 2048 + v.memory = 2048 + v.cpus = 2 + end + + config.vm.provider :libvirt do |v, override| + v.disk_bus = "scsi" + v.driver = "kvm" + v.video_vram = 256 + v.memory = 2048 + v.cpus = 2 + end + + config.vm.provider :parallels do |v, override| + v.customize ["set", :id, "--on-window-close", "keep-running"] + v.customize ["set", :id, "--startup-view", "headless"] + v.customize ["set", :id, "--memsize", "2048"] + v.customize ["set", :id, "--cpus", "2"] + end + + config.vm.provider :virtualbox do |v, override| + v.customize ["modifyvm", :id, "--memory", 2048] + v.customize ["modifyvm", :id, "--vram", 256] + v.customize ["modifyvm", :id, "--cpus", 2] + v.gui = false + end + + ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| + config.vm.provider provider do |v, override| + v.ssh_info_public = true + v.whitelist_verified = true + v.gui = false + v.vmx["cpuid.coresPerSocket"] = "1" + v.vmx["memsize"] = "2048" + v.vmx["numvcpus"] = "2" + end + end + +end diff --git a/tpl/roboxes-freebsd11.rb b/tpl/roboxes-freebsd11.rb index 8743099e5..959a9549e 100644 --- a/tpl/roboxes-freebsd11.rb +++ b/tpl/roboxes-freebsd11.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-freebsd12.rb b/tpl/roboxes-freebsd12.rb index 8743099e5..a03171895 100644 --- a/tpl/roboxes-freebsd12.rb +++ b/tpl/roboxes-freebsd12.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -50,6 +53,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.functional_hgfs = false v.gui = false diff --git a/tpl/roboxes-gentoo.rb b/tpl/roboxes-gentoo.rb index dbf11b723..3d56970bf 100644 --- a/tpl/roboxes-gentoo.rb +++ b/tpl/roboxes-gentoo.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-hardenedbsd11.rb b/tpl/roboxes-hardenedbsd11.rb index 8743099e5..e9401818a 100644 --- a/tpl/roboxes-hardenedbsd11.rb +++ b/tpl/roboxes-hardenedbsd11.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -25,6 +28,7 @@ end config.vm.provider :libvirt do |v, override| + v.nic_model_type = "e1000" v.disk_bus = "scsi" v.driver = "kvm" v.video_vram = 256 diff --git a/tpl/roboxes-hardenedbsd12.rb b/tpl/roboxes-hardenedbsd12.rb index 8743099e5..a03171895 100644 --- a/tpl/roboxes-hardenedbsd12.rb +++ b/tpl/roboxes-hardenedbsd12.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -50,6 +53,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.functional_hgfs = false v.gui = false diff --git a/tpl/roboxes-netbsd8.rb b/tpl/roboxes-netbsd8.rb index 8743099e5..959a9549e 100644 --- a/tpl/roboxes-netbsd8.rb +++ b/tpl/roboxes-netbsd8.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-openbsd6.rb b/tpl/roboxes-openbsd6.rb index 8743099e5..a03171895 100644 --- a/tpl/roboxes-openbsd6.rb +++ b/tpl/roboxes-openbsd6.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -50,6 +53,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.functional_hgfs = false v.gui = false diff --git a/tpl/roboxes-bsd.rb b/tpl/roboxes-opensuse15.rb similarity index 94% rename from tpl/roboxes-bsd.rb rename to tpl/roboxes-opensuse15.rb index 8743099e5..0f06647dd 100644 --- a/tpl/roboxes-bsd.rb +++ b/tpl/roboxes-opensuse15.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -40,18 +43,15 @@ end config.vm.provider :virtualbox do |v, override| - v.gui = false - v.functional_vboxsf = false - v.check_guest_additions = false + v.customize ["modifyvm", :id, "--memory", 2048] v.customize ["modifyvm", :id, "--vram", 256] v.customize ["modifyvm", :id, "--cpus", 2] - v.customize ["modifyvm", :id, "--memory", 2048] + v.gui = false end ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| v.whitelist_verified = true - v.functional_hgfs = false v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" v.vmx["memsize"] = "2048" diff --git a/tpl/roboxes-opensuse42.rb b/tpl/roboxes-opensuse42.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-opensuse42.rb +++ b/tpl/roboxes-opensuse42.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-oracle7.rb b/tpl/roboxes-oracle7.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-oracle7.rb +++ b/tpl/roboxes-oracle7.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-oracle8.rb b/tpl/roboxes-oracle8.rb new file mode 100644 index 000000000..0f06647dd --- /dev/null +++ b/tpl/roboxes-oracle8.rb @@ -0,0 +1,62 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure(2) do |config| + + config.vm.boot_timeout = 1800 + # config.vm.box = "roboxes/bazinga" + # config.vm.hostname = "bazinga.roboxes" + config.vm.synced_folder ".", "/vagrant", disabled: true + + config.vm.box_check_update = true + + # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 + # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 + # config.vm.box_download_checksum_type = "sha256" + + # config.vm.provision "shell", run: "always", inline: <<-SHELL + # SHELL + + # Adding a second CPU and increasing the RAM to 2048MB will speed + # things up considerably should you decide to do anythinc with this box. + config.vm.provider :hyperv do |v, override| + v.maxmemory = 2048 + v.memory = 2048 + v.cpus = 2 + end + + config.vm.provider :libvirt do |v, override| + v.disk_bus = "scsi" + v.driver = "kvm" + v.video_vram = 256 + v.memory = 2048 + v.cpus = 2 + end + + config.vm.provider :parallels do |v, override| + v.customize ["set", :id, "--on-window-close", "keep-running"] + v.customize ["set", :id, "--startup-view", "headless"] + v.customize ["set", :id, "--memsize", "2048"] + v.customize ["set", :id, "--cpus", "2"] + end + + config.vm.provider :virtualbox do |v, override| + v.customize ["modifyvm", :id, "--memory", 2048] + v.customize ["modifyvm", :id, "--vram", 256] + v.customize ["modifyvm", :id, "--cpus", 2] + v.gui = false + end + + ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| + config.vm.provider provider do |v, override| + v.whitelist_verified = true + v.gui = false + v.vmx["cpuid.coresPerSocket"] = "1" + v.vmx["memsize"] = "2048" + v.vmx["numvcpus"] = "2" + end + end + +end diff --git a/tpl/roboxes-rhel6.rb b/tpl/roboxes-rhel6.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-rhel6.rb +++ b/tpl/roboxes-rhel6.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-rhel7.rb b/tpl/roboxes-rhel7.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-rhel7.rb +++ b/tpl/roboxes-rhel7.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-rhel8.rb b/tpl/roboxes-rhel8.rb index 5c9117644..ac46d4239 100644 --- a/tpl/roboxes-rhel8.rb +++ b/tpl/roboxes-rhel8.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -48,6 +51,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1" diff --git a/tpl/roboxes-ubuntu1604.rb b/tpl/roboxes-ubuntu1604.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-ubuntu1604.rb +++ b/tpl/roboxes-ubuntu1604.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-ubuntu1610.rb b/tpl/roboxes-ubuntu1610.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-ubuntu1610.rb +++ b/tpl/roboxes-ubuntu1610.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-ubuntu1704.rb b/tpl/roboxes-ubuntu1704.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-ubuntu1704.rb +++ b/tpl/roboxes-ubuntu1704.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-ubuntu1710.rb b/tpl/roboxes-ubuntu1710.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-ubuntu1710.rb +++ b/tpl/roboxes-ubuntu1710.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-ubuntu1804.rb b/tpl/roboxes-ubuntu1804.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-ubuntu1804.rb +++ b/tpl/roboxes-ubuntu1804.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-ubuntu1810.rb b/tpl/roboxes-ubuntu1810.rb index 907f4406b..0f06647dd 100644 --- a/tpl/roboxes-ubuntu1810.rb +++ b/tpl/roboxes-ubuntu1810.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL diff --git a/tpl/roboxes-ubuntu1904.rb b/tpl/roboxes-ubuntu1904.rb index 907f4406b..87d23cb88 100644 --- a/tpl/roboxes-ubuntu1904.rb +++ b/tpl/roboxes-ubuntu1904.rb @@ -3,6 +3,7 @@ Vagrant.configure(2) do |config| + config.vm.boot_timeout = 1800 # config.vm.box = "roboxes/bazinga" # config.vm.hostname = "bazinga.roboxes" config.vm.synced_folder ".", "/vagrant", disabled: true @@ -10,7 +11,9 @@ config.vm.box_check_update = true # config.vm.post_up_message = "" + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum = true + config.vm.boot_timeout = 1800 # config.vm.box_download_checksum_type = "sha256" # config.vm.provision "shell", run: "always", inline: <<-SHELL @@ -48,6 +51,7 @@ ["vmware_fusion", "vmware_workstation", "vmware_desktop"].each do |provider| config.vm.provider provider do |v, override| + v.ssh_info_public = true v.whitelist_verified = true v.gui = false v.vmx["cpuid.coresPerSocket"] = "1"