Copyright (C) 2022 Pasha This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . GNU Hurd on OpenStack ---------------------- 1. Install GNU Hurd and save as qcow2 format. 2. create user account "debian". (openstack will try to push selected ssh key based login for this account.) 3. workaround: currnet GNU Hurd in openstack could not read login metadata. Therefore, create another account name hurdstack. We will use this account to login via ssh. ------------------- set console output ------------------- # sed -i 's/{GRUB_CMDLINE_GNUMACH}/{GRUB_CMDLINE_GNUMACH} console=com0/' /etc/grub.d/10_hurd # export PATH=$PATH:/usr/sbin/:/sbin/ # update-grub ------------------ install packages ------------------ # apt-get install patch cloud-init inetutils-tools ----------------------------------------------- patch cloud-init for inetutils-ifconfig support ----------------------------------------------- # patch /usr/lib/python3/dist-packages/cloudinit/netinfo.py < netinfo.py.patch (md5sum /usr/lib/python3/dist-packages/cloudinit/netinfo.py and set the value - optional) # sed -i "s/004c853827df095227eef86175ee351b usr\/lib\/python3\/dist-packages\/cloudinit\/netinfo.py/79af408603bc6e3489fd2d3f1a0e9cac usr\/lib\/python3\/dist-packages\/cloudinit\/netinfo.py/" /var/lib/dpkg/info/cloud-init.md5sums ------------------------------- remove MAC address and clean up ------------------------------- # virt-sysprep -d hurdstack # virsh undefine hurdstack -------------------------------------------------------------- upload in openstack (you may change --public to other settings) -------------------------------------------------------------- $ openstack image create \ --container-format bare \ --disk-format qcow2 \ --property hw_disk_bus=ide \ --property os_type=linux \ --property os_distro=debian \ --property os_admin_user=debian \ --property os_version='10.12.7' \ --property hw_vif_model=e1000 \ --public \ --file hurdstack.qcow2 \ hurdstack ------------------------------ example create server command ------------------------------ list your available net-id $ openstack network list list your available security group id $ openstack security group list start an instance with any flavor (example with m1.nano) $ openstack server create \ --flavor m1.nano \ --image hurdstack \ --nic net-id=44b3993a-60dd-4074-a911-1b9ac4b8b6fa \ --security-group 8b5d5482-2686-40a8-b394-5c764b6fe310 \ --key-name mykey hurdstackinstance -------------------- check server status -------------------- # openstack server list enable port 22 from web-interface or command line for ssh login. You may check status in openstack web-interface logs and ssh when it is ready. ssh might take several minutes as cloud-init is trying to fetch metadata on boot which is still unavailable from GNU Hurd. links: https://www.debian.org/ports/hurd/hurd-install https://docs.openstack.org/image-guide/create-images-manually.html