Git Product home page Git Product logo

rwfus's Introduction

Rwfus: Read-Write OverlayFS for your Steam Deck!


Like a vinyl couch cover for your filesystem, Rwfus covers your Deck's /usr/ directory (and some others) allowing you to initialize and use* pacman (the Arch Linux package manager) on the Steam Deck without losing packages when the next update comes out.

Directories covered in a default installation:

Directory Contents
/etc/pacman.d pacman configuration
/usr Programs and libraries
/var/cache/pacman Package cache
/var/lib/pacman Package metadata

* Jank warning

Due to the way Valve's firmware updates work, doing pacman -S[y[y]]u at any time will lead to complications when the next firmware update is installed. I highly advise avoiding -Su, -Syu, and -Syyu altogether on a Steam Deck with read-only rootfs. It may lead to bad behavior.

Rwfus is, right now, a proof of concept (hence the 0.x version number, and being written in Bash.) I made it to install a couple user-mode packages (nano-syntax-highlighting and yakuake specifically.) It is not production-ready software, and in using Rwfus, you accept that I am not liable if your Deck catches fire.

Rwfus will allow you to install any package, but not everything will let your Deck survive an update. In particular, glibc will crash your Deck after an update, requiring the SteamOS recovery image and some knowledge of Linux and/or Rwfus' internals to fix.

Installation:

  1. git clone https://github.com/ValShaped/rwfus.git
  2. cd rwfus
  3. ./rwfus -iI

Then you're all set! Remember to periodically run pacman -Sy to update your repos

Usage:

Rwfus v0.4.1
Carry Pacman across SteamOS updates!

USAGE:
    ./rwfus [FLAGS] [OPTIONS]

FLAGS:
    -h, --help          Show this help text, then exit
    -v, --version       Show the version number, then exit

    -i, --install*      Install Rwfus
    -u, --update*       Re-generate systemd service files, without touching data
    -r, --remove*       Remove ALL FILES AND DIRECTORIES associated with Rwfus

    -e, --enable*       Activate overlays
    -d, --disable*      Deactivate overlays
    -s, --status        Get the status of the overlay-mounter and disk image

        --mount*        Mount Rwfus's disk image
        --umount*       Unmount Rwfus's disk image

    -I, --install-bin*  Put ./rwfus into a [...]/usr/local/bin folder
    -R, --remove-bin*   Remove Rwfus from a [...]/usr/local/bin folder

    -t, --test          Use fake directory targets when performing operations
    -g, --gen-config    Generate a sample config file, which you can use to customize your install

    * flags marked with a star require root, unless the --test flag is set.

    OPTIONS:
    -l, --logfile <path>    Specify the location of Rwfus's log file
                                Default: /var/log/rwfus.log (where X is random)
    -c, --config <path>     Specify a configuration file to use
                                Default: /opt/rwfus/
        --backup <dest>*    Backup Rwfus's disk image to (file path) <dest>
        --restore <src>*    Restore Rwfus's disk image from (file path) <src>

    * options marked with a star require root, unless the --test flag is set.

Examples:

rwfus: Get status

rwfus --install: Install Rwfus

rwfus --update: Update Rwfus's scripts

rwfus --remove: Remove Rwfus, including the pacman keyring and all installed pacman packages

rwfus --gen-config: Generate a sample config file in your present working directory

rwfus --config ./rwfus.conf: Use a config file called rwfus.conf when setting up Rwfus

rwfus --install-bin: Install Rwfus into the overlaid /usr/local/bin folder, so you can configure Rwfus from anywhere!

rwfus --install --install-bin will do the above, with a fresh install, in a single command!

rwfus's People

Contributors

valshaped avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

rwfus's Issues

Sane default behavior when rwfus is installed

Running rwfus without any parameters will currently attempt to install rwfus again. This is great for a first install, but it may be undesired behavior if rwfus is already installed.

TODO: If run without options:

  1. Check if rwfus is installed in the default location, or if a config file is passed in, check there.
  2. If installed, print the status of rwfus unit files
  3. Else, ask if it's alright to install rwfus to the default location, and get user confirmation
  4. sudo $0 --install --logfile "$Logfile" $@ (is this sane?)

Pacman db and cache invalid after update

When updating the Deck, Valve swaps out the entire filesystem and pacman dbs for new ones. This very much makes pacman freak out.

TODO: What?
TODO: Why?
TODO: What can we do about it?

Add --backup and --restore operations

Squish the Rwfus basedir (default /home/.rwfus) into a tarball, and unsquish a tarball onto the Rwfus basedir

Syntax:

rwfus --restore /path/to/backup.tar
rwfus --backup /path/to/backup.tar

It's not working.

(1)(deck@steamdeck ~)$ git clone https://github.com/ValShaped/rwfus.git

./rwfus -iI
Cloning into 'rwfus'...
remote: Enumerating objects: 678, done.
remote: Counting objects: 100% (37/37), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 678 (delta 15), reused 19 (delta 13), pack-reused 641
Receiving objects: 100% (678/678), 965.28 KiB | 2.31 MiB/s, done.
Resolving deltas: 100% (442/442), done.
This command must be performed as root
[sudo] password for deck: 
Creating overlays for /usr /etc/pacman.d /var/lib/pacman /var/cache/pacman:
1. Creating directories...
2. Generating disk image...
3. Generating service...
4. Storing configuration...
5. Copying service to /etc/systemd/system
6. Enabling service unit
Error when enabling service. See /var/log/rwfus.log for information.
× rwfusd.service - Rwfus: Carry Pacman across SteamOS updates!
     Loaded: loaded (/etc/systemd/system/rwfusd.service; enabled; preset: disabled)
     Active: failed (Result: exit-code) since Sat 2024-02-24 19:56:43 AST; 62ms ago
    Process: 42492 ExecStart=/opt/rwfus/service/rwfusd.sh --start (code=exited, status=1/FAILURE)
   Main PID: 42492 (code=exited, status=1/FAILURE)
        CPU: 179ms
Adding Rwfus to /home/.steamos/offload/usr/local/bin
Unmasking and enabling usr-local.mount
Done!

Log saved to /var/log/rwfus.log
(deck@steamdeck rwfus)$ cat /var/log/rwfus.log

Rwfus v0.4.2 
Carry Pacman across SteamOS updates!

Rwfus directory: /opt/rwfus
Unit Storage directory: /opt/rwfus/service
Systemd directory: /etc/systemd/system

./rwfus -iI
Loading config file /etc/opt/rwfus.conf
/etc/opt/rwfus.conf not found
Creating overlays for /usr /etc/pacman.d /var/lib/pacman /var/cache/pacman:
1. Creating directories...
mkdir: created directory '/opt/rwfus'
mkdir: created directory '/opt/rwfus/service'
mkdir: created directory '/opt/rwfus/mount'
2. Generating disk image...
btrfs-progs v6.3.1
See https://btrfs.readthedocs.io for more information.

NOTE: several default settings have changed in version 5.15, please make sure
      this does not affect your deployments:
      - DUP for metadata (-m dup)
      - enabled no-holes (-O no-holes)
      - enabled free-space-tree (-R free-space-tree)

Label:              Rwfus
UUID:               3c9f605c-9fb0-470d-8f8f-9b38bc0949a1
Node size:          4096
Sector size:        4096
Filesystem size:    8.00GiB
Block group profiles:
  Data+Metadata:    single            8.00MiB
  System:           single            4.00MiB
SSD detected:       no
Zoned device:       no
Incompat features:  mixed-bg, extref, skinny-metadata, no-holes, free-space-tree
Runtime features:   free-space-tree
Checksum:           crc32c
Number of devices:  1
Devices:
   ID        SIZE  PATH
    1     8.00GiB  /opt/rwfus/rwfus.btrfs

mount: /dev/loop0 mounted on /opt/rwfus/mount.
Resize device id 1 (/dev/loop0) from 8.00GiB to max
mkdir: created directory '/opt/rwfus/mount/upper'
mkdir: created directory '/opt/rwfus/mount/upper/usr'
mkdir: created directory '/opt/rwfus/mount/work'
mkdir: created directory '/opt/rwfus/mount/work/usr'
mkdir: created directory '/opt/rwfus/mount/upper/etc-pacman.d'
mkdir: created directory '/opt/rwfus/mount/work/etc-pacman.d'
mkdir: created directory '/opt/rwfus/mount/upper/var-lib-pacman'
mkdir: created directory '/opt/rwfus/mount/work/var-lib-pacman'
mkdir: created directory '/opt/rwfus/mount/upper/var-cache-pacman'
mkdir: created directory '/opt/rwfus/mount/work/var-cache-pacman'
umount: /home/.steamos/offload/opt/rwfus/mount (/dev/loop0) unmounted
3. Generating service...
Generating service rwfusd
  script /opt/rwfus/service/rwfusd.sh
  unit   /opt/rwfus/service/rwfusd.service
4. Storing configuration...
Storing config file to /etc/opt/rwfus.conf...
-rw-r--r-- 1 root root 1067 Feb 24 19:56 /etc/opt/rwfus.conf
5. Copying service to /etc/systemd/system
'/opt/rwfus/service/rwfusd.service' -> '/etc/systemd/system/rwfusd.service'
6. Enabling service unit
Created symlink /etc/systemd/system/multi-user.target.wants/rwfusd.service → /etc/systemd/system/rwfusd.service.
Job for rwfusd.service failed because the control process exited with error code.
See "systemctl status rwfusd.service" and "journalctl -xeu rwfusd.service" for details.
Error when enabling service. See /var/log/rwfus.log for information.
Loading config file /etc/opt/rwfus.conf
> Base_Directory: "/opt/rwfus"
> Directories: "/usr /etc/pacman.d /var/lib/pacman /var/cache/pacman"
> Stop_Units: "var-cache-pacman.mount"
> Mask_Units: "pacman-cleanup.service"
> Restart_Units: "usr-local.mount polkit.service"
> Mount_Options: "loop,compress"
> Systemd_Directory: "/etc/systemd/system"
Adding Rwfus to /home/.steamos/offload/usr/local/bin
cp: cannot create directory '/home/.steamos/offload/usr/local/bin/': No such file or directory
'./rwfus' -> '/home/.steamos/offload/usr/local/bin/'
cp: cannot create regular file '/home/.steamos/offload/usr/local/bin/': No such file or directory
Unmasking and enabling usr-local.mount
Removed "/etc/systemd/system/usr-local.mount".
Failed to enable unit: Unit file usr-local.mount does not exist.
Done!

(deck@steamdeck rwfus)$ ```

Decky-Loader plugin for controlling Rwfus?

Create a Decky-Loader plugin that:

  1. Has buttons for installing, activating/deactivating, and removing Rwfus
  2. Displays the currently active and inactive mount points
  3. Integrate with Rwfus 0.4.0 backup functionality

Question: reinstallation without breaking

Is it possible to reinstall rwfus without breaking it? By that I mean without losing data inside the image.

Use case: I have done the default installation with the default directories, but now I want to add another directory to the image.

Is it possible ? Can I just do rwfus --install /my/other/path or do I also need to append the default paths also so that I don't lose those paths ? Or is it just not doable for now ? I want to ask before doing anything on my device.

Incompatible with SteamOS 3.5 ('jupiter-main')

Summary

SteamOS 3.5 moved the pacman database from /var/lib/pacman to /usr/lib/holo/pacmandb.
3.5 has support for the Nix package manager, which covers most, but not all of Rwfus' use-cases, and is reliable.
Due to Rwfus' continued usage, I've decided to continue supporting it into the future.

Prerelease 0.5.0.b1 has support for SteamOS 3.5, but drops support for SteamOS 3.4 at the moment.

Original message:

SteamOS 3.5 removes /var/lib/pacman from the base image, which breaks rwfus' default config.

Since SteamOS 3.5 also adds support for installing the nix package manager, I'm unsure whether to support Rwfus going forward. Nix has most packages that aren't available as a flatpak, and provides consistent dependency management irrespective of the base system, which absolutely is not the case with Rwfus.

polkit.service needs to be restarted after installation

If you have anything that installs polkit actions in /usr/share/polkit-1/actions/ then polkit.service needs to be restarted to pick those changes up.

I haven't checked the boot order yet, but it may require a change to the systemctl files as well.

My use case was I tried to install 1Password and have it use system unlock (e.g., polkit) and it wouldn't see the action. Since I just learned about polkit today, this took a while to debug. ;-)

not working??

i went through the whole installation and got this error. is this normal??
image

Under SteamOS 3.4.11, there is not enough space in /etc to reinstall plasma.

Under SteamOS 3.4.11, I hope to reinstall plasma like this to get the complete language pack, but after installing rwfus, the installation prompt prompts that /etc does not have enough space to reinstall plasma.

$ sudo pacman -S plasma 
... 
error: Partition /etc too full: 11772 blocks needed, 11771 blocks free 
error: not enough free disk space 
error: failed to commit transaction (not enough free disk space) 
Errors occurred, no packages were upgraded. 

Use SteamOS Btrfs subvolumes instead of creating a disk image file

Hey,

Great project. Was reading the recent changes, and the current code creates a BTRFS formatted disk image file to store all the overlayfs changes. That is a nice solution for users of the default Steam OS formatted home. However, for people using SteamOS BTRFS could it be possible to support using direct subvolumes on the home partition instead. Would you accept a PR for this?

Incompatibility with SteamOS Btrfs

When both SteamOS Btrfs and Rwfus are installed, and a user attempts to install one of a number of rootfs-modifying shell scripts or pacman packages, the Deck may fail to boot, claiming not to find an ext4 partition.

When Rwfus is installed, and a user attempts to reinstall or update SteamOS Btrfs, the install script will fail after updating packages and erroneously revert /etc/fstab to stock. After /home has been converted, this is fatal for the Deck, and recovery requires modifying /var/lib/overlay/etc/upper/fstab to mount home as btrfs

Status: Under investigation

Affected projects:

Installation with Base_Directory on SD card fails

(deck@steamdeck rootfs)$ mount | grep mmc
/dev/mmcblk0p1 on /run/media/mmcblk0p1 type ext4 (rw,noatime)

Instead of relying on what rwfus does in $HOME why not allow the overlay files to be on an external device?

Query individual unit files

Query individual unit files' status, by path or unit name,

Syntax:

rwfus --status var-lib-pacman.mount
rwfus --status var-lib-pacman
rwfus --status /var/lib/pacman

[Question] Best way to downgrade a package back to stock root

Sometimes you may find yourself testing a newer version of a package already included in the read only root, but then wish to return to the default.

If you pacman -R the package, it will be gone from the overlay but also from the package database. This means while the files are still present in root, pacman no longer knows they are installed.

How to best remedy this? The only obvious way I see is to use --dbonly to register the installed stock package in the db. But then I need to make sure that the repos match the stock packages, i.e. edit pacman.conf to match the update channel I'm on.

Actually, does the overlay remember that the files were removed? Then I also need to somehow tell it to restore the files from the lower dir. I have no idea how to do that.

The stock pacman.conf doesn't seem to match the update channel. According to SteamOS settings I'm on "testing" but the repos are configured to be -rel (I deleted pacman.conf from the /etc overlay upper dir to get the stock file). I'm actually not sure which is which. The repo server has -rel, -main, -testing, -debug and -staging, but the update channels are called stable, beta and preview. So I'm kinda stuck.

Vital information missing from logfile

The logfiles contain a lot of information, but most of it is about the generation of unit files, rather than the activation of the unit files

TODO:
Figure out what commands can print more output (i.e. systemctl status)
Print more output

Causing Wine-TKG and NorthstarProton to instantly crash when installed

Not sure what's going on here quite yet. I was intending to use rwfus to allow LatencyFleX and vkBasalt on the Deck and ran into this issue.

A clean install of rwfus with no additional files added to the overlayed fs will cause Wine-TKG and NorthstarProton to crash. Here's a log file via PROTON_LOG=1. This is reproducible and is resolved simply by uninstalling rwfus.

I am using a copy of SteamOS with Phillip Richter's BTRFS payload and no other changes.

Fails on New Deck Update SteamOS 3.5.5

I have noticed that a lot of things have stopped working since last night's SteamOS 3.5.5 Update

Seems I cannot re-install anything now either
(This is on top of PACMAN corrupt/Untrusted Keys from publishers of like every major dependency)

(deck@steamdeck rwfus)$ sudo ./rwfus -i
Creating overlays for /usr /etc/pacman.d /var/lib/pacman /var/cache/pacman:
0. Disabling service

  1. Creating directories...
  2. Updating disk image...
  3. Generating service...
  4. Storing configuration...
  5. Copying service to /etc/systemd/system
  6. Enabling service unit
    Error when enabling service. See /var/log/rwfus.log for information.
    × rwfusd.service - Rwfus: Carry Pacman across SteamOS updates!
    Loaded: loaded (/etc/systemd/system/rwfusd.service; enabled; preset: disabled)
    Active: failed (Result: exit-code) since Fri 2023-11-17 10:50:41 PST; 52ms ago
    Process: 18221 ExecStart=/opt/rwfus/service/rwfusd.sh --start (code=exited, status=1/FAILURE)
    Main PID: 18221 (code=exited, status=1/FAILURE)
    CPU: 135ms
    Log saved to /var/log/rwfus.log

usr-local.mount removed in SteamOS 3.5 (Error when enabling service)

So I just upgraded my SteamOS to 3.5 (Preview) and then tried to install rwfus:

(130)(deck@steamdeck rwfus)$ ./rwfus -iI
This command must be performed as root
[sudo] password for deck: 
Creating overlays for /usr /etc/pacman.d /var/lib/pacman /var/cache/pacman:
0. Disabling service
1. Creating directories...
2. Updating disk image...
3. Generating service...
4. Storing configuration...
5. Copying service to /etc/systemd/system
6. Enabling service unit
Error when enabling service. See /var/log/rwfus.log for information.
× rwfusd.service - Rwfus: Carry Pacman across SteamOS updates!
     Loaded: loaded (/etc/systemd/system/rwfusd.service; enabled; preset: disabled)
     Active: failed (Result: exit-code) since Sat 2023-10-07 14:01:46 CEST; 62ms ago
    Process: 22908 ExecStart=/opt/rwfus/service/rwfusd.sh --start (code=exited, status=1/FAILURE)
   Main PID: 22908 (code=exited, status=1/FAILURE)
        CPU: 160ms
Adding Rwfus to /home/.steamos/offload/usr/local/bin
Unmasking and enabling usr-local.mount
Done!

Log saved to /var/log/rwfus.log
Rwfus v0.4.2 
Carry Pacman across SteamOS updates!

Rwfus directory: /opt/rwfus
Unit Storage directory: /opt/rwfus/service
Systemd directory: /etc/systemd/system

./rwfus -iI
Loading config file /etc/opt/rwfus.conf
> Base_Directory: "/opt/rwfus"
> Directories: "/usr /etc/pacman.d /var/lib/pacman /var/cache/pacman"
> Stop_Units: "var-cache-pacman.mount"
> Mask_Units: "pacman-cleanup.service"
> Restart_Units: "usr-local.mount"
> Mount_Options: "loop,compress"
> Systemd_Directory: "/etc/systemd/system"
Creating overlays for /usr /etc/pacman.d /var/lib/pacman /var/cache/pacman:
0. Disabling service
Removed "/etc/systemd/system/multi-user.target.wants/rwfusd.service".
# It's okay if unmounting fails here #
umount: /usr: not mounted.
umount: /etc/pacman.d: not mounted.
umount: /var/lib/pacman: no mount point specified.
umount: /var/cache/pacman: not mounted.
umount: /opt/rwfus/rwfus.btrfs: not mounted.
1. Creating directories...
2. Updating disk image...
mount: /dev/loop0 mounted on /opt/rwfus/mount.
Resize device id 1 (/dev/loop0) from 8.00GiB to max
umount: /home/.steamos/offload/opt/rwfus/mount (/dev/loop0) unmounted
3. Generating service...
Generating service rwfusd
  script /opt/rwfus/service/rwfusd.sh
  unit   /opt/rwfus/service/rwfusd.service
4. Storing configuration...
Storing config file to /etc/opt/rwfus.conf...
-rw-r--r-- 1 root root 1052 Oct  7 13:53 /etc/opt/rwfus.conf
5. Copying service to /etc/systemd/system
'/opt/rwfus/service/rwfusd.service' -> '/etc/systemd/system/rwfusd.service'
6. Enabling service unit
Created symlink /etc/systemd/system/multi-user.target.wants/rwfusd.service → /etc/systemd/system/rwfusd.service.
Job for rwfusd.service failed because the control process exited with error code.
See "systemctl status rwfusd.service" and "journalctl -xeu rwfusd.service" for details.
Error when enabling service. See /var/log/rwfus.log for information.
Adding Rwfus to /home/.steamos/offload/usr/local/bin
'./rwfus_include/config.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/config.sh'
'./rwfus_include/disk.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/disk.sh'
'./rwfus_include/info.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/info.sh'
'./rwfus_include/manage-install.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/manage-install.sh'
'./rwfus_include/service-main.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/service-main.sh'
'./rwfus_include/service.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/service.sh'
'./rwfus_include/testlog.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/testlog.sh'
'./rwfus' -> '/home/.steamos/offload/usr/local/bin/rwfus'
Unmasking and enabling usr-local.mount
Unit usr-local.mount does not exist, proceeding anyway.
Failed to enable unit: Unit file usr-local.mount does not exist.
Done!
(deck@steamdeck rwfus)$ systemctl status rwfusd.service
× rwfusd.service - Rwfus: Carry Pacman across SteamOS updates!
     Loaded: loaded (/etc/systemd/system/rwfusd.service; enabled; preset: disabled)
     Active: failed (Result: exit-code) since Sat 2023-10-07 14:01:46 CEST; 36s ago
   Main PID: 22908 (code=exited, status=1/FAILURE)
        CPU: 160ms

Oct 07 14:01:46 steamdeck rwfusd.sh[22908]:   lowerdir /var/lib/pacman not found. Aborting.
Oct 07 14:01:46 steamdeck rwfusd.sh[23025]: umount: /usr (overlay) unmounted
Oct 07 14:01:46 steamdeck rwfusd.sh[23026]: umount: /etc/pacman.d (overlay) unmounted
Oct 07 14:01:46 steamdeck rwfusd.sh[23027]: umount: /var/lib/pacman: no mount point specified.
Oct 07 14:01:46 steamdeck rwfusd.sh[23028]: umount: /var/cache/pacman: not mounted.
Oct 07 14:01:46 steamdeck rwfusd.sh[23032]: umount: /home/.steamos/offload/opt/rwfus/mount (/dev/loop0) unmounted
Oct 07 14:01:46 steamdeck rwfusd.sh[22908]: start usr-local.mount
Oct 07 14:01:46 steamdeck systemd[1]: rwfusd.service: Main process exited, code=exited, status=1/FAILURE
Oct 07 14:01:46 steamdeck systemd[1]: rwfusd.service: Failed with result 'exit-code'.
Oct 07 14:01:46 steamdeck systemd[1]: Failed to start Rwfus: Carry Pacman across SteamOS updates!.
(3)(deck@steamdeck rwfus)$ journalctl -xeu rwfusd.service
Oct 07 14:01:44 steamdeck rwfusd.sh[22908]: stop var-cache-pacman.mount usr-local.mount
Oct 07 14:01:44 steamdeck rwfusd.sh[22908]: mask var-cache-pacman.mount pacman-cleanup.service
Oct 07 14:01:46 steamdeck rwfusd.sh[22999]: mount: /dev/loop0 mounted on /opt/rwfus/mount.
Oct 07 14:01:46 steamdeck rwfusd.sh[23018]: Resize device id 1 (/dev/loop0) from 8.00GiB to max
Oct 07 14:01:46 steamdeck rwfusd.sh[22908]: Creating overlay (/opt/rwfus/mount/upper/usr, /opt/rwfus/mount/work/usr) on /usr
Oct 07 14:01:46 steamdeck rwfusd.sh[23021]: mount: overlay mounted on /usr.
Oct 07 14:01:46 steamdeck rwfusd.sh[22908]: Successfully overlaid /opt/rwfus/mount/upper/usr on /usr
Oct 07 14:01:46 steamdeck rwfusd.sh[22908]: Creating overlay (/opt/rwfus/mount/upper/etc-pacman.d, /opt/rwfus/mount/work/etc-pacman.d) on /etc/pacman.d
Oct 07 14:01:46 steamdeck rwfusd.sh[23023]: mount: overlay mounted on /etc/pacman.d.
Oct 07 14:01:46 steamdeck rwfusd.sh[22908]: Successfully overlaid /opt/rwfus/mount/upper/etc-pacman.d on /etc/pacman.d
Oct 07 14:01:46 steamdeck rwfusd.sh[22908]: Creating overlay (/opt/rwfus/mount/upper/var-lib-pacman, /opt/rwfus/mount/work/var-lib-pacman) on /var/lib/pacman
Oct 07 14:01:46 steamdeck rwfusd.sh[22908]:   lowerdir /var/lib/pacman not found. Aborting.
Oct 07 14:01:46 steamdeck rwfusd.sh[23025]: umount: /usr (overlay) unmounted
Oct 07 14:01:46 steamdeck rwfusd.sh[23026]: umount: /etc/pacman.d (overlay) unmounted
Oct 07 14:01:46 steamdeck rwfusd.sh[23027]: umount: /var/lib/pacman: no mount point specified.
Oct 07 14:01:46 steamdeck rwfusd.sh[23028]: umount: /var/cache/pacman: not mounted.
Oct 07 14:01:46 steamdeck rwfusd.sh[23032]: umount: /home/.steamos/offload/opt/rwfus/mount (/dev/loop0) unmounted
Oct 07 14:01:46 steamdeck rwfusd.sh[22908]: start usr-local.mount
Oct 07 14:01:46 steamdeck systemd[1]: rwfusd.service: Main process exited, code=exited, status=1/FAILURE
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░ 
░░ An ExecStart= process belonging to unit rwfusd.service has exited.
░░ 
░░ The process' exit code is 'exited' and its exit status is 1.
Oct 07 14:01:46 steamdeck systemd[1]: rwfusd.service: Failed with result 'exit-code'.
░░ Subject: Unit failed
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░ 
░░ The unit rwfusd.service has entered the 'failed' state with result 'exit-code'.
Oct 07 14:01:46 steamdeck systemd[1]: Failed to start Rwfus: Carry Pacman across SteamOS updates!.
░░ Subject: A start job for unit rwfusd.service has failed
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░ 
░░ A start job for unit rwfusd.service has finished with a failure.
░░ 
░░ The job identifier is 5078 and the job result is failed.

Error Installing (or failed -t command) // Error in maxed Overlay FS

Following the instruccions, but I'm still not getting it installed:

❯ sudo rwfus -iI
Creating overlays for /usr /etc/pacman.d /var/lib/pacman /var/cache/pacman:
1. Creating directories...
2. Updating disk image...
3. Generating service...
4. Storing configuration...
5. Copying service to /etc/systemd/system
6. Enabling service unit
7. Setting up pacman...
Done!

● rwfusd.service - Rwfus: Carry Pacman across SteamOS updates!
     Loaded: loaded (/etc/systemd/system/rwfusd.service; enabled; preset: disabled)
     Active: active (exited) since Thu 2023-03-16 08:43:16 CET; 6s ago
    Process: 20611 ExecStart=/opt/rwfus/service/rwfusd.sh --start (code=exited, status=0/SUCCESS)
   Main PID: 20611 (code=exited, status=0/SUCCESS)
        CPU: 165ms
Stopping Rwfus
Adding Rwfus to /home/.steamos/offload/usr/local/bin
Unmasking and enabling usr-local.mount
Restarting Rwfus
Done!

Log saved to /var/log/rwfus.log
❯ sudo rwfus -t
Enabling test mode.
cf_Base_Directory: ./test/opt/rwfus
cf_Service_Directory: ./test/opt/rwfus/service
cf_Mount_Directory: ./test/opt/rwfus/mount
cf_Upper_Directory: ./test/opt/rwfus/mount/upper
cf_Work_Directory: ./test/opt/rwfus/mount/work
cf_Install_Directory: ./test/home/.steamos/offload/usr/local/bin
cf_Systemd_Directory: ./test/etc/systemd/system
cf_Disk_Image_Path: ./test/opt/rwfus/rwfus.btrfs
cf_Config_File: ./test/etc/opt/rwfus.conf
cf_Logfile: ./test/var/log/rwfus.log
Rwfus is not installed. Install it with `rwfus --install`

Cat the log:

Creating overlays for /usr /etc/pacman.d /var/lib/pacman /var/cache/pacman:
Removed "/etc/systemd/system/multi-user.target.wants/rwfusd.service".
1. Creating directories...
2. Updating disk image...
mount: /dev/loop0 mounted on /opt/rwfus/mount.
Resize device id 1 (/dev/loop0) from 8.00GiB to max
umount: /home/.steamos/offload/opt/rwfus/mount (/dev/loop0) unmounted
3. Generating service...
Generating service rwfusd
  script /opt/rwfus/service/rwfusd.sh
  unit   /opt/rwfus/service/rwfusd.service
4. Storing configuration...
Storing config file to /etc/opt/rwfus.conf...
-rw-r--r-- 1 root root 1144 Mar 16 08:43 /etc/opt/rwfus.conf
5. Copying service to /etc/systemd/system
'/opt/rwfus/service/rwfusd.service' -> '/etc/systemd/system/rwfusd.service'
6. Enabling service unit
Created symlink /etc/systemd/system/multi-user.target.wants/rwfusd.service → /etc/systemd/system/rwfusd.servic
e.
7. Setting up pacman...
==> Appending keys from archlinux.gpg...
==> Appending keys from holo.gpg...
==> Updating trust database...
gpg: next trustdb check due at 2023-04-21
:: Synchronizing package databases...
 jupiter-rel downloading...
 holo-rel downloading...
 core-rel downloading...
 extra-rel downloading...
 community-rel downloading...
 multilib-rel downloading...
Done!

Stopping Rwfus
Removed "/etc/systemd/system/multi-user.target.wants/rwfusd.service".
Adding Rwfus to /home/.steamos/offload/usr/local/bin
'/home/deck/bin/rwfus_include/config.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/config.sh'
'/home/deck/bin/rwfus_include/disk.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/disk.sh'
'/home/deck/bin/rwfus_include/info.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/info.sh'
'/home/deck/bin/rwfus_include/manage-install.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/manage
-install.sh'
'/home/deck/bin/rwfus_include/service-main.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/service-
main.sh'
'/home/deck/bin/rwfus_include/service.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/service.sh'
'/home/deck/bin/rwfus_include/testlog.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/testlog.sh'
removed '/home/.steamos/offload/usr/local/bin/rwfus'
'/home/deck/bin/rwfus' -> '/home/.steamos/offload/usr/local/bin/rwfus'
Unmasking and enabling usr-local.mount
Restarting Rwfus
Created symlink /etc/systemd/system/multi-user.target.wants/rwfusd.service → /etc/systemd/system/rwfusd.servic
e.
Done!

Check for steamos-readonly status:

❯ sudo steamos-readonly status
enabled

Try to install a package:

❯ sudo pacman -S base-devel --noconfirm
:: There are 26 members in group base-devel:
:: Repository holo-rel
   1) archlinux-keyring
:: Repository core-rel
   2) autoconf  3) automake  4) binutils  5) bison  6) debugedit  7) fakeroot  8) file  9) findutils
   10) flex  11) gawk  12) gcc  13) gettext  14) grep  15) groff  16) gzip  17) libtool  18) m4  19) make
   20) pacman  21) patch  22) pkgconf  23) sed  24) sudo  25) texinfo  26) which

Enter a selection (default=all): all
...............
error: Partition /etc too full: 11772 blocks needed, 0 blocks free
error: not enough free disk space
error: failed to commit transaction (not enough free disk space)
Errors occurred, no packages were upgraded.

Error, since overlay has been maxed:

❯ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        7.2G     0  7.2G   0% /dev
tmpfs           7.3G  512K  7.3G   1% /dev/shm
tmpfs           2.9G   11M  2.9G   1% /run
/dev/nvme0n1p4  5.0G  3.7G  1.1G  78% /
/dev/nvme0n1p6  230M  214M     0 100% /var
overlay         230M  214M     0 100% /etc
/dev/nvme0n1p8  464G   29G  436G   7% /home
tmpfs           7.3G  120K  7.3G   1% /tmp
tmpfs           1.5G  192K  1.5G   1% /run/user/1000
pCloud.fs       2.0T   38G  2.0T   2% /home/deck/pCloudDrive
/dev/loop0      8.0G  271M  7.8G   4% /opt/rwfus/mount
overlay         8.0G  271M  7.8G   4% /usr
overlay         8.0G  271M  7.8G   4% /etc/pacman.d
overlay         8.0G  271M  7.8G   4% /var/lib/pacman
overlay         8.0G  271M  7.8G   4% /var/cache/pacman

Running commands from steamos-devmode script breaks rwfus after reboot

The steamos-devmode script runs the following comments after disabling read-only. I mostly need this in order to restore headers for building packages. When I run this inside rwfus, things work fine until I reboot and then rwfus fails to mount the overlay.

sudo pacman-key --init
sudo pacman-key --populate
sudo pacman -Sy --noconfirm --needed archlinux-keyring
sudo pacman --noconfirm -S $(pacman -Qnkq | cut -d' ' -f1 | sort | uniq)
sudo pacman -S base-devel multilib-devel --needed

installation instructions clone the wrong version.

I don't really know where else to put this but I just want to notify you that git clone currently downloads the broken 0.4.0 version unless you do git clone --depth=1 --branch v0.4.1-beta1 https://github.com/ValShaped/rwfus.git and then it clones the correct version.

Rwfus does not always successfully unmount

As seen in #17, Rwfus sometimes fails to unmount overlays, which causes subsequent mounts to fail.

In practice, this is generally not harmful, but failing systemd units aren't great.

Question: I already had pacman packages before

So, I only discovered this now, and I already had packages installed before. Once I ran rwfus -iI (and everything went well, on the dev branch, main just fails), I noticed that all my previous pacman packages were still there. (E.g. visual-studio-code-insiders-bin which I installed with makepkg).

Question is: Is this normal behaviour? Does that mean those packages are already safe?
Question 2: Do I need to mount rwfus on every boot or is that done automatically?

Rootless?

Is this possible to run this rootless?

When I ran the instructions on the readme I got:
Failed to connect to bus: Operation not permitted

The closest I have found to a discussion about the rootless capabilities of linux is here:

containers/bubblewrap#412

Bubblewrap is pre-installed on the deck and I think is how Steam OS 3 works.

Having containers and not ever needing root would mean installing anything without even worrying about anything.

RWFus failing to mount on brand new SteamOS Install

Hi there, I have a little issue 😅.

I followed the steps on your GitHub Readme to install RWFus on my brand new SteamOS install (SteamOS 3.3.1). But everytime (done multiple reinstalls) the mount systemd targets fail to mount because of a bad option in the mount command. Since I'm a Linux novice and not sure what I should do here I am asking you directly if you know anything.

Screenshot_20220831_135209

Screenshot_20220831_135243

Screenshot_20220831_135305

rwfus keeps breaking

I install rwfus 0.5.0 for SteamOS 3.5 and a couple boots later the service fails:


Oct 28 15:24:42 steamdeck rwfusd.sh[865]: > Base_Directory: "/opt/rwfus"
Oct 28 15:24:42 steamdeck rwfusd.sh[865]: > Directories: "/usr /etc/pacman.d /var/cache/pacman"
Oct 28 15:24:42 steamdeck rwfusd.sh[865]: > Stop_Units: "var-cache-pacman.mount"
Oct 28 15:24:42 steamdeck rwfusd.sh[865]: > Mask_Units: "pacman-cleanup.service"
Oct 28 15:24:42 steamdeck rwfusd.sh[865]: > Restart_Units: "usr-local.mount"
Oct 28 15:24:42 steamdeck rwfusd.sh[865]: > Mount_Options: "loop,compress"
Oct 28 15:24:42 steamdeck rwfusd.sh[865]: > Systemd_Directory: "/etc/systemd/system"
Oct 28 15:24:42 steamdeck rwfusd.sh[865]: stop var-cache-pacman.mount usr-local.mount
Oct 28 15:24:42 steamdeck rwfusd.sh[865]: mask var-cache-pacman.mount pacman-cleanup.service
Oct 28 15:24:43 steamdeck rwfusd.sh[1095]: mount: /dev/loop0 mounted on /opt/rwfus/mount.
Oct 28 15:24:43 steamdeck rwfusd.sh[1117]: Resize device id 1 (/dev/loop0) from 8.00GiB to max
Oct 28 15:24:43 steamdeck rwfusd.sh[865]: GLibC has been installed inside Rwfus's overlay.
Oct 28 15:24:43 steamdeck rwfusd.sh[865]: Your Deck will likely not survive a SteamOS update.
Oct 28 15:24:43 steamdeck rwfusd.sh[865]: In an attempt to preserve your Deck, Rwfus has not mounted any overlays.
Oct 28 15:24:43 steamdeck rwfusd.sh[865]: This is not a bug. It is an intentional safety measure.
Oct 28 15:24:43 steamdeck rwfusd.sh[865]: The disk, however, has remained mounted, in case you want to remedy this.
Oct 28 15:24:43 steamdeck rwfusd.sh[865]: You may unmount it with rwfus --umount
Oct 28 15:24:43 steamdeck rwfusd.sh[865]: start usr-local.mount
Oct 28 15:24:43 steamdeck systemd[1]: rwfusd.service: Main process exited, code=exited, status=254/n/a
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░ 
░░ An ExecStart= process belonging to unit rwfusd.service has exited.
░░ 
░░ The process' exit code is 'exited' and its exit status is 254.
Oct 28 15:24:43 steamdeck systemd[1]: rwfusd.service: Failed with result 'exit-code'.
░░ Subject: Unit failed
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░ 
░░ The unit rwfusd.service has entered the 'failed' state with result 'exit-code'.
Oct 28 15:24:43 steamdeck systemd[1]: Failed to start Rwfus: Carry Pacman across SteamOS updates!.
░░ Subject: A start job for unit rwfusd.service has failed
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░ 
░░ A start job for unit rwfusd.service has finished with a failure.
░░ 
░░ The job identifier is 112 and the job result is failed.

I have to uninstall and reinstall rwfus to get it working again. And then after a few boots it stops working again.

install failed on brand new Deck

(deck@steamdeck rwfus)$ ./rwfus --install
This command must be performed as root
Creating overlays for /usr /etc/pacman.d /var/lib/pacman /var/cache/pacman:
1. Generating directories
2. Generating disk image
3. Generating service
4. Storing configuration
5. Copying service to /etc/systemd/system
6. Enabling service unit
Error when enabling service. See /tmp/rwfus.O0vb.log for information.
× rwfusd.service - Rwfus: Carry Pacman across SteamOS updates!
     Loaded: loaded (/etc/systemd/system/rwfusd.service; enabled; vendor preset: disabled)
     Active: failed (Result: timeout) since Mon 2022-12-05 17:10:58 CST; 24ms ago
    Process: 6815 ExecStart=/opt/rwfus/service/rwfusd.sh --start (code=killed, signal=TERM)
   Main PID: 6815 (code=killed, signal=TERM)
        CPU: 68ms
Log saved to /tmp/rwfus.O0vb.log
(deck@steamdeck rwfus)$ cat /tmp/rwfus.O0vb.log
Rwfus v0.4.0 
Carry Pacman across SteamOS updates!

Rwfus directory: /opt/rwfus
Unit Storage directory: /opt/rwfus/service
Systemd directory: /etc/systemd/system

./rwfus --install
Loading config file /etc/opt/rwfus.conf
> Base_Directory: "/opt/rwfus"
> Directories: "/usr /etc/pacman.d /var/lib/pacman /var/cache/pacman"
> Mount_Options: "loop,compress"

Creating overlays for /usr /etc/pacman.d /var/lib/pacman /var/cache/pacman:
1. Generating directories
mkdir: created directory '/opt/rwfus/service'
2. Generating disk image
btrfs-progs v5.16 
See http://btrfs.wiki.kernel.org for more information.

NOTE: several default settings have changed in version 5.15, please make sure
      this does not affect your deployments:
      - DUP for metadata (-m dup)
      - enabled no-holes (-O no-holes)
      - enabled free-space-tree (-R free-space-tree)

Label:              Rwfus
UUID:               bd29e6ac-f378-493e-830b-25397c228fea
Node size:          4096
Sector size:        4096
Filesystem size:    8.00GiB
Block group profiles:
  Data+Metadata:    single            8.00MiB
  System:           single            4.00MiB
SSD detected:       no
Zoned device:       no
Incompat features:  mixed-bg, extref, skinny-metadata, no-holes
Runtime features:   free-space-tree
Checksum:           crc32c
Number of devices:  1
Devices:
   ID        SIZE  PATH
    1     8.00GiB  /opt/rwfus/rwfus.btrfs

mount: /dev/loop1 mounted on /opt/rwfus/mount.
Resize device id 1 (/dev/loop1) from 8.00GiB to max
mkdir: created directory '/opt/rwfus/mount/upper'
mkdir: created directory '/opt/rwfus/mount/upper/usr'
mkdir: created directory '/opt/rwfus/mount/work'
mkdir: created directory '/opt/rwfus/mount/work/usr'
mkdir: created directory '/opt/rwfus/mount/upper/etc-pacman.d'
mkdir: created directory '/opt/rwfus/mount/work/etc-pacman.d'
mkdir: created directory '/opt/rwfus/mount/upper/var-lib-pacman'
mkdir: created directory '/opt/rwfus/mount/work/var-lib-pacman'
mkdir: created directory '/opt/rwfus/mount/upper/var-cache-pacman'
mkdir: created directory '/opt/rwfus/mount/work/var-cache-pacman'
umount: /home/.steamos/offload/opt/rwfus/mount (/dev/loop1) unmounted
3. Generating service
Generating service rwfusd
  script /opt/rwfus/service/rwfusd.sh
  unit   /opt/rwfus/service/rwfusd.service
4. Storing configuration
Storing config file to /etc/opt/rwfus.conf...
-rw-r--r-- 1 root root 574 Dec  5 17:10 /etc/opt/rwfus.conf
5. Copying service to /etc/systemd/system
'/opt/rwfus/service/rwfusd.service' -> '/etc/systemd/system/rwfusd.service'
6. Enabling service unit
Created symlink /etc/systemd/system/multi-user.target.wants/rwfusd.service → /etc/systemd/system/rwfusd.service.
Job for rwfusd.service failed because a timeout was exceeded.
See "systemctl status rwfusd.service" and "journalctl -xeu rwfusd.service" for details.
Error when enabling service. See /tmp/rwfus.O0vb.log for information.
(deck@steamdeck rwfus)$ sudo journalctl -xeu rwfusd.service
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░ 
░░ A start job for unit rwfusd.service has begun execution.
░░ 
░░ The job identifier is 4194.
Dec 05 17:10:55 steamdeck rwfusd.sh[6815]: Rwfus v0.4.0
Dec 05 17:10:55 steamdeck rwfusd.sh[6815]: Carry Pacman across SteamOS updates!
Dec 05 17:10:55 steamdeck rwfusd.sh[6815]: /opt/rwfus/service/rwfusd.sh --start --
Dec 05 17:10:55 steamdeck rwfusd.sh[6815]: Loading config file /etc/opt/rwfus.conf
Dec 05 17:10:55 steamdeck rwfusd.sh[6815]: > Base_Directory: "/opt/rwfus"
Dec 05 17:10:55 steamdeck rwfusd.sh[6815]: > Directories: "/usr /etc/pacman.d /var/lib/pacman /var/cache/pacman"
Dec 05 17:10:55 steamdeck rwfusd.sh[6815]: > Mount_Options: "loop,compress"
Dec 05 17:10:55 steamdeck rwfusd.sh[6817]: Created symlink /etc/systemd/system/pacman-cleanup.service → /dev/null.
Dec 05 17:10:56 steamdeck rwfusd.sh[6837]: mount: /dev/loop1 mounted on /opt/rwfus/mount.
Dec 05 17:10:56 steamdeck rwfusd.sh[6857]: Resize device id 1 (/dev/loop1) from 8.00GiB to max
Dec 05 17:10:56 steamdeck rwfusd.sh[6815]: Creating overlay (/opt/rwfus/mount/upper/usr, /opt/rwfus/mount/work/usr) on /usr
Dec 05 17:10:56 steamdeck rwfusd.sh[6860]: mount: overlay mounted on /usr.
Dec 05 17:10:56 steamdeck rwfusd.sh[6815]: Successfully overlaid /opt/rwfus/mount/upper/usr on /usr
Dec 05 17:10:56 steamdeck rwfusd.sh[6815]: Creating overlay (/opt/rwfus/mount/upper/etc-pacman.d, /opt/rwfus/mount/work/etc-pacman.d) on /etc/pacman.d
Dec 05 17:10:56 steamdeck rwfusd.sh[6862]: mount: /etc/pacman.d: wrong fs type, bad option, bad superblock on overlay, missing codepage or helper program, or other error.
Dec 05 17:10:56 steamdeck rwfusd.sh[6815]:   /etc/pacman.d not available (error 0). Retrying...
Dec 05 17:10:58 steamdeck systemd[1]: rwfusd.service: start operation timed out. Terminating.
Dec 05 17:10:58 steamdeck systemd[1]: rwfusd.service: Main process exited, code=killed, status=15/TERM
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░ 
(deck@steamdeck rwfus)$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0         7:0    0    8G  0 loop /home/.steamos/offload/opt/rwfus/mount
                                     /opt/rwfus/mount
loop1         7:1    0    8G  0 loop /home/.steamos/offload/opt/rwfus/mount
                                     /opt/rwfus/mount
nvme0n1     259:0    0 57.6G  0 disk 
├─nvme0n1p1 259:1    0   64M  0 part 
├─nvme0n1p2 259:2    0   32M  0 part 
├─nvme0n1p3 259:3    0   32M  0 part 
├─nvme0n1p4 259:4    0    5G  0 part /
├─nvme0n1p5 259:5    0    5G  0 part 
├─nvme0n1p6 259:6    0  256M  0 part /var
├─nvme0n1p7 259:7    0  256M  0 part 
└─nvme0n1p8 259:8    0   47G  0 part /var/tmp
                                     /var/log
                                     /var/lib/systemd/coredump
                                     /var/lib/flatpak
                                     /var/lib/docker
                                     /var/cache/pacman
                                     /srv
                                     /root
                                     /opt
                                     /home

Issue on installing.

I was attempting to install and this error occurred, I have no idea why.

Rwfus v0.4.0
Carry Pacman across SteamOS updates!

Rwfus directory: /opt/rwfus
Unit Storage directory: /opt/rwfus/service
Systemd directory: /etc/systemd/system

./rwfus -iI
Loading config file /etc/opt/rwfus.conf

Base_Directory: "/opt/rwfus"
Directories: "/usr /etc/pacman.d /var/lib/pacman /var/cache/pacman"
Mount_Options: "loop,compress"

Creating overlays for /usr /etc/pacman.d /var/lib/pacman /var/cache/pacman:

  1. Generating directories
  2. Generating disk image
    ERROR: /opt/rwfus/rwfus.btrfs appears to contain an existing filesystem (btrfs)
    ERROR: use the -f option to force overwrite of /opt/rwfus/rwfus.btrfs
    btrfs-progs v6.0
    See http://btrfs.wiki.kernel.org for more information.

mount: /opt/rwfus/mount: /opt/rwfus/rwfus.btrfs is already mounted.
Resize device id 1 (/dev/loop0) from 8.00GiB to max
umount: /home/.steamos/offload/opt/rwfus/mount (/dev/loop0) unmounted
3. Generating service
Generating service rwfusd
script /opt/rwfus/service/rwfusd.sh
unit /opt/rwfus/service/rwfusd.service
4. Storing configuration
Storing config file to /etc/opt/rwfus.conf...
-rw-r--r-- 1 root root 574 Jan 24 20:26 /etc/opt/rwfus.conf
5. Copying service to /etc/systemd/system
'/opt/rwfus/service/rwfusd.service' -> '/etc/systemd/system/rwfusd.service'
6. Enabling service unit
Job for rwfusd.service failed because a timeout was exceeded.
See "systemctl status rwfusd.service" and "journalctl -xeu rwfusd.service" for details.
Error when enabling service. See /tmp/rwfus.QCqL.log for information.
Loading config file /etc/opt/rwfus.conf
Config already loaded
Removed "/etc/systemd/system/multi-user.target.wants/rwfusd.service".
Removed "/etc/systemd/system/pacman-cleanup.service".
Adding Rwfus to /home/.steamos/offload/usr/local/bin...
'./rwfus_include/config.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/config.sh'
'./rwfus_include/disk.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/disk.sh'
'./rwfus_include/info.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/info.sh'
'./rwfus_include/manage-install.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/manage-install.sh'
'./rwfus_include/service-main.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/service-main.sh'
'./rwfus_include/service.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/service.sh'
'./rwfus_include/testlog.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/testlog.sh'
'./rwfus' -> '/home/.steamos/offload/usr/local/bin/rwfus'
Created symlink /etc/systemd/system/multi-user.target.wants/rwfusd.service → /etc/systemd/system/rwfusd.service.
Job for rwfusd.service failed because a timeout was exceeded.
See "systemctl status rwfusd.service" and "journalctl -xeu rwfusd.service" for details.
Error when enabling service. See /tmp/rwfus.QCqL.log for information.
Done!

Failing to Download Packages Databases

Good day. SteamOS just landed and I thought it might be a good time to try out your overlay solution, vs my "reinstall everything with a script after every update" method. Followed the directions to install, but got an error.

Rwfus v0.4.0 
Carry Pacman across SteamOS updates!

Rwfus directory: /opt/rwfus
Unit Storage directory: /opt/rwfus/service
Systemd directory: /etc/systemd/system

./rwfus -iI
Loading config file /etc/opt/rwfus.conf
> Base_Directory: "/opt/rwfus"
> Directories: "/usr /etc/pacman.d /var/lib/pacman /var/cache/pacman"
> Mount_Options: "loop,compress"

Creating overlays for /usr /etc/pacman.d /var/lib/pacman /var/cache/pacman:
1. Generating directories
2. Generating disk image
ERROR: /opt/rwfus/rwfus.btrfs appears to contain an existing filesystem (btrfs)
ERROR: use the -f option to force overwrite of /opt/rwfus/rwfus.btrfs
btrfs-progs v6.0
See http://btrfs.wiki.kernel.org for more information.

mount: /dev/loop0 mounted on /opt/rwfus/mount.
Resize device id 1 (/dev/loop0) from 8.00GiB to max
umount: /home/.steamos/offload/opt/rwfus/mount (/dev/loop0) unmounted
3. Generating service
Generating service rwfusd
  script /opt/rwfus/service/rwfusd.sh
  unit   /opt/rwfus/service/rwfusd.service
4. Storing configuration
Storing config file to /etc/opt/rwfus.conf...
-rw-r--r-- 1 root root 574 Dec 22 11:10 /etc/opt/rwfus.conf
5. Copying service to /etc/systemd/system
'/opt/rwfus/service/rwfusd.service' -> '/etc/systemd/system/rwfusd.service'
6. Enabling service unit
7. Setting up pacman
==> Appending keys from archlinux.gpg...
==> Appending keys from holo.gpg...
==> Updating trust database...
gpg: next trustdb check due at 2023-04-21
:: Synchronizing package databases...
 jupiter downloading...
 holo downloading...
 core downloading...
 extra downloading...
 community downloading...
 multilib downloading...
error: failed retrieving file 'jupiter.db' from steamdeck-packages.steamos.cloud : The requested URL returned error: 404
error: failed retrieving file 'holo.db' from steamdeck-packages.steamos.cloud : The requested URL returned error: 404
error: failed retrieving file 'core.db' from steamdeck-packages.steamos.cloud : The requested URL returned error: 404
warning: too many errors from steamdeck-packages.steamos.cloud, skipping for the remainder of this transaction
error: failed retrieving file 'extra.db' from steamdeck-packages.steamos.cloud : The requested URL returned error: 404
error: failed retrieving file 'multilib.db' from steamdeck-packages.steamos.cloud : The requested URL returned error: 404
error: failed retrieving file 'community.db' from steamdeck-packages.steamos.cloud : The requested URL returned error: 404
error: failed to synchronize all databases (failed to retrieve some files)
Failed to set up pacman. See /tmp/rwfus.XXXX.log for details.
Done!

Loading config file /etc/opt/rwfus.conf
Config already loaded
Removed "/etc/systemd/system/multi-user.target.wants/rwfusd.service".
Unit pacman-cleanup.service does not exist, proceeding anyway.
Adding Rwfus to /home/.steamos/offload/usr/local/bin...
'./rwfus_include/config.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/config.sh'
'./rwfus_include/disk.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/disk.sh'
'./rwfus_include/info.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/info.sh'
'./rwfus_include/manage-install.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/manage-install.sh'
'./rwfus_include/service-main.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/service-main.sh'
'./rwfus_include/service.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/service.sh'
'./rwfus_include/testlog.sh' -> '/home/.steamos/offload/usr/local/bin/rwfus_include/testlog.sh'
'./rwfus' -> '/home/.steamos/offload/usr/local/bin/rwfus'
Created symlink /etc/systemd/system/multi-user.target.wants/rwfusd.service → /etc/systemd/system/rwfusd.service.
Done!

404 Errors on getting the package databases after a pacman -Sy. Didn't have this problem before this update or before trying rwfus, so I'm actually unsure if its from the 3.4 update, from rwfus, or if valves servers are actually down. Can you please advise?

Upgrade from older version causing issues

I'm on an older Steam OS install where home is non-case folding.

I just updated the repo today when RWFUS was disabled and enabled it and it enabled but through some errors about the mount points being too deep.

Now when I try to go to disable it doesn't actually disable and stays enabled. Will have some text in a second

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.