update: bunch of changes incoming

This commit is contained in:
ngn 2024-06-19 16:36:15 +03:00
parent 6273a33a72
commit 501f723edd
17 changed files with 291 additions and 244 deletions

View File

@ -1,6 +1,6 @@
{ {
"id": "main", "id": "main",
"title": "Welcome to MatterLinux Wiki!", "title": "Welcome to MatterLinux wiki!",
"author": "ngn", "author": "ngn",
"date": "06/01/24" "date": "19/06/24"
} }

View File

@ -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 | | [Post-Installation](/wiki/post_install) | Make your system (somewhat) usable |
## Packaging ## Packaging
| Name | Description | | Name | Description |
| --------------------------------------- | ---------------------------------------------------------------- | | --------------------------------------------- | -------------------------------------------------------------------------- |
| [Releases](/wiki/release) | Learn about MatterLinux release cycle | | [Releases](/wiki/releases) | Learn about MatterLinux release cycle |
| [Repo](/wiki/repo) | Learn about MatterLinux repos and how they work | | [Packages](/wiki/packages) | Learn about MatterLinux packages |
| [Package](/wiki/package) | Learn about MatterLinux packages | | [Pools](/wiki/pools) | Learn about MatterLinux package pools |
| [Repo Guidelines](/wiki/repo_guide) | Package guidelines for the official repos | | [Mirrors](/wiki/mirrors) | Discover pool mirros and learn how you can setup your own |
| [Create a package](/wiki/create_pkg) | Learn how you can create and add a package to the official repos | | [Pool Guidelines](/wiki/pool_guides) | Package guidelines for the official pools |
| [Package Management](/wiki/package_man) | Learn about MatterLinux package manager | | [Create a packages](/wiki/create_packages) | Learn how you can create and add a package to the official repos |
| [Mirrors](/wiki/mirrors) | Discover repo mirrors and learn how you can setup one | | [Working with mp](/wiki/mp) | Learn how to manage packages with MatterLinux package manager (`mp`) |
| [Working with `mc`](/wiki/mc) | Learn how you can use `mc` to install and package your configs | | [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 ## Other
| Name | Description | | 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 | | [Contributing](/wiki/contribute) | Learn how you can contribute to MatterLinux |
| [Bugs](/wiki/bugs) | Learn how you can report bugs/issues | | [Bugs](/wiki/bugs) | Learn how you can report bugs/issues |
| [Licensing](/wiki/licensing) | Licensing for the MatterLinux repositories and software | | [Licensing](/wiki/licensing) | Licensing for the MatterLinux repositories and software |

View File

@ -2,5 +2,5 @@
"id": "mirrors", "id": "mirrors",
"title": "Mirrors", "title": "Mirrors",
"author": "ngn", "author": "ngn",
"date": "05/05/24" "date": "19/06/24"
} }

View File

@ -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 # Using different mirrors
To use a mirror with `mp`, change the repo URI for the target repo in your `mp` To use a mirror with `mp`, change the pool URL for the target pool in your `mp`
configuration file (`/etc/mp/cfg`). configuration file (`/etc/mp/cfg`).
### Creating a mirror ### Creating a mirror
To create a mirror you can use the `matter-mirror` tool. This tool is a part of the [MatterLinux `tools` 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` 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 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` repo from into the output directory). For example to mirror the `base` pool from `https://pkgs.matterlinux.xyz/base`
`https://pkgs.matterlinux.xyz/base` to `base_mirror` directory: to `base_mirror` directory:
``` ```
$ mkdir base_mirror $ mkdir base_mirror
$ matter-mirror -u https://pkgs.matterlinux.xyz/base -o 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 To serve the mirror, you can setup [`pooler`](https://git.matterlinux.xyz/matter/pooler).
server such as `pure-ftpd`. 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 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 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 * * * <user> matter-mirror -u <url> -o <output dir path> 0 0 * * * <user> matter-mirror -u <url> -o <output dir path>
``` ```
# List # Mirror lists
This section contains information about different MatterLinux repo and mirros 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. that you can use. To add your mirror to this list get in contact with the maintainer/developers.
> **Note** > **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 > **DO NOT USE THAT MIRROR** and report it to the maintainer/developers in order to remove it
> from the list. > from the list.
### Official repos ### Official pools
| Repo | URI | Location | | Pool | MPTP | HTTP(S) | Location |
| ------- | -------------------------------------- | ----------- | | ------- | -------------------------------------- | ----------------------------------------- | ----------- |
| base | `https://pkgs.matterlinux.xyz/base` | 🇹🇷 Turkey | | base | `mptp://pkgs.matterlinux.xyz/base` | `https://pkgs.matterlinux.xyz/base` | 🇹🇷 Turkey |
| desktop | `https://pkgs.matterlinux.xyz/desktop` | 🇹🇷 Turkey | | desktop | `mptp://pkgs.matterlinux.xyz/desktop` | `https://pkgs.matterlinux.xyz/desktop` | 🇹🇷 Turkey |
| base | `https://next.matterlinux.xyz/base` | 🇹🇷 Turkey | | base | `mptp://next.matterlinux.xyz/base` | `https://next.matterlinux.xyz/base` | 🇹🇷 Turkey |
| desktop | `https://next.matterlinux.xyz/desktop` | 🇹🇷 Turkey | | desktop | `mptp://next.matterlinux.xyz/desktop` | `https://next.matterlinux.xyz/desktop` | 🇹🇷 Turkey |
### Mirrors ### Mirrors
Currently there are no available mirrors. Currently there are no available mirrors.

6
wiki/pkg/packages.json Normal file
View File

@ -0,0 +1,6 @@
{
"id": "packages",
"title": "Packages",
"author": "ngn",
"date": "19/06/24"
}

View File

@ -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 # Format
MatterLinux packages uses the **M**atterLinux **P**ackaging **F**ormat, `MPF`. Don't let fancy name 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 `.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. 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`. example package containing `bash` version `5.2.15` is named `bash_5.2.15.mpf`.
### Structure ### Structure
File structure of a package matches with the MatterLinux root file structure. This is important File structure of a package follows this format:
as a package will most likely be extracted in a MatterLinux root file system. ```
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 File structure of the `files.tar.gz` archive matches with the MatterLinux root file structure. This is important
and list its contents with the `tar tf` command: 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/
usr/share/ usr/share/
@ -29,53 +50,31 @@ usr/bin/
usr/bin/which usr/bin/which
``` ```
### Install Scripts ### Install scripts
Some packages may contain an install script, `install.sh`, this shell script is ran by the 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 [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 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 # Working with packages
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
While installing a package using the [MatterLinux Package Manager (`mp`)](/wiki/package_man), `mp` 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`. 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). 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 ### Building packages
and extract it to your the root directory by running: `tar xvf <package_version.mpf> -C /` 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 After obtaining the source, package can be simply built by running:
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, $ mp-build <package dir>
this is all handled by the repo. ```
To learn more about the `mp-repo` tool, and how you can use it to build packages, see the ### Package scripts
[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
Each package source contains a `pkg.sh` shell script. This is the source script that is used to 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. using the `source` command.
Let's take a closer look at a `pkg.sh` file: 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. - `DESC`: A short description about the software, tool or the library that package provides.
Explain what it does, what it contains etc. Explain what it does, what it contains etc.
- `VERSION`: Version of the software, tool or library the package provides. If you are using a - `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` - `FILES`: Upstream files and patches needed to build this package, you can use `http`, `https`
or `ftp` protocols. 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. 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. 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. - `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 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 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. in this directory will be included into the build, so don't forget to cleanup.
> **Note** > **Note**
> >
> You don't need to cleanup the downloaded files in the package script, > 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. - `tar xf $NAME-$VERSION.tar.gz`: Extract the downloaded archive file.
- `cd $NAME-$VERSION`: Change directory into the extracted directory. - `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. into the `$ROOTDIR` and not the root file system.
- `cd .. && rm -rf $NAME-$VERSION`: Change directory back into `$ROOTDIR` and clean the extracted archive. - `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 Check out [`base`](https://git.matterlinux.xyz/Matter/base) and [`desktop`](https://git.matterlinux.xyz/Matter/desktop)
[`desktop`](https://git.matterlinux.xyz/Matter/desktop) repo sources for more pool sources for more example `pkg.sh` scripts.
example `pkg.sh` scripts.

View File

@ -1,6 +0,0 @@
{
"id": "package",
"title": "Package",
"author": "ngn",
"date": "06/01/24"
}

View File

@ -0,0 +1,6 @@
{
"id": "pool_guides",
"title": "Pool guidelines",
"author": "ngn",
"date": "19/06/24"
}

20
wiki/pkg/pool_guides.md Normal file
View File

@ -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)

6
wiki/pkg/pools.json Normal file
View File

@ -0,0 +1,6 @@
{
"id": "pools",
"title": "Pools",
"author": "ngn",
"date": "19/06/24"
}

150
wiki/pkg/pools.md Normal file
View File

@ -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 <pool dir>
```
You will mostly likely want to disable package signing though, as you are probably not the
owner of the pool:
```
$ mp-pool --no-sign <pool dir>
```
### 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 <pool dir>
```
This will start the MPTP server on port 0.0.0.0:5858. You can also host multiple pools by specifying them:
```
$ pooler <pool dir 1> <pool dir 2> <pool dir 3>
```
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 <pool dir>
```
You can also specify host names for your pools:
```
$ pooler <pool dir 1>::p1.example.com <pool dir 2>::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).

View File

@ -1,6 +1,6 @@
{ {
"id": "release", "id": "releases",
"title": "Releases", "title": "Releases",
"author": "ngn", "author": "ngn",
"date": "05/05/24" "date": "19/06/24"
} }

View File

@ -1,23 +1,22 @@
On this page, you will find information about MatterLinux release cycle and On this page, you will find information about MatterLinux release cycle and
version numbering. version numbering.
## Release Cycle ## Release cycle
The release cycle is pretty simple, if there are enough package updates and changes, 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 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, 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. [next.matterlinux.xyz](https://next.matterlinux.xyz) before they get pushed into the main repos.
This way we can maintain a stable experience. This way we can maintain a stable experience.
### ISOs and Release Archives ### ISOs and release archives
- ISO: A bootable disk image - ISO: A bootable disk image
- Release Archive: An archive used during the installation of a release - 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 With new release, a new ISO and a release archive will be published. This way
archive file for a release may update before the next release to keep the the packages in these ISO and archive files will always be up-to-date.
packages in these archive files and the ISOs up-to-date.
### Learn the version you are using ### Learn the version you are using
You can learn the MatterLinux release version you are using by printing 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 # cat /etc/os-release
``` ```
## Version Numbering ## Version numbering
MatterLinux and all it's projects are version numbered after the year. MatterLinux and all it's projects are version numbered after the year.
For example MatterLinux release for the year 2024 is versioned "MatterLinux 24". 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 Similarly 15th release of the MatterLinux package manager for the year 2024
is versioned "24.14". is versioned "24.14".
## Building Releases ## Building releases
You can build an up-to-date ISO and a release archive using MatterLinux [tools](https://git.matterlinux.xyz/matter/tools). You can build an up-to-date ISO and a release archives using [MatterLinux tools](https://git.matterlinux.xyz/matter/tools).
These tools can be installed with the `tools` package. 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, 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. install all the required base packages into it and then it will archive it all up for the final archive.

View File

@ -1,6 +0,0 @@
{
"id": "repo",
"title": "Repo",
"author": "ngn",
"date": "21/02/24"
}

View File

@ -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 <repo dir>
```
You will mostly likely want to disable package signing though, as you are probably not the
owner of the repo:
```
$ mp-repo --no-sign <repo dir>
```
### 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).

View File

@ -1,6 +0,0 @@
{
"id": "repo_guide",
"title": "Repo Guidelines",
"author": "ngn",
"date": "23/02/24"
}

View File

@ -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