mirror of
https://github.com/house-of-vanity/house-of-vanity.github.io.git
synced 2025-07-07 08:44:07 +00:00
98 lines
2.3 KiB
Markdown
98 lines
2.3 KiB
Markdown
+++
|
|
title = "Own Arch Linux Repository"
|
|
date = "2020-07-14"
|
|
description = "self-hosted repository for your own Arch Linux packages"
|
|
|
|
[taxonomies]
|
|
tags = ["linux", "nginx", "selfhosting"]
|
|
|
|
[extra]
|
|
author = { name = "@ultradesu", social= "https://github.com/house-of-vanity" }
|
|
+++
|
|
|
|
## Prerequisites
|
|
* Ubuntu Server with Nginx and Docker
|
|
---
|
|
|
|
## Creating repository
|
|
|
|
Repository database is managed via `repo-add` script bundled with Arch Linux `pacman` package manager. Since pacman is not available in Ubuntu repository I use docker `archlinux` image for managing repository. This guide assumes that repository located in `/srv/arch-repo`. First of all move all your packages into /srv/arch-repo. Following command will create or update repository database.
|
|
|
|
```sh
|
|
REPO_URL=repo.sun.hexor.ru
|
|
REPO_PATH=/srv/arch-repo
|
|
docker run -v ${REPO_PATH}:/repo --rm archlinux \
|
|
bash -c "repo-add /repo/${REPO_URL}.db.tar.gz /repo/*pkg.tar.zst"
|
|
```
|
|
|
|
### **Important aspect**
|
|
* Name of the database should be REPO_URL.db.tar.gz, in this case REPO_URL is repo.sun.hexor.ru.
|
|
---
|
|
|
|
## Periodically database repo update
|
|
|
|
I use systemd:
|
|
```ini
|
|
# Service unit
|
|
# /etc/systemd/system/update-arch-repo.service
|
|
[Unit]
|
|
Description=Updating arch linux repository database for %I
|
|
Requires=docker.service
|
|
|
|
[Service]
|
|
ExecStart=/usr/bin/docker run -v /srv/arch-repo:/repo --rm archlinux bash -c "repo-add /repo/%i.db.tar.gz /repo/*pkg.tar.zst"
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
```ini
|
|
# Timer unit
|
|
# /etc/systemd/system/update-arch-repo.timer
|
|
[Unit]
|
|
Description=Schedule arch repo database update for %I
|
|
|
|
[Timer]
|
|
# every 15 minutes
|
|
OnCalendar=*:0/15
|
|
|
|
[Install]
|
|
WantedBy=timers.target
|
|
```
|
|
|
|
Activate timer:
|
|
```sh
|
|
REPO_URL=repo.sun.hexor.ru
|
|
systemctl enable update-arch-repo@${REPO_URL}.timer
|
|
```
|
|
|
|
## Reverse proxy for HTTPS access
|
|
|
|
I use NGINX
|
|
```js
|
|
server {
|
|
server_name repo.sun.hexor.ru;
|
|
listen [::]:443 ssl;
|
|
listen 443 ssl;
|
|
include security.conf; # my security options
|
|
include letsencrypt.conf; # my ssl config.
|
|
root /srv/arch-repo;
|
|
location / {
|
|
autoindex on;
|
|
try_files $uri $uri/ =404;
|
|
}
|
|
access_log /var/log/nginx/logs/repo.sun.hexor.ru.access.log custom;
|
|
error_log /var/log/nginx/logs/repo.sun.hexor.ru.error.log;
|
|
}
|
|
```
|
|
|
|
## Configure repo on your machines
|
|
|
|
Add your repo to `/etc/pacman.conf`:
|
|
|
|
```ini
|
|
[repo.sun.hexor.ru]
|
|
Server = https://repo.sun.hexor.ru
|
|
```
|
|
|