Compare commits
9 Commits
31a6fe1a99
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| cef935dd44 | |||
| e4f5537d34 | |||
| 0afc9d7144 | |||
| 8fa6fff160 | |||
| 6b2202d82d | |||
| 51e8fa69de | |||
| 0c61c70f85 | |||
| 11809f93ad | |||
| be8731e48e |
24
.gitea/workflows/demo.yaml
Normal file
24
.gitea/workflows/demo.yaml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
|
||||||
|
name: Gitea Actions Demo
|
||||||
|
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
Build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
|
||||||
|
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
|
||||||
|
- run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
|
||||||
|
- name: Check out repository code
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
- run: |
|
||||||
|
cd ${{ gitea.workspace }}
|
||||||
|
- run: npm i
|
||||||
|
- run: npm run build
|
||||||
|
- run: ls build
|
||||||
|
- run: echo "🍏 This job's status is ${{ job.status }}."
|
||||||
@@ -17,6 +17,13 @@
|
|||||||
<nav>
|
<nav>
|
||||||
<a href="/">Home</a>
|
<a href="/">Home</a>
|
||||||
<a href="/about">About</a>
|
<a href="/about">About</a>
|
||||||
|
<a href="https://bsky.app/profile/amyt3a.bsky.social"
|
||||||
|
><svg fill="none" class="bsky" viewBox="0 0 64 57"
|
||||||
|
><path
|
||||||
|
fill="var(--rp-moon-pine)"
|
||||||
|
d="M13.873 3.805C21.21 9.332 29.103 20.537 32 26.55v15.882c0-.338-.13.044-.41.867-1.512 4.456-7.418 21.847-20.923 7.944-7.111-7.32-3.819-14.64 9.125-16.85-7.405 1.264-15.73-.825-18.014-9.015C1.12 23.022 0 8.51 0 6.55 0-3.268 8.579-.182 13.873 3.805ZM50.127 3.805C42.79 9.332 34.897 20.537 32 26.55v15.882c0-.338.13.044.41.867 1.512 4.456 7.418 21.847 20.923 7.944 7.111-7.32 3.819-14.64-9.125-16.85 7.405 1.264 15.73-.825 18.014-9.015C62.88 23.022 64 8.51 64 6.55c0-9.818-8.578-6.732-13.873-2.745Z"
|
||||||
|
></path></svg
|
||||||
|
></a
|
||||||
|
>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ to write new posts minimal. This is more a ressource summery with tips, than an
|
|||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
## Static side generation
|
# Static side generation
|
||||||
The stack consists of:
|
The stack consists of:
|
||||||
- [svelte + svelte-kit](https://svelte.dev/docs/kit/introduction)
|
- [svelte + svelte-kit](https://svelte.dev/docs/kit/introduction)
|
||||||
- [mdsvex](https://mdsvex.pngwn.io/)
|
- [mdsvex](https://mdsvex.pngwn.io/)
|
||||||
@@ -16,7 +16,7 @@ The core functionallity provides which allow you to combine svelte and markdown.
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Image sizing
|
# Image sizing
|
||||||
|
|
||||||
I want to be able to rezise an image in markdown without using HTML,
|
I want to be able to rezise an image in markdown without using HTML,
|
||||||
just like in obsidian, by declaring the width after the alt text ``.
|
just like in obsidian, by declaring the width after the alt text ``.
|
||||||
@@ -46,7 +46,7 @@ And then needs to be imported in the mdsvex layout:
|
|||||||
This is desctibed in furhter details by the [mdsvex docs](https://mdsvex.pngwn.io/docs#custom-components)
|
This is desctibed in furhter details by the [mdsvex docs](https://mdsvex.pngwn.io/docs#custom-components)
|
||||||
and this [issue](https://github.com/pngwn/MDsveX/discussions/292).
|
and this [issue](https://github.com/pngwn/MDsveX/discussions/292).
|
||||||
|
|
||||||
## Colors
|
# Colors
|
||||||
|
|
||||||
I love the [rose pine](https://rosepinetheme.com/) color palette. I use it privatly for some applications,
|
I love the [rose pine](https://rosepinetheme.com/) color palette. I use it privatly for some applications,
|
||||||
and think it improves this blog too.
|
and think it improves this blog too.
|
||||||
|
|||||||
138
src/routes/blogs/2-gitea-runner-on-podman-in-lxc/+page.svx
Normal file
138
src/routes/blogs/2-gitea-runner-on-podman-in-lxc/+page.svx
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
---
|
||||||
|
title: Setup up Gitea Runner with Podman in LXC
|
||||||
|
desc: "For some time now I already host a gitea instace and now with this blog I finally have some real usage for CI, but setting up gitea actions in an LXC and using Podman instead of Docker Engine was not as straight forward as expected."
|
||||||
|
date: 2025-09-17
|
||||||
|
---
|
||||||
|
|
||||||
|
# Setup PVE
|
||||||
|
|
||||||
|
|
||||||
|
Setup Proxmox, so podman can run in unpreviliged container.
|
||||||
|
Podman uses high user ids for it's containers, so we need to extend the range that is usable by LXCs.
|
||||||
|
|
||||||
|
|
||||||
|
It is also required to change the limit explictly in the containers config, and we need to add a kernel module.
|
||||||
|
Those ranges are defined in `/etc/subuid` for user ids and `/etc/subgid` for group ids,
|
||||||
|
in the from of `<usr>:<start_uid>:<count>`.
|
||||||
|
You could change them manually or change them with
|
||||||
|
|
||||||
|
(the first number defines the start and the secound the end of ids)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
usermod --add-subuids 100000-300000 --add-subgids 100000-300000 root
|
||||||
|
```
|
||||||
|
|
||||||
|
So `/etc/subuid` should contains `root:100000:200000`.
|
||||||
|
|
||||||
|
We also need to edit the LXC config `/etc/pve/lxc/<VMID>.conf`.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# <container_uid> <host_uid> <count>
|
||||||
|
lxc.idmap: u 0 100000 165536 # uids 0..165536 (container) -> 100000..265536 (host)
|
||||||
|
lxc.idmap: g 0 100000 165536 # gids
|
||||||
|
lxc.cgroup2.devices.allow: c 10:200 rwm # cgroup2 for PVE >= 7.0
|
||||||
|
lxc.mount.entry: /dev/net dev/net none bind,create=dir
|
||||||
|
```
|
||||||
|
|
||||||
|
I got the information from [here](https://forum.proxmox.com/threads/podman-in-rootless-mode-on-lxc-container.141790/)
|
||||||
|
together with infos from the [official docu](https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md#etcsubuid-and-etcsubgid-configuration).
|
||||||
|
|
||||||
|
|
||||||
|
# Setup LXC
|
||||||
|
|
||||||
|
As we want to run podman as an unpreviliged user, lets create on:
|
||||||
|
```bash
|
||||||
|
useradd -U <USER_NAME>
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt install podman
|
||||||
|
systemctl --user -M act@ enable podman.socket
|
||||||
|
```
|
||||||
|
|
||||||
|
First, since we wanna run this rootless, we need a new unpreviliged user.
|
||||||
|
|
||||||
|
The binary is [here available](https://dl.gitea.com/act_runner/).
|
||||||
|
I placed it there `/usr/local/bin/act_runner` and made it executable by the new created user.
|
||||||
|
```bash
|
||||||
|
cd /usr/local/bin
|
||||||
|
curl https://dl.gitea.com/act_runner/0.2.13/act_runner-0.2.13-linux-amd64 > act_runner
|
||||||
|
chmod +x act_runner
|
||||||
|
chown act:act act_runner
|
||||||
|
```
|
||||||
|
|
||||||
|
A config that references the regrister file and the podman socket is needed, I placed it in
|
||||||
|
`/etc/act_runner/config.yaml`
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
mkdir /etc/act_runner
|
||||||
|
chown -R act:act /etc/act_runner
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# config.yaml
|
||||||
|
runner:
|
||||||
|
file: /etc/act_runner/.runner
|
||||||
|
envs:
|
||||||
|
XDG_RUNTIME_DIR directory: "/run/user/1000"
|
||||||
|
|
||||||
|
container:
|
||||||
|
docker_host: "unix:///run/user/<USER_ID>/podman/docker.sock"
|
||||||
|
|
||||||
|
cache:
|
||||||
|
# Enable cache server to use actions/cache.
|
||||||
|
enabled: true
|
||||||
|
# The directory to store the cache data.
|
||||||
|
# If it's empty, the cache data will be stored in $HOME/.cache/actcache.
|
||||||
|
dir: "/etc/act_runner/cache"
|
||||||
|
```
|
||||||
|
|
||||||
|
And last but not least, we need to regristrate the runner, wich will create the runner file:
|
||||||
|
The token is accsasible through `Settings -> Actions -> Runners -> Create new Runner`.
|
||||||
|
|
||||||
|
(I'd recommend running the regristration as the unpreviliged user.)
|
||||||
|
```bash
|
||||||
|
/usr/local/bin/act_runner register -c /etc/act_runner/config.yaml \
|
||||||
|
--instance <GITEA ADRESS> --token <TOKEN>
|
||||||
|
--no-interactive
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create Act Runner User Service
|
||||||
|
Create a user service in in the following file: `/usr/lib/systemd/user/act_runner.servic`
|
||||||
|
```ini
|
||||||
|
Description=Gitea Actions runner
|
||||||
|
Documentation=https://gitea.com/gitea/act_runner
|
||||||
|
After=podman.socket
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/local/bin/act_runner daemon -c /etc/act_runner/config.yaml
|
||||||
|
Delegate=true
|
||||||
|
Type=simple
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
|
```
|
||||||
|
|
||||||
|
## Auto start user Services
|
||||||
|
|
||||||
|
To start the user services, you can add a drop-in and add the Install, by running:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl edit user@1001 --drop-in=start_act_runner
|
||||||
|
```
|
||||||
|
|
||||||
|
and inserting
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Unit]
|
||||||
|
After=gitea.service
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
In the end, all left to do is, enable the user:
|
||||||
|
```bash
|
||||||
|
systemctl status user@1001
|
||||||
|
```
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
<script context="module">
|
<script context="module">
|
||||||
import img from './img.svelte';
|
import img from './img.svelte';
|
||||||
export { img };
|
import h1 from './h1.svelte';
|
||||||
|
import h2 from './h2.svelte';
|
||||||
|
import h3 from './h3.svelte';
|
||||||
|
export { img, h1, h2, h3 };
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -55,7 +58,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: 700px) {
|
@media only screen and (max-width: 700px) {
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
margin-bottom: -5.3px;
|
margin-bottom: -5.3px;
|
||||||
}
|
}
|
||||||
@@ -73,7 +75,7 @@
|
|||||||
.blog-text {
|
.blog-text {
|
||||||
border-radius: var(--border-round);
|
border-radius: var(--border-round);
|
||||||
background: var(--rp-moon-surface);
|
background: var(--rp-moon-surface);
|
||||||
box-shadow: 0px 0px 1rem 0px hsl(from var(--rp-moon-base) h s calc(l * 0.85));
|
box-shadow: 0px 0px 0.5rem 0px hsl(from var(--rp-moon-pine) h calc(s * 0.5) calc(l * 0.25));
|
||||||
padding: var(--d2) var(--d3) var(--d4);
|
padding: var(--d2) var(--d3) var(--d4);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
1
src/routes/blogs/h1.svelte
Normal file
1
src/routes/blogs/h1.svelte
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<h2><slot /></h2>
|
||||||
1
src/routes/blogs/h2.svelte
Normal file
1
src/routes/blogs/h2.svelte
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<h3><slot /></h3>
|
||||||
1
src/routes/blogs/h3.svelte
Normal file
1
src/routes/blogs/h3.svelte
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<h4><slot /></h4>
|
||||||
@@ -1,5 +1,26 @@
|
|||||||
@import url('https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,100..900;1,9..144,100..900&display=swap');
|
@import url('https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,100..900;1,9..144,100..900&display=swap');
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'fira';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 500;
|
||||||
|
src: url('/fonts/FiraCode-Regular.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Fraunces';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100 900;
|
||||||
|
src: url('/fonts/Fraunces.woff2') format('woff2');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Inter';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url('/fonts/Inter.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
:root{
|
:root{
|
||||||
--d1:1.0rem;
|
--d1:1.0rem;
|
||||||
--d2:1.5rem;
|
--d2:1.5rem;
|
||||||
@@ -24,6 +45,14 @@ body {
|
|||||||
width:100%;
|
width:100%;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
text-align: justify;
|
text-align: justify;
|
||||||
|
font-family: Inter;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background: var(--rp-moon-base);
|
||||||
|
padding: 3px;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
font-family: fira;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre {
|
pre {
|
||||||
@@ -31,6 +60,10 @@ pre {
|
|||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pre code{
|
||||||
|
padding:0px;
|
||||||
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: var(--rp-moon-iris);
|
color: var(--rp-moon-iris);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
@@ -80,13 +113,19 @@ main {
|
|||||||
|
|
||||||
.date{
|
.date{
|
||||||
text-align: right;
|
text-align: right;
|
||||||
color: var(--rp-moon-subtle)
|
color: var(--rp-moon-subtle);
|
||||||
|
font-family: Fraunces;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
color: var(--rp-moon-muted);
|
color: var(--rp-moon-muted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.bsky{
|
||||||
|
display:block;
|
||||||
|
height: 2rem;
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
|
||||||
h1{font-size: 2.986rem}
|
h1{font-size: 2.986rem}
|
||||||
h2{font-size: 2.488rem}
|
h2{font-size: 2.488rem}
|
||||||
|
|||||||
BIN
static/fonts/FiraCode-Bold.ttf
Normal file
BIN
static/fonts/FiraCode-Bold.ttf
Normal file
Binary file not shown.
BIN
static/fonts/FiraCode-Light.ttf
Normal file
BIN
static/fonts/FiraCode-Light.ttf
Normal file
Binary file not shown.
BIN
static/fonts/FiraCode-Medium.ttf
Normal file
BIN
static/fonts/FiraCode-Medium.ttf
Normal file
Binary file not shown.
BIN
static/fonts/FiraCode-Regular.ttf
Normal file
BIN
static/fonts/FiraCode-Regular.ttf
Normal file
Binary file not shown.
BIN
static/fonts/FiraCode-Retina.ttf
Normal file
BIN
static/fonts/FiraCode-Retina.ttf
Normal file
Binary file not shown.
BIN
static/fonts/FiraCode-SemiBold.ttf
Normal file
BIN
static/fonts/FiraCode-SemiBold.ttf
Normal file
Binary file not shown.
BIN
static/fonts/Fraunces.woff2
Normal file
BIN
static/fonts/Fraunces.woff2
Normal file
Binary file not shown.
BIN
static/fonts/Inter.ttf
Normal file
BIN
static/fonts/Inter.ttf
Normal file
Binary file not shown.
Reference in New Issue
Block a user