From 501f723edd2932d0f80ddbd6e83145280b0553b7 Mon Sep 17 00:00:00 2001 From: ngn Date: Wed, 19 Jun 2024 16:36:15 +0300 Subject: [PATCH] update: bunch of changes incoming --- wiki/main.json | 4 +- wiki/main.md | 24 ++-- wiki/pkg/mirrors.json | 2 +- wiki/pkg/mirrors.md | 36 +++--- wiki/pkg/packages.json | 6 + wiki/pkg/{pkg.md => packages.md} | 103 ++++++++-------- wiki/pkg/pkg.json | 6 - wiki/pkg/pool_guides.json | 6 + wiki/pkg/pool_guides.md | 20 +++ wiki/pkg/pools.json | 6 + wiki/pkg/pools.md | 150 +++++++++++++++++++++++ wiki/pkg/{release.json => releases.json} | 4 +- wiki/pkg/{release.md => releases.md} | 27 ++-- wiki/pkg/repo.json | 6 - wiki/pkg/repo.md | 111 ----------------- wiki/pkg/repo_guide.json | 6 - wiki/pkg/repo_guide.md | 18 --- 17 files changed, 291 insertions(+), 244 deletions(-) create mode 100644 wiki/pkg/packages.json rename wiki/pkg/{pkg.md => packages.md} (59%) delete mode 100644 wiki/pkg/pkg.json create mode 100644 wiki/pkg/pool_guides.json create mode 100644 wiki/pkg/pool_guides.md create mode 100644 wiki/pkg/pools.json create mode 100644 wiki/pkg/pools.md rename wiki/pkg/{release.json => releases.json} (52%) rename wiki/pkg/{release.md => releases.md} (81%) delete mode 100644 wiki/pkg/repo.json delete mode 100644 wiki/pkg/repo.md delete mode 100644 wiki/pkg/repo_guide.json delete mode 100644 wiki/pkg/repo_guide.md diff --git a/wiki/main.json b/wiki/main.json index 70ed2ab..f6e4aaa 100644 --- a/wiki/main.json +++ b/wiki/main.json @@ -1,6 +1,6 @@ { "id": "main", - "title": "Welcome to MatterLinux Wiki!", + "title": "Welcome to MatterLinux wiki!", "author": "ngn", - "date": "06/01/24" + "date": "19/06/24" } diff --git a/wiki/main.md b/wiki/main.md index 122d5de..e8fd7c7 100644 --- a/wiki/main.md +++ b/wiki/main.md @@ -9,21 +9,23 @@ edit a page or create a new page, make a [pull request](/wiki/contribute) to [co | [Post-Installation](/wiki/post_install) | Make your system (somewhat) usable | ## Packaging -| Name | Description | -| --------------------------------------- | ---------------------------------------------------------------- | -| [Releases](/wiki/release) | Learn about MatterLinux release cycle | -| [Repo](/wiki/repo) | Learn about MatterLinux repos and how they work | -| [Package](/wiki/package) | Learn about MatterLinux packages | -| [Repo Guidelines](/wiki/repo_guide) | Package guidelines for the official repos | -| [Create a package](/wiki/create_pkg) | Learn how you can create and add a package to the official repos | -| [Package Management](/wiki/package_man) | Learn about MatterLinux package manager | -| [Mirrors](/wiki/mirrors) | Discover repo mirrors and learn how you can setup one | -| [Working with `mc`](/wiki/mc) | Learn how you can use `mc` to install and package your configs | +| Name | Description | +| --------------------------------------------- | -------------------------------------------------------------------------- | +| [Releases](/wiki/releases) | Learn about MatterLinux release cycle | +| [Packages](/wiki/packages) | Learn about MatterLinux packages | +| [Pools](/wiki/pools) | Learn about MatterLinux package pools | +| [Mirrors](/wiki/mirrors) | Discover pool mirros and learn how you can setup your own | +| [Pool Guidelines](/wiki/pool_guides) | Package guidelines for the official pools | +| [Create a packages](/wiki/create_packages) | Learn how you can create and add a package to the official repos | +| [Working with mp](/wiki/mp) | Learn how to manage packages with MatterLinux package manager (`mp`) | +| [Working with libmp](/wiki/libmp) | Learn how to use the MatterLinux package library (`libmp`) | +| [Understanding MPTP](/wiki/mptp) | Learn about MatterLinux package transfer protocol (MPTP) | +| [Working with mc](/wiki/mc) | Learn how to manage your configs MatterLinux configuration manager (`mc`) | ## Other | Name | Description | | -------------------------------- | ------------------------------------------------------- | -| [Chat](/wiki/chat) | Learn how you can contact developers and users | +| [Chat](/wiki/chat) | Learn how you can contact developers and contributers | | [Contributing](/wiki/contribute) | Learn how you can contribute to MatterLinux | | [Bugs](/wiki/bugs) | Learn how you can report bugs/issues | | [Licensing](/wiki/licensing) | Licensing for the MatterLinux repositories and software | diff --git a/wiki/pkg/mirrors.json b/wiki/pkg/mirrors.json index 11fab7c..254cecf 100644 --- a/wiki/pkg/mirrors.json +++ b/wiki/pkg/mirrors.json @@ -2,5 +2,5 @@ "id": "mirrors", "title": "Mirrors", "author": "ngn", - "date": "05/05/24" + "date": "19/06/24" } diff --git a/wiki/pkg/mirrors.md b/wiki/pkg/mirrors.md index d511afe..4a68723 100644 --- a/wiki/pkg/mirrors.md +++ b/wiki/pkg/mirrors.md @@ -1,24 +1,24 @@ -Mirrors are web and FTP servers that mirror repos from the official repo web server. +On this page, you will find information about MatterLinux package mirrors. -# Usage -To use a mirror with `mp`, change the repo URI for the target repo in your `mp` +# Using different mirrors +To use a mirror with `mp`, change the pool URL for the target pool in your `mp` configuration file (`/etc/mp/cfg`). ### Creating a mirror To create a mirror you can use the `matter-mirror` tool. This tool is a part of the [MatterLinux `tools` project](https://git.matterlinux.xyz/matter/tools). These tools can be installed with the `tools` -package in the desktop repo. +package in the desktop pool. -After installing `matter-mirror`, specify an URI and an output directory (files will be downloaded -into the output directory). For example to mirror the `base` repo from -`https://pkgs.matterlinux.xyz/base` to `base_mirror` directory: +After installing `matter-mirror`, specify an URL and an output directory (files will be downloaded +into the output directory). For example to mirror the `base` pool from `https://pkgs.matterlinux.xyz/base` +to `base_mirror` directory: ``` $ mkdir base_mirror $ matter-mirror -u https://pkgs.matterlinux.xyz/base -o base_mirror ``` -To serve the mirror, you can setup a web server such as `nginx`, or you can setup a FTP -server such as `pure-ftpd`. +To serve the mirror, you can setup [`pooler`](https://git.matterlinux.xyz/matter/pooler). +To learn more about `pooler`, see the [wiki page for pools](/wikş/pools.md). You will mostly likely want to update your mirror every once in a while. To do so you can create a cron job. For example to update your mirror every day at 00:00, you can add the @@ -27,8 +27,8 @@ following entry to your `/etc/crontab`: 0 0 * * * matter-mirror -u -o ``` -# List -This section contains information about different MatterLinux repo and mirros +# Mirror lists +This section contains information about different MatterLinux pools and mirros that you can use. To add your mirror to this list get in contact with the maintainer/developers. > **Note** @@ -38,13 +38,13 @@ that you can use. To add your mirror to this list get in contact with the mainta > **DO NOT USE THAT MIRROR** and report it to the maintainer/developers in order to remove it > from the list. -### Official repos -| Repo | URI | Location | -| ------- | -------------------------------------- | ----------- | -| base | `https://pkgs.matterlinux.xyz/base` | 🇹🇷 Turkey | -| desktop | `https://pkgs.matterlinux.xyz/desktop` | 🇹🇷 Turkey | -| base | `https://next.matterlinux.xyz/base` | 🇹🇷 Turkey | -| desktop | `https://next.matterlinux.xyz/desktop` | 🇹🇷 Turkey | +### Official pools +| Pool | MPTP | HTTP(S) | Location | +| ------- | -------------------------------------- | ----------------------------------------- | ----------- | +| base | `mptp://pkgs.matterlinux.xyz/base` | `https://pkgs.matterlinux.xyz/base` | 🇹🇷 Turkey | +| desktop | `mptp://pkgs.matterlinux.xyz/desktop` | `https://pkgs.matterlinux.xyz/desktop` | 🇹🇷 Turkey | +| base | `mptp://next.matterlinux.xyz/base` | `https://next.matterlinux.xyz/base` | 🇹🇷 Turkey | +| desktop | `mptp://next.matterlinux.xyz/desktop` | `https://next.matterlinux.xyz/desktop` | 🇹🇷 Turkey | ### Mirrors Currently there are no available mirrors. diff --git a/wiki/pkg/packages.json b/wiki/pkg/packages.json new file mode 100644 index 0000000..5287072 --- /dev/null +++ b/wiki/pkg/packages.json @@ -0,0 +1,6 @@ +{ + "id": "packages", + "title": "Packages", + "author": "ngn", + "date": "19/06/24" +} diff --git a/wiki/pkg/pkg.md b/wiki/pkg/packages.md similarity index 59% rename from wiki/pkg/pkg.md rename to wiki/pkg/packages.md index 6b4f629..7e9cf5f 100644 --- a/wiki/pkg/pkg.md +++ b/wiki/pkg/packages.md @@ -1,8 +1,8 @@ -A MatterLinux package is a compiled files of a software, tool or a library. +On this page, you will find information about MatterLinux packages. # Format MatterLinux packages uses the **M**atterLinux **P**ackaging **F**ormat, `MPF`. Don't let fancy name -mislead you, a basic `MPF` file is just a renamed `TAR GZ` archive. The reason that packages use the +mislead you, a basic `MPF` file is just a renamed Gunziped TAR archive. The reason that packages use the `.mpf` extension and not the `.tar.gz` extension is to make it easier to recognize and easier to work with in the scripts and the tools. @@ -11,11 +11,32 @@ A package is named after the software and the version of that software that it p example package containing `bash` version `5.2.15` is named `bash_5.2.15.mpf`. ### Structure -File structure of a package matches with the MatterLinux root file structure. This is important -as a package will most likely be extracted in a MatterLinux root file system. +File structure of a package follows this format: +``` +package_1.0.mpf +├── DATA +├── CHANGES +├── INSTALL +├── HASHES +└── files.tar.gz +``` +Let's break this down: +- `DATA`: An `.ini` formatted file, contains information about package name, version, description, +dependencies, files to keep (save) during update/removal and SHA256 hash of the `MPF` file. +- `CHANGES`: A changelog file, each version's changelog is split with 3 newlines (`\n\n\n`) +- `INSTALL`: An optional shell script. If it exists, then should be ran after the installation. This file +is also named the "install script". +- `HASHES`: Contains MD5 hashes of every file in the `files.tar.gz` archive. Summaries are +followed by a white space (` `) and the full file path. These paths do not start with `/`, +also they do not end with a `/`. +- `files.tar.gz`: The actual files that the package contains, which should be installed. -For example, we can take a look at the `which` package, to do this you can download the `MPF` file -and list its contents with the `tar tf` command: +File structure of the `files.tar.gz` archive matches with the MatterLinux root file structure. This is important +as this archive will most likely be extracted in a MatterLinux root file system. + +For example, we can take a look at the `which` package, to do this you can download the `MPF` file, +extract it in a temporary folder, and list the contents of `files.tar.gz` with the `tar tf files.tar.gz` +command: ``` usr/ usr/share/ @@ -29,53 +50,31 @@ usr/bin/ usr/bin/which ``` -### Install Scripts -Some packages may contain an install script, `install.sh`, this shell script is ran by the +### Install scripts +Some packages may contain an install script, `INSTALL`, this shell script is ran by the [MatterLinux Package Manager (`mp`)](/wiki/package_man) using the bash shell, right after the -extraction. +extraction of `files.tar.gz`. This script is used to do post-install actions, such as adding users, groups etc. -This script is located at the root of the package. For example let's take a look -at the `systemd` package: -``` -... -etc/X11/xinit/ -etc/X11/xinit/xinitrc.d/ -etc/X11/xinit/xinitrc.d/50-systemd-user.sh -etc/credstore.encrypted/ -install.sh -usr/ -usr/lib/ -usr/lib/libudev.so -usr/lib/libnss_resolve.so.2 -... -``` - -# Usage +# Working with packages While installing a package using the [MatterLinux Package Manager (`mp`)](/wiki/package_man), `mp` -downloads the target package(s) from the repos, these packages are in the format discussed above. +downloads the target package(s) from the pools, these packages are in the format discussed above. After downloading and verifying the target package(s), `mp` extracts the packages using `libarchive`. To learn more about this process see the [page for package management](/wiki/package_man). -It's also possible to install packages manually. To do this you can grab a package you want -and extract it to your the root directory by running: `tar xvf -C /` +### Building packages +Package are built with the `mp-build` tool. In order to build a package, you will need the source +of the package, which can be found in the source tree of the pool which contains the package. -# Building -Package are built with the `mp-repo` tool. In order to build a package, you will need the source -for the repo that contains the package. This is because a package itself does not store any metadata, -this is all handled by the repo. +After obtaining the source, package can be simply built by running: +``` +$ mp-build +``` -To learn more about the `mp-repo` tool, and how you can use it to build packages, see the -[repo package](/wiki/repo). - -### Package Source -Source code for a packages can be found in the source code of the repo that the package is in. -Source files for a repo will be located under the `src` directory. - -### Package Script +### Package scripts Each package source contains a `pkg.sh` shell script. This is the source script that is used to -build the package. In the build process, this shell script gets imported by the `mp-repo` tool +build the package. In the build process, this shell script gets sourced by the `mp-build` tool using the `source` command. Let's take a closer look at a `pkg.sh` file: @@ -105,24 +104,29 @@ it provides. Preferably the name should not contain `_` to avoid confusion with - `DESC`: A short description about the software, tool or the library that package provides. Explain what it does, what it contains etc. - `VERSION`: Version of the software, tool or library the package provides. If you are using a -git commit version, you can name the version `LAST_VERSION+COMMIT_ID` +git commit version, you can name the version `LAST_VERSION+FIRST_7_CHARS_OF_COMMIT_ID` - `FILES`: Upstream files and patches needed to build this package, you can use `http`, `https` or `ftp` protocols. -You can also specify multiple files. These files will be downloaded by `mp-repo` in the build +You can also specify multiple files. These files will be downloaded by `mp-build` in the build process. -- `HASHES`: Hashes for the files you specify. You can use `MD5`, `SHA1`, `SHA256` or `SHA512` sums. +- `HASHES`: Hashes for the files you specify. You can use `MD5`, `SHA1`, `SHA256` or `SHA512` hashes. And yes, you need to specify hashes for all the files, using the same order with the `FILES` variable. +You can also specify `NOHASH` instead of a hash if you want to skip hash checking for a file. - `DEPENDS`: Package(s) that this package depends on. +There are also other options that are not present in this example: +- `KEEP`: A list of files to keep during the update/removal of the package +- `BUILD`: A list packages required for building this package + Now let's take a look at the `build` function. Each package needs a `build` function, this -function is called by `mp-repo` after downloading and verifying all the packages. It will be +function is called by `mp-build` after downloading and verifying all the packages. It will be called in the `$ROOTDIR`. This directory will contain all the downloaded files, any files in this directory will be included into the build, so don't forget to cleanup. > **Note** > > You don't need to cleanup the downloaded files in the package script, -> they will be cleaned by the `mp-repo`. +> they will be cleaned by the `mp-build`. - `tar xf $NAME-$VERSION.tar.gz`: Extract the downloaded archive file. - `cd $NAME-$VERSION`: Change directory into the extracted directory. @@ -133,6 +137,5 @@ also check out [LFS](https://www.linuxfromscratch.org/lfs/view/12.0-systemd/) an into the `$ROOTDIR` and not the root file system. - `cd .. && rm -rf $NAME-$VERSION`: Change directory back into `$ROOTDIR` and clean the extracted archive. -Check out [`base`](https://git.matterlinux.xyz/Matter/base) and -[`desktop`](https://git.matterlinux.xyz/Matter/desktop) repo sources for more -example `pkg.sh` scripts. +Check out [`base`](https://git.matterlinux.xyz/Matter/base) and [`desktop`](https://git.matterlinux.xyz/Matter/desktop) +pool sources for more example `pkg.sh` scripts. diff --git a/wiki/pkg/pkg.json b/wiki/pkg/pkg.json deleted file mode 100644 index b36e287..0000000 --- a/wiki/pkg/pkg.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "id": "package", - "title": "Package", - "author": "ngn", - "date": "06/01/24" -} diff --git a/wiki/pkg/pool_guides.json b/wiki/pkg/pool_guides.json new file mode 100644 index 0000000..554b2b4 --- /dev/null +++ b/wiki/pkg/pool_guides.json @@ -0,0 +1,6 @@ +{ + "id": "pool_guides", + "title": "Pool guidelines", + "author": "ngn", + "date": "19/06/24" +} diff --git a/wiki/pkg/pool_guides.md b/wiki/pkg/pool_guides.md new file mode 100644 index 0000000..3af2eb2 --- /dev/null +++ b/wiki/pkg/pool_guides.md @@ -0,0 +1,20 @@ +Packages in the official MatterLinux pools (should) follow these guidelines: + +- **Packaged software should be free or/and open source**: Proprietary software won't be included +to the pools. No exceptions. If you find a proprietary software package in the official pools, +please create an issue or a pull request on the related Git repository to remove the package. +- **Packaged software should be stable**: Software known to be unstable will not packaged, +if the stability is related to the version of the software, we may package a different/patched +version of the software. +- **Packaged software should be secure**: Outdated software that has critical vulnerabilities +will not be packaged. +- **Packaged software should be (somewhat) popular**: No, we are not gonna package some random window +manager that only has 3 users and was last updated in 1993. + +The following software packages will **NOT** be added, so do not waste your time with PRs or issues: +- DWM or other Suckless tools that are configured using header files +- Any Wayland only window managers ("compositors"), status bars, terminals etc. We only have Weston which used for testing the Wayland environment +- Other init systems (`dinit`, `runit` etc.) +- Non-libre kernel +- Other third-party package managers (apt, dnf, pacman etc.), however containerized package managers can +be packaged (except for snap, f*%#! snap) diff --git a/wiki/pkg/pools.json b/wiki/pkg/pools.json new file mode 100644 index 0000000..f2bb008 --- /dev/null +++ b/wiki/pkg/pools.json @@ -0,0 +1,6 @@ +{ + "id": "pools", + "title": "Pools", + "author": "ngn", + "date": "19/06/24" +} diff --git a/wiki/pkg/pools.md b/wiki/pkg/pools.md new file mode 100644 index 0000000..fde5b42 --- /dev/null +++ b/wiki/pkg/pools.md @@ -0,0 +1,150 @@ +On this page, you will find information about MatterLinux package pools. + +# Structure +A pool contains: + +- [Packages](/wiki/packages) (`.mpf` files) +- Package signatures (`.mpf.sig` files) +- Pool info file (`INFO`) +- Package list file (`LIST`) + +### Package files and signatures +MatterLinux pools contain at least two package. Each package also has a PGP signature +that can be used to verify the package. These signatures belong to public key fingerprint +specified in the pool metadata. + +### Pool info file +Pool info file contains information about the pool itself. This information includes +- Pool name +- Pool size +- Pool maintainer +- Pool public key (used for package signatures) + +This info file can be found in the at the root of the pool. For example the pool info file +for `https://pkgs.matterlinux.xyz/base` is located at `https://pkgs.matterlinux.xyz/base/INFO`. +`INI` format is used for this file. + +### Package list file +A list containing all the package information can be found in an archive file named `LIST`. +This file is located at the root of the pool. For example the package list for `https://pkgs.matterlinux.xyz/base` +is located at `https://pkgs.matterlinux.xyz/base/LIST`. + +This archive has the following structure: +``` +list +├── package-one_version +│ └── DATA +├── package-two_version +│ └── DATA +... +``` +The `DATA` file contains the information for that specific package and it's extracted from packages. +To learn more about these please check out the page for [packages](/wiki/packages). + +### Pool sources +Source for a pool has a simple structure. It also contains all the source files for all the packages in +that pool. For example lets take a look the structure of the [`base`](https://pkgs.matterlinux.xyz/base) +pool source: +``` +base +├── dist +│   ├── acl_2.3.1.mpf +│   ├── acl_2.3.1.mpf.sig +│   ├── INFO +│  ... +│   ├── LIST +│   ├── sed_4.9.mpf +│   ├── sed_4.9.mpf.sig +│  ... +├── LICENSE.txt +├── README.md +├── pool.sh +├── sign-dist.sh +└── src + ├── acl + │   └── pkg.sh + ├── attr + │   └── pkg.sh + ├── autoconf + │   └── pkg.sh + ├── automake + │   └── pkg.sh + ├── bash + │   ├── pkg.sh + │   ├── skelprof + │   └── skelrc + ... +``` +Let's break this down: + +- `LICENSE.txt`: License used for the pool. **All the packages in the pool should use a license +compatible with this license.** +- `README.md`: README file. Contains a small description about the pool. +- `pool.sh`: Pool script contains information about the pool, used to build the +pool info file. +- `src`: Contains package sources (package scripts, extra patches, configuration files etc.) +- `dist`: Contains the compiled (built) packages. +- `sign-dist.sh`: An extra shell script that you can find in the official pools. It is just a +small script that is used to sign all the packages in the `dist` directory if they are built +without the signatures. + +# Using different pools +MatterLinux releases offer 2 different pools, `base` and `desktop`. There are also development/testing +`base` and `desktop` pools (named "next"). URLs for these pools and the mirrors can be found at the [mirrors page](/wiki/mirrors). + +These pools can provide packages for users, these packages can be managed using the +[MatterLinux package manager (`mp`)](/wiki/mp). + +### Building an already existing pool +To build an already existing pool, such as the `base` or the `desktop` pool, first you will need to +download the pool's source. Source for the `base` and the `desktop` pool can be found on [MatterLinux Git Server](https://git.matterlinux.xyz/matter). + +After downloading the pool source, you will need to install the `mp-pool` tool, which is the tool +used for building MatterLinux pools. To do so please follow the steps [here](https://git.matterlinux.xyz/Matter/mp-pool#installation). + +Finally to build the pool: +``` +$ mp-pool +``` + +You will mostly likely want to disable package signing though, as you are probably not the +owner of the pool: +``` +$ mp-pool --no-sign +``` + +### Hosting pools +Unlike most of the package managers, `mp` does not use HTTP, FTP or RSYNC to communicate with the pools. It has it's own +custom protocol named [MPTP](/wiki/mptp). Pools are hosted over this protocol using [pooler](https://git.matterlinux.xyz/matter/pooler). + +To get host a pool using `pooler`, download and install the `pooler` by following the instructions on the [README](https://git.matterlinux.xyz/matter/pooler). It's also in the official pools so you can install it with `mp` as well. +After installing it, you can simply host the pool by running: +``` +$ pooler +``` +This will start the MPTP server on port 0.0.0.0:5858. You can also host multiple pools by specifying them: +``` +$ pooler +``` +Note that each pool needs to have a unique name for in order to host multiple pools using the same +pooler instance. + +If you want to change the service address, you can do so by using the `-h` and the `-p` flag: +``` +$ pooler -h 0.0.0.0 -p 5566 +``` +You can also specify host names for your pools: +``` +$ pooler ::p1.example.com ::p2.example.com +``` + +### Creating a new pool +If you want to create an unofficial pool, setup the directory structure for the source pool as +explained above. Then create a `pool.sh` script, you can copy one from the official pools and +edit it. + +After adding your packages and building them with `mp-pool`, you can host it using pooler. +I suggest you also host them on a HTTP or a FTP server just to make them easier to access. +Doing so will also allow other people to use [`matter-mirror` tool to mirror your pool](/wiki/mirrors). + +Also you can add your unofficial pool to this wiki page [by creating an issue](https://git.matterlinux.xyz/Matter/content/issues). diff --git a/wiki/pkg/release.json b/wiki/pkg/releases.json similarity index 52% rename from wiki/pkg/release.json rename to wiki/pkg/releases.json index 62a8a01..8d61220 100644 --- a/wiki/pkg/release.json +++ b/wiki/pkg/releases.json @@ -1,6 +1,6 @@ { - "id": "release", + "id": "releases", "title": "Releases", "author": "ngn", - "date": "05/05/24" + "date": "19/06/24" } diff --git a/wiki/pkg/release.md b/wiki/pkg/releases.md similarity index 81% rename from wiki/pkg/release.md rename to wiki/pkg/releases.md index b3908c5..07a80a6 100644 --- a/wiki/pkg/release.md +++ b/wiki/pkg/releases.md @@ -1,23 +1,22 @@ On this page, you will find information about MatterLinux release cycle and version numbering. -## Release Cycle +## Release cycle The release cycle is pretty simple, if there are enough package updates and changes, -then you get a new release. So its expected to have a release or two once a month. +then you get a new release. So its expected to have a release or once a month. -### Package Updates +### Package updates MatterLinux follows a slow rolling release cycle for all the packages. Packages update every once in a while, generally to fix security issues. Packages get tested on a development repo, [next.matterlinux.xyz](https://next.matterlinux.xyz) before they get pushed into the main repos. This way we can maintain a stable experience. -### ISOs and Release Archives +### ISOs and release archives - ISO: A bootable disk image - Release Archive: An archive used during the installation of a release -With new release, a new ISO and a release archive will be published. ISO and release -archive file for a release may update before the next release to keep the -packages in these archive files and the ISOs up-to-date. +With new release, a new ISO and a release archive will be published. This way +the packages in these ISO and archive files will always be up-to-date. ### Learn the version you are using You can learn the MatterLinux release version you are using by printing @@ -26,7 +25,7 @@ out the `/etc/os-release` file: # cat /etc/os-release ``` -## Version Numbering +## Version numbering MatterLinux and all it's projects are version numbered after the year. For example MatterLinux release for the year 2024 is versioned "MatterLinux 24". @@ -36,13 +35,15 @@ MatterLinux 24 ISO would be named "MatterLinux 24.01". Similarly 15th release of the MatterLinux package manager for the year 2024 is versioned "24.14". -## Building Releases -You can build an up-to-date ISO and a release archive using MatterLinux [tools](https://git.matterlinux.xyz/matter/tools). -These tools can be installed with the `tools` package. +## Building releases +You can build an up-to-date ISO and a release archives using [MatterLinux tools](https://git.matterlinux.xyz/matter/tools). +These tools also can be installed with the `tools` package. -You should be on a MatterLinux system for a proper build! +> **Important** +> +> You should be on a MatterLinux system for a proper build! -### Building the Release Archive +### Building the release archive To build a release archive, you can use the `matter-base` tool. This tool will create a temporary directory, install all the required base packages into it and then it will archive it all up for the final archive. diff --git a/wiki/pkg/repo.json b/wiki/pkg/repo.json deleted file mode 100644 index 14b084c..0000000 --- a/wiki/pkg/repo.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "id": "repo", - "title": "Repo", - "author": "ngn", - "date": "21/02/24" -} diff --git a/wiki/pkg/repo.md b/wiki/pkg/repo.md deleted file mode 100644 index aba0498..0000000 --- a/wiki/pkg/repo.md +++ /dev/null @@ -1,111 +0,0 @@ -A MatterLinux repo is a FTP or web server that contains unique [packages](/wiki/package). - -# Structure -A repo contains: - -- Packages (`.mpf`) -- Package signatures (`.mpf.sig`) -- Repo metadata -- Package list - -### Package Files and Signatures -MatterLinux repos contain at least two package. Each package also has a PGP signature -that can be used to verify the package. These signatures belong to public key fingerprint -specified in the repo metadata. - -### Repo Metadata -Repo metadata contains information about the repo itself. Such as the repo name, -author and the public key used to sign the packages. - -This metadata can be found in the `repo` file at the root of the repo. For example -the repo metadata for `https://pkgs.matterlinux.xyz/base` is located at -`https://pkgs.matterlinux.xyz/base/repo`. `INI` format is used for this metadata file. - -### Package List -A list containing all packages and all the package metadata can be found in an -archive file named after the repo. For example the package list for -`https://pkgs.matterlinux.xyz/base` is located at `https://pkgs.matterlinux.xyz/base/base.tar.gz`. - -This archive file contains a file named `pkgs`, which contains repo package list in the -`INI` format. It contains the package names, descriptions, versions, sums and dependencies. - -### Repo Source -Source for a repo has a simple structure that also contains all the source files for the packages. -For example lets take a look the structure of the [`base`](https://pkgs.matterlinux.xyz/base) -repo source: -``` -├── dist -│   ├── acl_2.3.1.mpf -│   ├── acl_2.3.1.mpf.sig -│   ├── base.tar.gz -│  ... -│   ├── repo -│   ├── sed_4.9.mpf -│   ├── sed_4.9.mpf.sig -│  ... -├── LICENSE.txt -├── README.md -├── repo.sh -├── sign-dist.sh -└── src - ├── acl - │   └── pkg.sh - ├── attr - │   └── pkg.sh - ├── autoconf - │   └── pkg.sh - ├── automake - │   └── pkg.sh - ├── bash - │   ├── pkg.sh - │   ├── skelprof - │   └── skelrc - ... -``` -Let's break this down: - -- `LICENSE.txt`: License used for the repo. **All the packages in the repo should use a license -compatible with this license.** -- `README.md`: README file. Contains a small description about the repo. -- `repo.sh`: Repo script contains information about the repo, later used to build the -repo metadata. -- `src`: Contains package sources (package scripts, extra patches, configuration files etc.) -- `dist`: Contains the compiled (built) packages. -- `sign-dist.sh`: An extra shell script that you can find in the official repos. It is just a -small script that is used to sign all the packages in the `dist` directory if they are built -without the signatures. - -# Usage -MatterLinux releases offer 2 different repos, `base` and `desktop`. There are also development/testing -`base` and `desktop` repos ("next repos"). URLs for these repos and the mirrors can be found at the [mirrors page](/wiki/mirrors). - -This repos can provide packages for users, these packages can be managed using the -[MatterLinux Package Manager (`mp`)](https://git.matterlinux.xyz/matter/mp). For more information see the page for [package management](/wiki/package_man). - -### Building an already existing repo -To build an already existing repo, such as the `base` or the `desktop` repo, first you will need to -download the repos source. Source for the `base` and the `desktop` repo can be found on -[MatterLinux Git Server](https://git.matterlinux.xyz/matter). - -After downloading the repo source, you will need to install the `mp-repo` tool, which is the tool -used for building MatterLinux repos. To do so please follow the steps [here](https://git.matterlinux.xyz/Matter/mp-repo#installation). - -Finally to build the repo: -``` -$ mp-repo -``` - -You will mostly likely want to disable package signing though, as you are probably not the -owner of the repo: -``` -$ mp-repo --no-sign -``` - -### Creating a new repo -If you want to create an unofficial repo, setup the folder structure for the source repo as -explained above. Then create a repo script, you can copy one from the official repos and -edit it. - -After adding your packages and building them with `mp-repo`, you can host them on an FTP -or a web server to make it available to other people. Also you can add this unofficial repo -to this wiki page [by creating an issue](https://git.matterlinux.xyz/Matter/content/issues). diff --git a/wiki/pkg/repo_guide.json b/wiki/pkg/repo_guide.json deleted file mode 100644 index 0e2febe..0000000 --- a/wiki/pkg/repo_guide.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "id": "repo_guide", - "title": "Repo Guidelines", - "author": "ngn", - "date": "23/02/24" -} diff --git a/wiki/pkg/repo_guide.md b/wiki/pkg/repo_guide.md deleted file mode 100644 index cffc1fe..0000000 --- a/wiki/pkg/repo_guide.md +++ /dev/null @@ -1,18 +0,0 @@ -Packages in the official MatterLinux repos follow these guidelines: - -- **Packaged software should be free or/and open source**: Proprietary software won't be included -to the repos. However, we **may** make exceptions for the drivers. -- **Packaged software should be stable**: Software known to be unstable will not packaged, -if the stability is related to the version of the software, we may package a different/patched -version of the software. -- **Packaged software should be secure**: Outdated software that has critical vulnerabilities -will not be packaged. -- **Packaged software should be (somewhat) popular**: No, we are not gonna package some random -ass window manager that only has 3 users and was last updated in 1993 - -The following software packages will not be added, so do not waste your time with PRs or issues: -- DWM or other Suckless tools that are configured using header files -- Any Wayland window managers ("compositors"), we only have Weston which used for testing the Wayland environment -- Other init systems (`sysvinit`, `runit` etc.) -- Non-libre kernel -- Snap