diff options
| -rw-r--r-- | README.md | 75 | ||||
| -rw-r--r-- | include/libmbpk.h | 2 | ||||
| -rw-r--r-- | meson.build | 1 | ||||
| -rw-r--r-- | src/libmbpk.c | 26 |
4 files changed, 68 insertions, 36 deletions
@@ -16,24 +16,21 @@ A package is a `.tar.zst` archive with the file extension `.mpk`. ``` pkgname-1.2.3.mpk --> pkg.yml # Metadata +-> pkg.ini # Metadata -> _install.tar.zst # This will be extracted to / -> post-install # Optional, runs after install -> pre-remove # Optional, runs before remove ``` -#### pkg.yml - -```yaml -name: pkgname -version: 1.2.3 -desc: testing testing 123, i like chicken nuggets, not 3 -deps: - - dep1 - - dep2 - - dep3 -maintainer: French Hacker <[email protected]> -license: WTFPL +#### pkg.ini + +```ini +name = pkgname +version = 1.2.3 +desc = testing testing 123, i like chicken nuggets, not 3 +deps = dep1 dep2 dep +maintainer = French Hacker <[email protected]> +license = WTFPL ``` #### Scripts @@ -54,44 +51,50 @@ Configuration format is as follows: # Example repository configuration for mbpk # Format: name = url -core = https://repo.yerba.arslaancodes.com/core -extra = https://repo.yerba.arslaancodes.com/extra +[core] +url = https://repo.yerba.arslaancodes.com/core + +[extra] +url = https://repo.yerba.arslaancodes.com/extra ``` +Repos will be synchronized by copying them into `/var/lib/mbpk-repo/`. +For example, the repos from the previous configuration example would be at the following locations: +- `/var/lib/mbpk-repo/core` +- `/var/lib/mbpk-repo/extra` + ### Structure Repository structure is as follows: ``` core/ # Example repository name --> repo.yml # Repository metadata +-> repo.ini # Repository metadata -> pkg/ - -> pkg/pkgname.yml # Package metadata - -> pkg/pkgname2.yml # More package metadata + -> pkgname.ini # Package metadata + -> pkgname2.ini # More package metadata -> files/ -> pkgname-1.2.3.mpk # Example package file ``` -#### repo.yml +#### repo.ini -```yaml -name: core -desc: Core repo for Yerba Linux +```ini +name = core +desc = Core repo for Yerba Linux +url = https://repo.yerba.arslaancodes.com/core ``` -#### pkg/pkgname.yml - -```yaml -name: pkgname -version: 1.2.3 -desc: testing testing 123, i like chicken nuggets, not 3 -url: https://repo.yerba.arslaancodes.com/core/files/pkgname-1.2.3.mpk -deps: - - dep1 - - dep2 - - dep3 -maintainer: French Hacker <[email protected]> -license: WTFPL +#### pkg/pkgname.ini + +```ini +name = pkgname +version = 1.2.3 +desc = testing testing 123, i like chicken nuggets, not 3 +url = https://repo.yerba.arslaancodes.com/core/files/pkgname-1.2.3.mpk +deps = dep1 dep2 dep3 +maintainer = French Hacker <[email protected]> +license = WTFPL ``` ## Database & Package Installation/Removal @@ -119,3 +122,5 @@ Removal of a package is simple: - `mbpk-upgrade <pkgname>`: upgrades the specified package - `mbpk-search <term>`: searches repositories for a specified term - `mbpk-info <pkgname>`: shows metadata of a requested installed package + +Running these commands require superuser privileges or for the user to be in the `mbpk` group. Users that are in the `mbpk` group will be able to run `mbpk` commands without superuser access. For this reason all `mbpk-*` wrapper binaries will be setuid. diff --git a/include/libmbpk.h b/include/libmbpk.h index 0347e0c..e97c789 100644 --- a/include/libmbpk.h +++ b/include/libmbpk.h @@ -6,7 +6,7 @@ typedef struct mbpk_pkg { const char *version; const char *desc; const char *url; - const char **deps; + mbpk_pkg **deps; const char *maintainer; const char *license; } mbpk_pkg; diff --git a/meson.build b/meson.build index 5dc3113..4783e80 100644 --- a/meson.build +++ b/meson.build @@ -6,6 +6,7 @@ deps = [] deps += dependency('libcurl') deps += dependency('libarchive') deps += dependency('libzstd') +deps += dependency('inih') libdir = get_option('libdir') diff --git a/src/libmbpk.c b/src/libmbpk.c index e69de29..ee7fe75 100644 --- a/src/libmbpk.c +++ b/src/libmbpk.c @@ -0,0 +1,26 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <sys/stat.h> + +typedef struct { + const char* name; + const char* desc; + const char* url; +} mbpk_repository; + +#define MBPK_DB_DIR "/var/lib/mbpk" +#define MBPK_REPO_DIR "/var/lib/mbpk-repo" +#define MBPK_REPO_CONFIG "/etc/mbpk-repos.ini" + +int mbpk_init(void) { + struct stat st; + if (stat(MBPK_DB_DIR, &st) == -1) { + if (mkdir(MBPK_DB_DIR, 0755) == -1) { + fprintf(stderr, "mbpk: failed to create %s: %s\n", MBPK_DB_DIR, strerror(errno)); + } + return 1; + } + return 0; +} |
