Debian-family specifics: apt, packaging and distro conventions.
- Add a PPAeasy · in-browser
Write /home/player/ppa.sh that adds the PPA ppa:deadsnakes/ppa and refreshes the index.
(Authored config, graded structurally — the engine isn't run here.)
- Add a cron.d jobeasy · in-browser
Write /home/player/backup (an /etc/cron.d-style line) running /usr/local/bin/backup.sh as root every day at 02:30.
(Authored config, graded structurally — the engine isn't run here.)
- Allow a port with ufweasy · in-browser
Write /home/player/f.sh allowing 8080/tcp through ufw then reloading.
(Authored config, graded structurally — the engine isn't run here.)
- Generate a localeeasy · in-browser
Write /home/player/l.sh that locale-gen en_US.UTF-8 and update-locale LANG=en_US.UTF-8.
(Authored config, graded structurally — the engine isn't run here.)
- Hold a package versioneasy · in-browser
Write /home/player/hold.sh that marks the package nginx on hold so apt won't upgrade it.
(Authored config, graded structurally — the engine isn't run here.)
- Install a snapeasy · in-browser
Write /home/player/s.sh installing the 'core' snap then 'htop'.
(Authored config, graded structurally — the engine isn't run here.)
- Script a ufw baselineeasy · in-browser
Write /home/player/fw.sh: ufw default deny incoming, allow OpenSSH, then enable.
(Authored config, graded structurally — the engine isn't run here.)
- Script an apt installeasy
On Ubuntu you'd use apt. Write /home/player/install.sh that refreshes the package index and installs nginx non-interactively (this box can't run it — it's graded for correctness).
- Set the timezoneeasy · in-browser
Write /home/player/tz.sh setting the system timezone to Europe/Berlin via timedatectl.
(Authored config, graded structurally — the engine isn't run here.)
- apt HTTP(S) proxyeasy · in-browser
Write /etc/apt/apt.conf.d/01proxy directing apt through a caching proxy: set Acquire::http::Proxy and Acquire::https::Proxy both to "http://proxy.example.com:3142". Put each directive on its own line ending in a semicolon.
(Authored config, graded structurally — the engine isn't run here.)
- apt disable recommendseasy · in-browser
Write /etc/apt/apt.conf.d/99no-recommends so apt does not pull in recommended or suggested packages: set APT::Install-Recommends to "false" and APT::Install-Suggests to "false". Put each directive on its own line ending in a semicolon.
(Authored config, graded structurally — the engine isn't run here.)
- deb822 security pocketeasy · in-browser
Write /etc/apt/sources.list.d/ubuntu-security.sources in deb822 format: Types must include both deb and deb-src (on one line, space-separated), URIs http://security.ubuntu.com/ubuntu, Suites noble-security, Components must include universe, and a Signed-By keyring path.
(Authored config, graded structurally — the engine isn't run here.)
- netplan MTU and MAC overrideeasy · in-browser
Write /home/player/40-jumbo.yaml: a netplan v2 config for eth0 with dhcp4: true, an MTU of 9000 (jumbo frames), and a spoofed macaddress of 52:54:00:ab:cd:ef.
(Authored config, graded structurally — the engine isn't run here.)
- Add a signed apt repomedium · in-browser
Write /home/player/k.sh that downloads a key, gpg --dearmor it into /etc/apt/keyrings/x.gpg, then writes a deb line with signed-by=/etc/apt/keyrings/x.gpg.
(Authored config, graded structurally — the engine isn't run here.)
- Add an fstab mountmedium · in-browser
Write /home/player/fstab.line: a single /etc/fstab entry mounting UUID=1234-ABCD at /data as ext4 with defaults, dump 0, pass 2.
(Authored config, graded structurally — the engine isn't run here.)
- Author a netplan configmedium
Write /home/player/01-netcfg.yaml: a netplan config (version 2, renderer networkd) that sets interface eth0 to DHCP (dhcp4 true).
- Configure needrestartmedium · in-browser
Write /home/player/needrestart.conf setting $nrconf{restart} = 'a'; (automatic).
(Authored config, graded structurally — the engine isn't run here.)
- Dynamic MOTD scriptmedium · in-browser
Write /home/player/99-banner (an /etc/update-motd.d script): starts with #!/bin/sh and echoes a banner.
(Authored config, graded structurally — the engine isn't run here.)
- Enable unattended security upgradesmedium · in-browser
Write /home/player/50unattended-upgrades enabling the Origins-Pattern for the security archive (a line referencing ${distro_id}:${distro_codename}-security).
(Authored config, graded structurally — the engine isn't run here.)
- Lower backports prioritymedium · in-browser
Write /etc/apt/preferences.d/backports.pref so packages from the backports pocket are never installed automatically: Package: * , Pin: release a=noble-backports , and Pin-Priority: 100.
(Authored config, graded structurally — the engine isn't run here.)
- Persist a sysctl (Ubuntu)medium · in-browser
Write /home/player/99-tune.conf for /etc/sysctl.d setting vm.swappiness = 10 and fs.file-max = 200000.
(Authored config, graded structurally — the engine isn't run here.)
- Pin a packagemedium · in-browser
Write /home/player/nginx.pref: an apt preferences pin holding package nginx from release a=bullseye-backports at Pin-Priority 990.
(Authored config, graded structurally — the engine isn't run here.)
- Preseed Postfix with debconfmedium · in-browser
Write /home/player/postfix.preseed with debconf-set-selections lines that configure Postfix non-interactively: select Internet Site for postfix/main_mailer_type, and set postfix/mailname (a string) to mail.example.com. Format each line as four whitespace-separated fields: owner question type value.
(Authored config, graded structurally — the engine isn't run here.)
- Preseed with debconfmedium · in-browser
Write /home/player/preseed.sh that uses debconf-set-selections to preseed tzdata's area to 'Etc' before a noninteractive install.
(Authored config, graded structurally — the engine isn't run here.)
- Script a release upgrademedium · in-browser
Write /home/player/u.sh: apt update/upgrade then do-release-upgrade non-interactively (-f DistUpgradeViewNonInteractive).
(Authored config, graded structurally — the engine isn't run here.)
- apt periodic auto-upgradesmedium · in-browser
Write /etc/apt/apt.conf.d/20auto-upgrades enabling the automatic update/upgrade timers: set APT::Periodic::Update-Package-Lists to "1" and APT::Periodic::Unattended-Upgrade to "1". Put each directive on its own line ending in a semicolon.
(Authored config, graded structurally — the engine isn't run here.)
- cloud-init bootcmd/runcmdmedium · in-browser
Write /home/player/user-data (#cloud-config) with a bootcmd and a runcmd that enables nginx.
(Authored config, graded structurally — the engine isn't run here.)
- deb822 sources for Docker CEmedium · in-browser
Write /etc/apt/sources.list.d/docker.sources in deb822 format with the fields: Types deb, URIs https://download.docker.com/linux/ubuntu, Suites noble, Components stable, Architectures amd64, and Signed-By /etc/apt/keyrings/docker.asc. One Key: value per line.
(Authored config, graded structurally — the engine isn't run here.)
- fstab bind mountmedium · in-browser
Write /home/player/fstab.line: an /etc/fstab bind mount of /srv/data onto /var/www/data (options bind, dump 0, pass 0).
(Authored config, graded structurally — the engine isn't run here.)
- netplan DNS search domainsmedium · in-browser
Write /home/player/55-dns.yaml: a netplan v2 config for eth0 using dhcp4: true but overriding DNS — set dhcp4-overrides.use-dns to false, and add a nameservers: block with search domain corp.example.com and addresses 8.8.8.8 and 8.8.4.4.
(Authored config, graded structurally — the engine isn't run here.)
- netplan Linux bridgemedium · in-browser
Write /home/player/70-bridge.yaml: a netplan v2 config with renderer networkd, an ethernet eth0 set to dhcp4: false, and a bridge br0 that enslaves eth0 (interfaces: [eth0]) and obtains its address via dhcp4: true.
(Authored config, graded structurally — the engine isn't run here.)
- netplan Wi-Fi clientmedium · in-browser
Write /home/player/80-wifi.yaml: a netplan v2 config with a wifis: section for interface wlan0 using dhcp4: true, and an access-points: mapping containing the SSID MyHomeNet with its password s3cr3tpass.
(Authored config, graded structurally — the engine isn't run here.)
- netplan static IPmedium · in-browser
Write /home/player/01-static.yaml: netplan v2, eth0 with static address 192.168.1.50/24, gateway 192.168.1.1, nameserver 1.1.1.1.
(Authored config, graded structurally — the engine isn't run here.)
- netplan static routesmedium · in-browser
Write /home/player/60-routes.yaml: a netplan v2 config for interface eth0 with dhcp4 disabled and a single static route sending traffic for 10.20.0.0/16 via the gateway 10.0.5.1 with metric 100. Put the route under a routes: list on eth0 using to:/via:/metric: keys.
(Authored config, graded structurally — the engine isn't run here.)
- systemd-networkd DHCPmedium · in-browser
Write /home/player/10-eth0.network: a systemd-networkd unit matching eth0 with DHCP=yes.
(Authored config, graded structurally — the engine isn't run here.)
- systemd-networkd static IPmedium · in-browser
Write /etc/systemd/network/20-wired.network: a systemd-networkd unit with a [Match] section selecting Name=enp1s0, and a [Network] section setting Address=192.0.2.10/24, Gateway=192.0.2.1, and DNS=9.9.9.9.
(Authored config, graded structurally — the engine isn't run here.)
- AppArmor profile skeletonpro · in-browser
Write /home/player/usr.bin.myapp: an AppArmor profile for /usr/bin/myapp including #include <tunables/global> and a capability rule, in enforce/complain header.
(Authored config, graded structurally — the engine isn't run here.)
- Author a ufw application profilepro · in-browser
Write /etc/ufw/applications.d/myapp, a ufw application profile in INI format. It must have a section header [MyApp], a title= line, a description= line, and a ports= line opening 8080 and 8443/tcp.
(Authored config, graded structurally — the engine isn't run here.)
- Author apt sources for jammypro
Write /home/player/jammy.list: classic apt sources for Ubuntu 22.04 (jammy) — the main archive plus jammy-updates and jammy-security, each enabling components main restricted universe multiverse over http(s).
- Tune GRUB defaultspro · in-browser
Write /home/player/grub: set GRUB_TIMEOUT=3 and add `quiet splash` to GRUB_CMDLINE_LINUX_DEFAULT.
(Authored config, graded structurally — the engine isn't run here.)
- cloud-init admin userpro · in-browser
Write /home/player/user-data, a cloud-config that creates a login user. The first line must be #cloud-config. Add a top-level users: list with one entry named deploy that has passwordless sudo (sudo: ALL=(ALL) NOPASSWD:ALL), is in the docker group, and uses /bin/bash as its shell.
(Authored config, graded structurally — the engine isn't run here.)
- cloud-init apt + packagespro · in-browser
Write /home/player/user-data: a #cloud-config that runs package_update, installs packages [nginx, git], and adds a user 'web' with sudo.
(Authored config, graded structurally — the engine isn't run here.)
- deb822 apt sourcespro · in-browser
Write /home/player/ubuntu.sources in deb822 format: Types deb, URIs the Ubuntu archive, Suites jammy jammy-updates, Components main universe, with a Signed-By keyring path.
(Authored config, graded structurally — the engine isn't run here.)
- netplan VLANpro · in-browser
Write /home/player/02-vlan.yaml: netplan v2 with vlan vlan100 id 100 on link eth0.
(Authored config, graded structurally — the engine isn't run here.)
- netplan bondpro · in-browser
Write /home/player/01-bond.yaml: netplan v2 with a bond bond0 over eth0+eth1, mode active-backup.
(Authored config, graded structurally — the engine isn't run here.)