diff --git a/live-build/auto/config b/live-build/auto/config index b1ad6ad4..67e59108 100755 --- a/live-build/auto/config +++ b/live-build/auto/config @@ -819,6 +819,11 @@ case $PROJECT in arm64) add_package install flash-kernel ;; + riscv64) + if [ -n "$SUBARCH" ]; then + KERNEL_FLAVOURS=generic + fi + ;; esac OPTS="${OPTS:+$OPTS }--system=normal" OPTS="${OPTS:+$OPTS }--hdd-label=cloudimg-rootfs" diff --git a/live-build/cidata/meta-data.sample b/live-build/cidata/meta-data.sample new file mode 100644 index 00000000..fa219b17 --- /dev/null +++ b/live-build/cidata/meta-data.sample @@ -0,0 +1,8 @@ +# NB! This is a sample, copy to "meta-data" and mofiy to take effect +# NB! Also see user-data.sample and network-config.sample + +# This is the meta-data configuration file for cloud-init. Typically this just +# contains the instance_id. Please refer to the cloud-init documentation for +# more information: +# +# https://cloudinit.readthedocs.io/ diff --git a/live-build/cidata/network-config.sample b/live-build/cidata/network-config.sample new file mode 100644 index 00000000..13c172d8 --- /dev/null +++ b/live-build/cidata/network-config.sample @@ -0,0 +1,52 @@ +# NB! This is a sample, copy to "network-config" and mofiy to take effect +# NB! Also see user-data.sample and meta-data.sample + +# This file contains a netplan-compatible configuration which cloud-init will +# apply on first-boot (note: it will *not* update the config after the first +# boot). Please refer to the cloud-init documentation and the netplan reference +# for full details: +# +# https://cloudinit.readthedocs.io/en/latest/topics/network-config.html +# https://cloudinit.readthedocs.io/en/latest/topics/network-config-format-v2.html +# https://netplan.io/reference +# +# Please note that the YAML format employed by this file is sensitive to +# differences in whitespace; if you are editing this file in an editor (like +# Notepad) which uses literal tabs, take care to only use spaces for +# indentation. See the following link for more details: +# +# https://en.wikipedia.org/wiki/YAML +# +# +# The image has stock nocloud-net configuration that will attemp dhcp +# v4 on all ethernet devices, similar to zz-all-en / zz-all-eth +# stanzas below. Hence this file is optional. +# +#version: 2 +#ethernets: +# zz-all-en: +# match: +# name: "en*" +# dhcp4: true +# optional: true +# zz-all-eth: +# match: +# name: "eth*" +# dhcp4: true +# optional: true +#wifis: +# wlan0: +# dhcp4: true +# optional: true +# access-points: +# myhomewifi: +# password: "S3kr1t" +# myworkwifi: +# password: "correct battery horse staple" +# workssid: +# auth: +# key-management: eap +# method: peap +# identity: "me@example.com" +# password: "passw0rd" +# ca-certificate: /etc/my_ca.pem diff --git a/live-build/cidata/user-data.sample b/live-build/cidata/user-data.sample new file mode 100644 index 00000000..82704538 --- /dev/null +++ b/live-build/cidata/user-data.sample @@ -0,0 +1,84 @@ +#cloud-config + +# NB! This is a sample, copy to "user-data" and modify to take effect + +# NB! meta-data is required too! See "meta-data.sample" + +# NB! For networking see "network-config.sample" + +# This is the user-data configuration file for cloud-init. This image +# has a default nocloud-net metadata available on the first +# partition. By default it sets up an initial user called "ubuntu" +# with password "ubuntu", which must be changed at first +# login. However, one can override and provide many additional actions +# to be initiated on first boot from this file. The cloud-init +# documentation has more details: https://cloudinit.readthedocs.io/ +# Some additional examples are provided in comments below the default +# configuration. + +# On first boot, set the (default) ubuntu user's password to "ubuntu" and +# expire user passwords +#chpasswd: +# expire: true +# list: +# - ubuntu:ubuntu + +# Enable password authentication with the SSH daemon +#ssh_pwauth: true + +## On first boot, use ssh-import-id to give the specific users SSH access to +## the default user +#ssh_import_id: +#- lp:my_launchpad_username +#- gh:my_github_username + +## Add users and groups to the system, and import keys with the ssh-import-id +## utility +#groups: +#- robot: [robot] +#- robotics: [robot] +# +#users: +#- default +#- name: robot +# gecos: Mr. Robot +# primary_group: robot +# groups: users +# ssh_import_id: foobar +# lock_passwd: false +# passwd: $5$hkui88$nvZgIle31cNpryjRfO9uArF7DYiBcWEnjqq7L1AQNN3 + +## Update apt database and upgrade packages on first boot +#package_update: true +#package_upgrade: true + +## Install additional packages on first boot +#packages: +#- pwgen +#- pastebinit +#- [libpython2.7, 2.7.3-0ubuntu3.1] + +## Write arbitrary files to the file-system (including binaries!) +#write_files: +#- path: /etc/default/keyboard +# content: | +# # KEYBOARD configuration file +# # Consult the keyboard(5) manual page. +# XKBMODEL="pc105" +# XKBLAYOUT="gb" +# XKBVARIANT="" +# XKBOPTIONS="ctrl: nocaps" +# permissions: '0644' +# owner: root:root +#- encoding: gzip +# path: /usr/bin/hello +# content: !!binary | +# H4sIAIDb/U8C/1NW1E/KzNMvzuBKTc7IV8hIzcnJVyjPL8pJ4QIA6N+MVxsAAAA= +# owner: root:root +# permissions: '0755' + +## Run arbitrary commands at rc.local like time +#runcmd: +#- [ ls, -l, / ] +#- [ sh, -xc, "echo $(date) ': hello world!'" ] +#- [ wget, "http://ubuntu.com", -O, /run/mydir/index.html ] diff --git a/live-build/functions b/live-build/functions index 74224dbb..c1f8141c 100644 --- a/live-build/functions +++ b/live-build/functions @@ -989,6 +989,19 @@ is_live_layer () { return 1 } +setup_cidata() { + local cidata_dev=$1 + local mountpoint=$(mktemp -d) + mkfs.vfat -F 32 -n CIDATA ${cidata_dev} + mount ${cidata_dev} ${mountpoint} + cp /usr/share/livecd-rootfs/live-build/cidata/* ${mountpoint} + cat >>${mountpoint}/meta-data.sample <mountpoint/var/lib/cloud/seed/nocloud/user-data + if [ -n "${SUBARCH:-}" ]; then + chroot mountpoint apt-get install -qqy u-boot-sifive + dd if=mountpoint/usr/lib/u-boot/sifive_fu540/u-boot-spl.bin of=$loader1 + dd if=mountpoint/usr/lib/u-boot/sifive_fu540/u-boot.itb of=$loader2 + # FSBL, which gets U-Boot SPL + loader1="/dev/mapper${loop_device///dev/}p13" + # The real U-Boot + loader2="/dev/mapper${loop_device///dev/}p14" + # Provide end-user modifyable CIDATA + cidata_dev="/dev/mapper${loop_device///dev/}p12" + setup_cidata "${cidata_dev}" + # Provide stock nocloud datasource + # Allow interactive login on baremetal SiFive board, + # without a cloud datasource. + mkdir -p mountpoint/var/lib/cloud/seed/nocloud-net + cat <mountpoint/var/lib/cloud/seed/nocloud-net/meta-data +instance-id: iid-$(openssl rand -hex 8) +END + cat <mountpoint/var/lib/cloud/seed/nocloud-net/user-data #cloud-config chpasswd: - expire: false + expire: True list: - ubuntu:ubuntu +ssh_pwauth: True EOF - cat <mountpoint/var/lib/cloud/seed/nocloud/network-data + cat <mountpoint/var/lib/cloud/seed/nocloud-net/network-config # This is the initial network config. # It can be overwritten by cloud-init. -network: - version: 2 - ethernets: - zz-all-en: - match: - name: "en*" - dhcp4: true - zz-all-eth: - match: - name: "eth*" - dhcp4: true +version: 2 +ethernets: + zz-all-en: + match: + name: "en*" + dhcp4: true + optional: true + zz-all-eth: + match: + name: "eth*" + dhcp4: true + optional: true EOF + fi ## TODO remove below once we have grub-efi-riscv64 rm mountpoint/tmp/device.map umount mountpoint/boot/efi diff --git a/live-build/ubuntu-cpc/hooks.d/base/qcow2-image.binary b/live-build/ubuntu-cpc/hooks.d/base/qcow2-image.binary index c827a2a6..882c62ac 100755 --- a/live-build/ubuntu-cpc/hooks.d/base/qcow2-image.binary +++ b/live-build/ubuntu-cpc/hooks.d/base/qcow2-image.binary @@ -7,6 +7,10 @@ case $ARCH:$SUBARCH in xz -T4 -c binary/boot/disk.ext4 > livecd.ubuntu-cpc.disk1.img.xz exit 0 ;; + riscv64:*) + xz -T4 -c binary/boot/disk-uefi.ext4 > livecd.ubuntu-cpc.disk1.img.xz + exit 0 + ;; esac . config/functions