Compare commits
2 commits
b2d2557a27
...
ef963da8e5
Author | SHA1 | Date | |
---|---|---|---|
ef963da8e5 | |||
0079047ab6 |
5 changed files with 76 additions and 17 deletions
66
check
66
check
|
@ -1,12 +1,22 @@
|
|||
#! /usr/bin/env sh
|
||||
|
||||
# user-configured settings
|
||||
# state
|
||||
|
||||
## user-configured settings
|
||||
TORI_ROOT="$HOME/.config/tori"
|
||||
|
||||
# global state
|
||||
files=
|
||||
## global constants
|
||||
OS="$(uname -s)"
|
||||
|
||||
# application logic
|
||||
## global state
|
||||
base_files=
|
||||
bkp_files=
|
||||
user_packages=
|
||||
system_packages=
|
||||
|
||||
# behavior
|
||||
|
||||
## utility functions
|
||||
|
||||
log() {
|
||||
local level="$1" # unimplemented
|
||||
|
@ -17,20 +27,50 @@ log() {
|
|||
fi
|
||||
}
|
||||
|
||||
## configuration processing functions
|
||||
|
||||
traverse() {
|
||||
scan_directory() {
|
||||
local target="$1"
|
||||
local files=
|
||||
local escaped_config_root="$(echo $TORI_ROOT | sed 's/\//\\\//g')"
|
||||
|
||||
log debug "traversing $target"
|
||||
if [ -d "$target" ]; then
|
||||
log debug "found dir: $target"
|
||||
files="$(find "$target" -type f)\n$files"
|
||||
scan="$(find "$target" -type f)"
|
||||
for line in $scan; do
|
||||
line="$(echo $line | sed "s/$escaped_config_root\///")"
|
||||
files="$line\n$files"
|
||||
done
|
||||
fi
|
||||
|
||||
log debug "collected files:\n$files"
|
||||
echo "$files"
|
||||
}
|
||||
|
||||
cd "$TORI_ROOT"
|
||||
for item in $TORI_ROOT/*; do
|
||||
traverse "$item"
|
||||
done
|
||||
scan_packages() {
|
||||
local package_manager
|
||||
local args__get_manually_installed
|
||||
local system_packages_eval
|
||||
|
||||
if [ $OS = "FreeBSD" ]; then
|
||||
package_manager="pkg"
|
||||
args__get_manually_installed='query -e "%a = 0" "%n"'
|
||||
fi
|
||||
|
||||
system_packages=$(eval "$package_manager $args__get_manually_installed")
|
||||
user_packages="$(cat $TORI_ROOT/packages | sort | uniq)"
|
||||
|
||||
if [ "$system_packages" = "$user_packages" ]; then
|
||||
log debug "packages match"
|
||||
else
|
||||
log debug "packages mismatch"
|
||||
log debug "system: $system_packages"
|
||||
log debug "user: $user_packages"
|
||||
fi
|
||||
}
|
||||
|
||||
base_files="$(scan_directory "$TORI_ROOT/base")"
|
||||
bkp_files="$(scan_directory "$TORI_ROOT/bkp")"
|
||||
|
||||
log debug "collected base files:\n$base_files"
|
||||
log debug "collected bkp files:\n$bkp_files"
|
||||
|
||||
scan_packages
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
tori is designed to be portable so that its features allow transfering your configuration between different versions of an operating system or even between different operating systems depending on the presently supported ones.
|
||||
`tori`'s role is to manage your configuration files and installed packages, allowing you to transfer this configuration between different versions of an operating system or even between different Unix and Unix-like operating systems, provided they are presently supported.
|
||||
|
||||
To aid this portability and ability to run in different systems, it is also designed to have minimal dependencies since it is meant to run on brand new systems where very few packages have been installed.
|
||||
Because the application is meant to manage the installation of packages for you, it would defeat its purpose for it to require any packages to already be installed in order to function. It must be a portable application with minimal dependencies, so it can perform its functions on brand new systems where very few packages have been installed and little to no configuration has been done.
|
||||
|
||||
Despite this, some assumptions are still made about what your system supports:
|
||||
To achieve this portability and independence, it is meant to run on a POSIX-compatible shell where POSIX utilities are available. If your system does not provide this, it is very unlikely `tori` will function.
|
||||
|
||||
Below is a list of assumptions made about what your system supports:
|
||||
|
||||
- shell
|
||||
- `local` keyword
|
||||
|
||||
- executables
|
||||
- `find`
|
||||
- `sed`
|
||||
- `date` with nanoseconds as `%N`
|
||||
- `env` at `/usr/bin/env`
|
||||
- While this may be an issue from a portability standpoint, hardcoding the path where `sh` is also poses another portability issue. A more robust way to find it would be desirable.
|
||||
|
||||
tori is implemented as a set of shell scripts. These are currently only tested on the `sh` Almquist shell as shipped by FreeBSD and the `dash` Almquist shell as shipped by Void Linux.
|
||||
`tori` is currently only tested on the `sh` Almquist shell as shipped by FreeBSD and the `dash` Almquist shell as shipped by Void Linux.
|
||||
|
|
|
@ -26,3 +26,4 @@ Both of these directories mimic the file structure found from the root of the fi
|
|||
└── .shrc
|
||||
```
|
||||
|
||||
`tori` will look only for regular files inside your configuration directory and currently will ignore symbolic link and any other filetype when scanning it.
|
7
docs/user-files.md
Normal file
7
docs/user-files.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
`tori` can track if a given file in the configuration directory is present and matches the content of the corresponding file on the system level.
|
||||
|
||||
However, if a file changed on the system level is not in the configuration directory, `tori` can only alert you to that if the operating system provides some way to compare the present state of the system to the original one prior to user intervention.
|
||||
|
||||
One example would be FreeBSD's intrusion detection system, which provides a way to know which files have been changed. Another way would be by relying on a file system that provides the ability to compare differences between snapshots, such as ZFS. A third way would be if the operating system's package manager provides a command line interface to read the contents of packages and has packages that correspond to the core system, such as Void Linux's package manager, `xbps`.
|
||||
|
||||
The resource-intensiveness of each of these methods will vary greatly and therefore checking the whole system for changes can be time-consuming or provide overwhelming output. For this reason, `tori` by default operates in a more minimal fashion where you take responsibility for adding the files you would like to track to your configuration and only get warnings of untracked files when explicitly asked.
|
8
docs/user-packages.md
Normal file
8
docs/user-packages.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
In order to take advantage of all the features offered by `tori` for package management, the operating system's package manager must provide a way to:
|
||||
|
||||
- install and uninstall packages from a command-line interface
|
||||
- query manually installed packages
|
||||
|
||||
The `packages` file is located at the root of the configuration directory and contains a list of package names, one per line. Blank lines and lines beginning with `#` are ignored.
|
||||
|
||||
When processing the package list, `tori` will compare the list of installed packages to the list in the configuration and ask the user for what action to take in order to conciliate them, unless a default action has been specified.
|
Loading…
Reference in a new issue