update: bunch of changes incoming
This commit is contained in:
parent
6273a33a72
commit
501f723edd
@ -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"
|
||||||
}
|
}
|
||||||
|
24
wiki/main.md
24
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 |
|
| [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 |
|
||||||
|
@ -2,5 +2,5 @@
|
|||||||
"id": "mirrors",
|
"id": "mirrors",
|
||||||
"title": "Mirrors",
|
"title": "Mirrors",
|
||||||
"author": "ngn",
|
"author": "ngn",
|
||||||
"date": "05/05/24"
|
"date": "19/06/24"
|
||||||
}
|
}
|
||||||
|
@ -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
6
wiki/pkg/packages.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"id": "packages",
|
||||||
|
"title": "Packages",
|
||||||
|
"author": "ngn",
|
||||||
|
"date": "19/06/24"
|
||||||
|
}
|
@ -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.
|
|
@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "package",
|
|
||||||
"title": "Package",
|
|
||||||
"author": "ngn",
|
|
||||||
"date": "06/01/24"
|
|
||||||
}
|
|
6
wiki/pkg/pool_guides.json
Normal file
6
wiki/pkg/pool_guides.json
Normal 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
20
wiki/pkg/pool_guides.md
Normal 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
6
wiki/pkg/pools.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"id": "pools",
|
||||||
|
"title": "Pools",
|
||||||
|
"author": "ngn",
|
||||||
|
"date": "19/06/24"
|
||||||
|
}
|
150
wiki/pkg/pools.md
Normal file
150
wiki/pkg/pools.md
Normal 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).
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"id": "release",
|
"id": "releases",
|
||||||
"title": "Releases",
|
"title": "Releases",
|
||||||
"author": "ngn",
|
"author": "ngn",
|
||||||
"date": "05/05/24"
|
"date": "19/06/24"
|
||||||
}
|
}
|
@ -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.
|
||||||
|
|
@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "repo",
|
|
||||||
"title": "Repo",
|
|
||||||
"author": "ngn",
|
|
||||||
"date": "21/02/24"
|
|
||||||
}
|
|
111
wiki/pkg/repo.md
111
wiki/pkg/repo.md
@ -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).
|
|
@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "repo_guide",
|
|
||||||
"title": "Repo Guidelines",
|
|
||||||
"author": "ngn",
|
|
||||||
"date": "23/02/24"
|
|
||||||
}
|
|
@ -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
|
|
Loading…
Reference in New Issue
Block a user