-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improvements for the OPi image #19
Changes from 34 commits
d95044e
fe6c253
0b3da4d
7eb5448
714e6b2
e22b5c1
53a6e1d
9e82ee7
a8510e0
276ccc3
b63d532
ca35d4a
9af48aa
2cee482
02c47c0
e6d78ab
8252161
83242b6
26e91ca
bfff396
c337707
f4a9321
b6ff83c
3c7468a
f15db09
e261a4b
b3664fe
6133a12
35c690d
dbbd5df
14af023
92aebe2
b861857
53a09d3
db8325c
38e3836
35b5587
f1a3fe4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# This is the meta-data configuration file for cloud-init. Please refer to the | ||
# cloud-init documentation for more information: | ||
# | ||
# https://cloudinit.readthedocs.io/ | ||
|
||
# Set the datasource mode to "local". This ensures that user-data is acted upon | ||
# prior to bringing up the network (because everything about the datasource is | ||
# assumed to be local). If you wish to use an HTTP datasource instead, you can | ||
# change this to "net" or override it on the kernel cmdline (see README). | ||
dsmode: local | ||
|
||
# Specifies the "unique" identifier of the instance. Typically in cloud-init | ||
# this is generated by the owning cloud and is actually unique (to some | ||
# degree). Here our data-source is local, so this is just a fixed string. | ||
# Warning: changing this will cause cloud-init to assume it is running on a | ||
# "new" instance, and to go through first time setup again (the value is | ||
# compared to a cached copy). | ||
instance-id: cloud-image |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
# 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://netplan.io/reference | ||
# https://cloudinit.readthedocs.io/en/latest/topics/network-config.html | ||
# https://cloudinit.readthedocs.io/en/latest/topics/network-config-format-v2.html | ||
# | ||
# 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 | ||
|
||
# Some additional examples are commented out below | ||
|
||
network: | ||
version: 2 | ||
renderer: NetworkManager | ||
ethernets: | ||
end1: | ||
dhcp4: true | ||
dhcp6: false | ||
addresses: | ||
- 192.0.2.2/24 | ||
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 | ||
|
||
# regulatory-domain: GB |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
#cloud-config | ||
|
||
# This is the user-data configuration file for cloud-init. By default this sets | ||
# up an initial user called "ubuntu" with password "ubuntu", which must be | ||
# changed at first login. However, many additional actions can be initiated on | ||
# first boot from this file. The cloud-init documentation has more details: | ||
# | ||
# https://cloudinit.readthedocs.io/ | ||
# | ||
# 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 | ||
# | ||
# Some additional examples are provided in comments below the default | ||
# configuration. | ||
|
||
# The (default) ubuntu user must be in the video group for hardware acceleration | ||
users: | ||
- default | ||
- name: ubuntu | ||
groups: video | ||
|
||
# On first boot, set the (default) ubuntu user's password to "ubuntu" and | ||
# expire user passwords | ||
chpasswd: | ||
expire: true | ||
users: | ||
- name: ubuntu | ||
password: ubuntu | ||
type: text | ||
|
||
## Set the system's hostname. Please note that, unless you have a local DNS | ||
## setup where the hostname is derived from DHCP requests (as with dnsmasq), | ||
## setting the hostname here will not make the machine reachable by this name. | ||
## You may also wish to install avahi-daemon (see the "packages:" key below) | ||
## to make your machine reachable by the .local domain | ||
#hostname: ubuntu | ||
|
||
## Set up the keyboard layout. See localectl(1), in particular the various | ||
## list-x11-* sub-commands, to determine the available models, layouts, | ||
## variants, and options | ||
#keyboard: | ||
# model: pc105 | ||
# layout: gb | ||
# variant: | ||
# options: ctrl:nocaps | ||
|
||
# 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] | ||
#- pi | ||
# | ||
#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: | ||
#- avahi-daemon | ||
#- rng-tools | ||
#- python3-gpiozero | ||
#- [python3-serial, 3.5-1] | ||
|
||
## Write arbitrary files to the file-system (including binaries!) | ||
#write_files: | ||
#- path: /etc/default/console-setup | ||
# content: | | ||
# # Consult the console-setup(5) manual page. | ||
# ACTIVE_CONSOLES="/dev/tty[1-6]" | ||
# CHARMAP="UTF-8" | ||
# VIDEOMODE= | ||
# FONT="Lat15-Terminus18x10.psf.gz" | ||
# FONTFACE= | ||
# FONTSIZE= | ||
# CODESET="Lat15" | ||
# permissions: '0644' | ||
# owner: root:root | ||
#- encoding: gzip | ||
# path: /root/Makefile | ||
# content: !!binary | | ||
# H4sICF2DTWIAA01ha2VmaWxlAFNWCM8syVBILMjPyU/PTC1WKMlXiPB2dlFQNjSx5MpNteLi | ||
# dLDiSoRQxYl5KeWZyRkgXrSCkoqKRmaKgm6pppKCbmqhgoFCrIKamkK1QmpyRr6Ckn92YqWS | ||
# NdC80uQMBZhOa4VahZoaqIrwjMQSewXfxOxUhcwShcr80qLi1Jw0RSUuAIYfEJmVAAAA | ||
# owner: root:root | ||
# permissions: '0644' | ||
|
||
## 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 ] |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,55 +4,89 @@ if id "$1" >/dev/null 2>&1; then | |
echo 'user found' | ||
else | ||
echo "creating pi user" | ||
useradd pi -b /home | ||
useradd pi -m -b /home -s /bin/bash | ||
usermod -a -G sudo pi | ||
mkdir /home/pi | ||
chown -R pi /home/pi | ||
fi | ||
echo "pi:raspberry" | chpasswd | ||
|
||
apt-get update | ||
apt-get update --quiet | ||
|
||
before=$(df --output=used / | tail -n1) | ||
# clean up stuff | ||
echo 'Purging snaps' | ||
# get rid of snaps | ||
rm -rf /var/lib/snapd/seed/snaps/* | ||
rm -f /var/lib/snapd/seed/seed.yaml | ||
apt-get purge --yes --quiet lxd-installer lxd-agent-loader | ||
apt-get purge --yes --quiet snapd | ||
|
||
# remove bluetooth daemon | ||
apt-get purge --yes --quiet bluez | ||
|
||
apt-get --yes --quiet autoremove | ||
|
||
after=$(df --output=used / | tail -n1) | ||
freed=$(( before - after )) | ||
|
||
echo "Freed up $freed KiB" | ||
|
||
# run Photonvision install script | ||
wget https://git.io/JJrEP -O install.sh | ||
chmod +x install.sh | ||
|
||
sed -i 's/# AllowedCPUs=4-7/AllowedCPUs=4-7/g' install.sh | ||
sed -i 's/# AllowedCPUs=4-7/AllowedCPUs=0-7/g' install.sh | ||
|
||
./install.sh -n -q | ||
rm install.sh | ||
|
||
echo "Installing additional things" | ||
|
||
# Remove extra packages | ||
echo "Purging extra things" | ||
# apt-get remove -y gdb gcc g++ linux-headers* libgcc*-dev | ||
# apt-get remove -y snapd | ||
apt-get autoremove -y | ||
apt-get install --yes --quiet network-manager net-tools libatomic1 | ||
|
||
# set NetworkManager as the renderer in cloud-init and static ip | ||
cp -f ./OPi5_CIDATA/network-config /boot/network-config | ||
|
||
echo "Installing additional things" | ||
sudo apt-get update | ||
apt-get install -y network-manager net-tools libatomic1 | ||
# set the hostname in cloud-init | ||
sed -i 's/#hostname:.*/hostname: photonvision/' /boot/user-data | ||
grep 'hostname:' /boot/user-data | ||
|
||
# add run command to disable cloud-init after first boot | ||
sed -i '$a\\nruncmd:\n- [ touch, /etc/cloud/cloud-init.disabled ]' /boot/user-data | ||
tail /boot/user-data | ||
|
||
# tell NetworkManager not to wait for the carrier on ethernet, which can delay boot | ||
# when the coprocessor isn't connected to the ethernet | ||
cat > /etc/NetworkManager/conf.d/50-ignore-carrier.conf <<EOF | ||
[main] | ||
ignore-carrier=* | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This might be dangerous on a robot network where ethernet cables can intermittently be unplugged. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you share more details of the failure mode that you're concerned about? I'm testing different network setting to understand how they impact startup time and network behavior to try to find a configuration that provides the most stability and predictability, so understanding what could go wrong from your perspective would be a big help. |
||
EOF | ||
|
||
# modify photonvision.service to wait for the network before starting | ||
# this helps ensure that photonvision detects the network the first time it starts | ||
sed -i '/Description/aAfter=network-online.target' /etc/systemd/system/photonvision.service | ||
sed -i 's/-n$//' /etc/systemd/system/photonvision.service | ||
cat /etc/systemd/system/photonvision.service | ||
|
||
# systemctl disable NetworkManager-wait-online.service | ||
systemctl disable systemd-networkd-wait-online.service | ||
|
||
apt-get install -y libc6 libstdc++6 | ||
apt-get install --yes --quiet libc6 libstdc++6 | ||
|
||
# cat > /etc/netplan/00-default-nm-renderer.yaml <<EOF | ||
# network: | ||
# renderer: NetworkManager | ||
# EOF | ||
|
||
if [ $(cat /etc/lsb-release | grep -c "24.04") -gt 0 ]; then | ||
# add jammy to apt sources | ||
echo "Adding jammy to list of apt sources" | ||
add-apt-repository -y -S 'deb http://ports.ubuntu.com/ubuntu-ports jammy main universe' | ||
fi | ||
|
||
apt-get update | ||
apt-get --quiet update | ||
|
||
# mrcal stuff | ||
apt-get install -y libcholmod3 liblapack3 libsuitesparseconfig5 | ||
apt-get install --yes --quiet libcholmod3 liblapack3 libsuitesparseconfig5 | ||
|
||
|
||
rm -rf /var/lib/apt/lists/* | ||
apt-get clean | ||
apt-get --yes --quiet clean | ||
|
||
rm -rf /usr/share/doc | ||
rm -rf /usr/share/locale/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since you disabled networking support / NetworkManager via the
-n
in your previous commit, PhotonVision can no longer set the device hostname.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is temporary, and part of the reason this is still draft. I have some more commits that I'll push to improve networking on OPis.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The latest pushes have re-enabled network management.