/pacman-backup

:floppy_disk: Pacman Backup tool for off-the-grid updates via portable USB sticks or (mesh) LAN networks.

Primary LanguageJavaScriptGNU General Public License v3.0GPL-3.0

Pacman Backup

Backup tool for off-the-grid updates via portable USB sticks or (mesh) LAN networks.

Share Updates via USB Drive

In the below example, make sure that pacman-usbdrive is writable. Replace the path with the correct one that points to your mounted USB drive.

Step 1:

On the machine with internet connection, insert and mount the USB drive.

Use pacman-backup archive to copy the package cache to the backup folder. Use pacman-backup cleanup to remain only the latest version of each package.

The archive action will also copy the necessary database files for pacman -Sy.

# Machine with internet connection

sudo pacman -Sy;
sudo pacman -Suw;

pacman-backup archive /run/media/$USER/pacman-usbdrive;
pacman-backup cleanup /run/media/$USER/pacman-usbdrive;
sync;

# Unmount the USB drive and walk to other machine

Step 2:

On the machine without internet connection, insert and mount the USB drive.

Copy the necessary database files to pacman's sync folder (which is $DBPath/sync of pacman.conf).

Use pacman-backup upgrade to update from the backupfolder. This will output the pacman command that you should verify manually before executing it.

# Machine without internet connection

sudo cp /run/media/$USER/pacman-usbdrive/sync/*.db /var/lib/pacman/sync/;
pacman-backup upgrade /run/media/$USER/pacman-usbdrive;

# :: Use this to install upgrades from cache:
#    (...) pacman -U command (...)

Share Updates via LAN Connection

In the below example, the machine with internet connection has the IP 192.168.0.10. Replace the IP with the correct one that matches your setup. If in doubt, use ip or ifconfig.

Step 1:

On the machine with internet connection, connect the LAN cable (and internet connection).

Use pacman-backup serve to start a pacman server that can be used by other pacman clients.

# Machine with internet connection

sudo pacman -Sy;
sudo pacman -Suw;

pacman-backup serve;

Step 2:

On the machine without internet connection, connect the LAN cable and verify that the server (the machine with internet connection) is reachable via its IP. If in doubt, use ping.

Use pacman-backup download 192.168.0.10 to download the packages to pacman's package cache.

Use pacman-backup upgrade to update from the local pacman cache. This will output the pacman command that you should verify manually before executing it.

# Machine without internet connection

sudo pacman-backup download 192.168.0.10;
pacman-backup upgrade;

Share Updates via LAN Cache Proxy

pacman-backup can also emulate a local Cache Proxy for other pacman clients. If pacman-backup serve is running on the machine with internet connection, it can be used for pacman directly.

Note that if the packages don't exist, they will appear in the logs but aren't downloaded directly; and that partial upgrades are not officially supported by Arch Linux.

In the below example, the machine with internet connection has the IP 192.168.0.10. Replace the IP with the correct one that matches your setup. If in doubt, use ip or ifconfig.

Step 1:

On the machine with internet connection, connect the LAN cable (and internet connection).

Use pacman-backup serve to start a pacman server that can be used by other pacman clients.

# Machine with internet connection

sudo pacman -Sy;
sudo pacman -Suw;

pacman-backup serve;

Step 2:

Modify the /etc/pacman.d/mirrorlist to have as a first entry the following line:

# Machine without internet connection
# Pacman Mirrorlist for local server

Server = http://192.168.0.10:15678

Use pacman -Sy and pacman -Su to update from the Cache Proxy.

# Machine without internet connection

sudo pacman -Sy;
sudo pacman -Su; # or use -Suw

Advanced Usage

archive

archive allows to backup everything to a specified folder. It copies the files from /var/cache/pacman/pkg and /var/lib/pacman/sync into $FOLDER/pkgs and $FOLDER/sync.

# copy local packages to /target/folder/pkgs
# copy local database to /target/folder/sync

pacman-backup archive /target/folder;

cleanup

cleanup allows to cleanup the package cache in a way that only the latest version of each package is kept (for each architecture).

If no folder is specified, it will clean up /var/cache/pacman/pkg. If a folder is specified, it will clean up $FOLDER/pkgs.

# cleanup /var/cache/pacman/pkg

sudo pacman-backup cleanup;
# cleanup /target/folder/pkgs

pacman-backup cleanup /target/folder;

download

download allows to download packages from a pacman-backup serve based server.

If no folder is specified, it will download to /var/cache/pacman/pkg. If a folder is specified, it will download to $FOLDER/pkgs.

If no server is specified, it generates a download list of package URLs that you can use for your download manager of choice (e.g. uGet or jdownloader).

# download packages to /var/cache/pacman/pkg
# download database to /var/lib/pacman/sync

sudo pacman-backup download 1.3.3.7;
# download packages to /target/folder/pkgs
# download database to /target/folder/sync

pacman-backup download 1.3.3.7 /target/folder;
# generate HTTP/S URL list for packages that need downloading

pacman-backup download;

serve

serve allows to start a pacman server that can be used as a local mirror.

If no folder is specified, it will serve from /var/cache/pacman/pkg and /var/lib/pacman/sync. If a folder is specified, it will serve from $FOLDER/pkgs and $FOLDER/sync.

# serve packages from /var/cache/pacman/pkg
# serve database from /var/lib/pacman/sync

pacman-backup serve;
# serve packages from /source/folder/pkgs
# serve database from /source/folder/sync

pacman-backup serve /source/folder;

upgrade

upgrade allows to generate an executable pacman command that uses the specified cache folder as a package source by leveraging the --cachedir parameter.

If no folder is specified, it will upgrade from /var/cache/pacman/pkg. If a folder is specified, it will upgrade from $FOLDER/pkgs.

# generate upgrade command via packages from /var/cache/pacman/pkg

pacman-backup upgrade;
# generate upgrade command via packages from /source/folder/pkgs

pacman-backup upgrade /source/folder;

upgrade (Partial Upgrades)

upgrade also prints out a command for missing packages that need downloading.

In the scenario that the local database says that more packages need to be downloaded to update everything, it will output an additional command that is prepared to let pacman download the packages to the specified folder.

This is helpful in the scenario that the "offline machine" has more packages installed than the "online machine" (so that more packages need to be downloaded to fully upgrade the "offline machine").

Then you can simply copy/paste the generated command to a text file and execute it next time you're online - in order to automatically download everything that's required for the "offline machine".

# Example output for partial upgrade scenario
# (executed on machine without internet connection)

pacman-backup upgrade 1.3.3.7;

# :: Use this to install upgrades from cache:
#    (...) pacman -U command (...)

# :: Use this to download upgrades into cache:
#    (...) pacman -Sw --cachedir command (...)