aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArslaan Pathan <[email protected]>2026-06-21 20:16:00 +1200
committerArslaan Pathan <[email protected]>2026-06-21 20:16:00 +1200
commite9dd7eec231edfd631cc19f164bba6506f96384b (patch)
tree61ba05489d896a841c61f33f820bad62fc46ca58
parentf5681aeb44feedda172352877c273fcf59e9b4cb (diff)
downloadmbpk-e9dd7eec231edfd631cc19f164bba6506f96384b.tar.xz
mbpk-e9dd7eec231edfd631cc19f164bba6506f96384b.zip
Start implementing the library and switch the spec to entirely INI because YAML is harder to parse
-rw-r--r--README.md75
-rw-r--r--include/libmbpk.h2
-rw-r--r--meson.build1
-rw-r--r--src/libmbpk.c26
4 files changed, 68 insertions, 36 deletions
diff --git a/README.md b/README.md
index 5121644..b3a76ab 100644
--- a/README.md
+++ b/README.md
@@ -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;
+}