116 lines
4.5 KiB
Markdown
116 lines
4.5 KiB
Markdown
A MatterLinux repo is a FTP or web server that contains unique [packages](/wiki/pkg)
|
|
|
|
# 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 provides 2 different official repos:
|
|
|
|
- [`base`](https://pkgs.matterlinux.xyz/base): Contains base system packages such as `glibc`, `systemd`,
|
|
`linux` etc.
|
|
- [`desktop`](https://pkgs.matterlinux.xyz/desktop): Additional packages users may want to install
|
|
for a more ideal desktop system.
|
|
|
|
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).
|