From deee222ad2dd55487252d4adc9420f09416ec515 Mon Sep 17 00:00:00 2001 From: Ana Hobden Date: Fri, 23 Dec 2022 13:24:06 -0800 Subject: [PATCH] Fix ubuntu 16.04 support (#140) * Fix ubuntu 16.04 support * Format * Correct env settings * Rearrange plan a bit --- nix/tests/vm-test/default.nix | 11 ++++++----- src/action/base/mod.rs | 16 ++++++++-------- src/action/common/configure_nix.rs | 6 ++++-- .../configure_nix_daemon_service.rs | 2 +- src/action/common/mod.rs | 16 +++++++++------- src/action/darwin/mod.rs | 16 ++++++++-------- src/action/linux/mod.rs | 4 +--- src/action/mod.rs | 4 ++-- src/cli/mod.rs | 16 ++++++++++------ src/planner/linux/multi.rs | 5 ----- src/planner/linux/steam_deck.rs | 4 ---- 11 files changed, 49 insertions(+), 51 deletions(-) rename src/action/{linux => common}/configure_nix_daemon_service.rs (99%) diff --git a/nix/tests/vm-test/default.nix b/nix/tests/vm-test/default.nix index b9cda29..24fc4dc 100644 --- a/nix/tests/vm-test/default.nix +++ b/nix/tests/vm-test/default.nix @@ -17,6 +17,7 @@ let images = { # End of standard support https://wiki.ubuntu.com/Releases + # No systemd /* "ubuntu-v14_04" = { image = import { @@ -29,15 +30,14 @@ let */ # End of standard support https://wiki.ubuntu.com/Releases - /* "ubuntu-v16_04" = { + "ubuntu-v16_04" = { image = import { - url = "https://app.vagrantup.com/generic/boxes/ubuntu1604/versions/4.1.12/providers/libvirt.box"; - hash = "sha256-lO4oYQR2tCh5auxAYe6bPOgEqOgv3Y3GC1QM1tEEEU8="; + url = "https://app.vagrantup.com/generic/boxes/ubuntu1604/versions/4.1.12/providers/libvirt.box"; + hash = "sha256-lO4oYQR2tCh5auxAYe6bPOgEqOgv3Y3GC1QM1tEEEU8="; }; rootDisk = "box.img"; system = "x86_64-linux"; - }; - */ + }; "ubuntu-v22_04" = { image = import { @@ -67,6 +67,7 @@ let hash = "sha256-QwzbvRoRRGqUCQptM7X/InRWFSP2sqwRt2HaaO6zBGM="; }; rootDisk = "box.img"; + postBoot = disableSELinux; system = "x86_64-linux"; }; */ diff --git a/src/action/base/mod.rs b/src/action/base/mod.rs index a889544..19d6a11 100644 --- a/src/action/base/mod.rs +++ b/src/action/base/mod.rs @@ -1,13 +1,13 @@ //! Base [`Action`](crate::action::Action)s that themselves have no other actions as dependencies -mod create_directory; -mod create_file; -mod create_group; -mod create_or_append_file; -mod create_user; -mod fetch_and_unpack_nix; -mod move_unpacked_nix; -mod setup_default_profile; +pub(crate) mod create_directory; +pub(crate) mod create_file; +pub(crate) mod create_group; +pub(crate) mod create_or_append_file; +pub(crate) mod create_user; +pub(crate) mod fetch_and_unpack_nix; +pub(crate) mod move_unpacked_nix; +pub(crate) mod setup_default_profile; pub use create_directory::CreateDirectory; pub use create_file::CreateFile; diff --git a/src/action/common/configure_nix.rs b/src/action/common/configure_nix.rs index 7a53488..fa10bf8 100644 --- a/src/action/common/configure_nix.rs +++ b/src/action/common/configure_nix.rs @@ -1,8 +1,10 @@ use crate::{ action::{ base::SetupDefaultProfile, - common::{ConfigureShellProfile, PlaceChannelConfiguration, PlaceNixConfiguration}, - linux::ConfigureNixDaemonService, + common::{ + ConfigureNixDaemonService, ConfigureShellProfile, PlaceChannelConfiguration, + PlaceNixConfiguration, + }, Action, ActionDescription, ActionError, StatefulAction, }, channel_value::ChannelValue, diff --git a/src/action/linux/configure_nix_daemon_service.rs b/src/action/common/configure_nix_daemon_service.rs similarity index 99% rename from src/action/linux/configure_nix_daemon_service.rs rename to src/action/common/configure_nix_daemon_service.rs index edaead6..57ab7bf 100644 --- a/src/action/linux/configure_nix_daemon_service.rs +++ b/src/action/common/configure_nix_daemon_service.rs @@ -156,7 +156,7 @@ impl Action for ConfigureNixDaemonService { .process_group(0) .arg("enable") .arg("--now") - .arg("nix-daemon.socket"), + .arg(SOCKET_SRC), ) .await .map_err(ActionError::Command)?; diff --git a/src/action/common/mod.rs b/src/action/common/mod.rs index 5e6a284..48dd904 100644 --- a/src/action/common/mod.rs +++ b/src/action/common/mod.rs @@ -1,14 +1,16 @@ //! [`Action`](crate::action::Action)s which only call other base plugins -mod configure_nix; -mod configure_shell_profile; -mod create_nix_tree; -mod create_users_and_groups; -mod place_channel_configuration; -mod place_nix_configuration; -mod provision_nix; +pub(crate) mod configure_nix; +pub(crate) mod configure_nix_daemon_service; +pub(crate) mod configure_shell_profile; +pub(crate) mod create_nix_tree; +pub(crate) mod create_users_and_groups; +pub(crate) mod place_channel_configuration; +pub(crate) mod place_nix_configuration; +pub(crate) mod provision_nix; pub use configure_nix::ConfigureNix; +pub use configure_nix_daemon_service::{ConfigureNixDaemonService, ConfigureNixDaemonServiceError}; pub use configure_shell_profile::ConfigureShellProfile; pub use create_nix_tree::CreateNixTree; pub use create_users_and_groups::CreateUsersAndGroups; diff --git a/src/action/darwin/mod.rs b/src/action/darwin/mod.rs index b8a2e06..799ef8d 100644 --- a/src/action/darwin/mod.rs +++ b/src/action/darwin/mod.rs @@ -1,14 +1,14 @@ /*! [`Action`](crate::action::Action)s for Darwin based systems */ -mod bootstrap_apfs_volume; -mod create_apfs_volume; -mod create_nix_volume; -mod create_synthetic_objects; -mod enable_ownership; -mod encrypt_apfs_volume; -mod kickstart_launchctl_service; -mod unmount_apfs_volume; +pub(crate) mod bootstrap_apfs_volume; +pub(crate) mod create_apfs_volume; +pub(crate) mod create_nix_volume; +pub(crate) mod create_synthetic_objects; +pub(crate) mod enable_ownership; +pub(crate) mod encrypt_apfs_volume; +pub(crate) mod kickstart_launchctl_service; +pub(crate) mod unmount_apfs_volume; pub use bootstrap_apfs_volume::{BootstrapApfsVolume, BootstrapVolumeError}; pub use create_apfs_volume::{CreateApfsVolume, CreateVolumeError}; diff --git a/src/action/linux/mod.rs b/src/action/linux/mod.rs index 55a3767..cdd4b80 100644 --- a/src/action/linux/mod.rs +++ b/src/action/linux/mod.rs @@ -1,5 +1,3 @@ -mod configure_nix_daemon_service; -mod start_systemd_unit; +pub(crate) mod start_systemd_unit; -pub use configure_nix_daemon_service::{ConfigureNixDaemonService, ConfigureNixDaemonServiceError}; pub use start_systemd_unit::{StartSystemdUnit, StartSystemdUnitError}; diff --git a/src/action/mod.rs b/src/action/mod.rs index f92626b..5c2b39b 100644 --- a/src/action/mod.rs +++ b/src/action/mod.rs @@ -32,8 +32,8 @@ action.try_revert().await.unwrap(); ``` A general guidance for what determines how fine-grained an [`Action`] should be is the unit of -reversion. The [`ConfigureNixDaemonService`](linux::ConfigureNixDaemonService) action is a good -example of this,it takes several steps, such as running `systemd-tmpfiles`, and calling +reversion. The [`ConfigureNixDaemonService`](common::ConfigureNixDaemonService) action is a good +example of this, it takes several steps, such as running `systemd-tmpfiles`, and calling `systemctl link` on some systemd units. Where possible, tasks which could break during execution should be broken up, as uninstalling/installing diff --git a/src/cli/mod.rs b/src/cli/mod.rs index e1c65d6..133473e 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -99,7 +99,7 @@ pub fn ensure_root() -> eyre::Result<()> { arg_vec_cstring.push(sudo_cstring.clone()); let mut preserve_env_list = vec![]; - for (key, _value) in std::env::vars() { + for (key, value) in std::env::vars() { let preserve = match key.as_str() { // Rust logging/backtrace bits we use "RUST_LOG" | "RUST_BACKTRACE" => true, @@ -110,15 +110,19 @@ pub fn ensure_root() -> eyre::Result<()> { _ => false, }; if preserve { - preserve_env_list.push(key); + preserve_env_list.push(format!("{key}={value}")); } } if !preserve_env_list.is_empty() { - arg_vec_cstring.push( - CString::new(format!("--preserve-env={}", preserve_env_list.join(","))) - .wrap_err("Building a `--preserve-env` argument for `sudo`")?, - ); + arg_vec_cstring + .push(CString::new("env").wrap_err("Building a `env` argument for `sudo`")?); + for env in preserve_env_list { + arg_vec_cstring.push( + CString::new(env.clone()) + .wrap_err_with(|| format!("Building a `{}` argument for `sudo`", env))?, + ); + } } for arg in args { diff --git a/src/planner/linux/multi.rs b/src/planner/linux/multi.rs index 52c78fd..df84424 100644 --- a/src/planner/linux/multi.rs +++ b/src/planner/linux/multi.rs @@ -2,7 +2,6 @@ use crate::{ action::{ base::CreateDirectory, common::{ConfigureNix, ProvisionNix}, - linux::StartSystemdUnit, StatefulAction, }, planner::{Planner, PlannerError}, @@ -78,10 +77,6 @@ impl Planner for LinuxMulti { .await .map_err(PlannerError::Action)? .boxed(), - StartSystemdUnit::plan("nix-daemon.socket".to_string()) - .await - .map_err(|v| PlannerError::Action(v.into()))? - .boxed(), ]) } diff --git a/src/planner/linux/steam_deck.rs b/src/planner/linux/steam_deck.rs index 0eeffc5..60abd29 100644 --- a/src/planner/linux/steam_deck.rs +++ b/src/planner/linux/steam_deck.rs @@ -223,10 +223,6 @@ impl Planner for SteamDeck { .await .map_err(PlannerError::Action)? .boxed(), - StartSystemdUnit::plan("nix-daemon.socket".to_string()) - .await - .map_err(PlannerError::Action)? - .boxed(), ]) }