Compare commits

..

13 Commits

Author SHA1 Message Date
1dae233b2c
Merge pull request #2 from anonymix007/publickeys-packages-locales
Add more packages, locales and allow importing repository public key from URL
2024-08-27 17:13:38 +08:00
anonymix007
a96640cd3d configs: repo: Add EndeavourOS 2024-08-25 16:08:15 +03:00
anonymix007
48d7785332 builder: build: filesystem.py: Allow downloading files from predefined url in config 2024-08-25 16:08:15 +03:00
anonymix007
53d8df4154 builder: component: pacman.py: Add mirrorlist repo property 2024-08-25 16:08:15 +03:00
anonymix007
480fbeff44 configs: common: add pacman-init for initialising keyrings
Based on https://gitlab.archlinux.org/archlinux/archiso/-/blob/master/configs/releng/airootfs/etc/systemd/system/pacman-init.service
2024-08-25 16:08:15 +03:00
anonymix007
c7021a2f40 builder: component: pacman.py: Add publickey and keyid repo properties 2024-08-25 16:08:15 +03:00
Jos Dehaes
0a1272c84d configs: packages: add nvim 2024-08-25 16:08:15 +03:00
Jos Dehaes
7831268375 configs: shell: add fish 2024-08-25 16:08:15 +03:00
Jos Dehaes
d271a19b07 builder: build: filesystem.py: ignore errors for existing directories 2024-08-25 16:08:15 +03:00
anonymix007
4b6d3c4094 configs: locale: More locales 2024-08-25 16:08:07 +03:00
anonymix007
6bd88e9348 configs: desktop: plasma: install Firefox, Konsole, Kate and Dolphin 2024-08-25 16:07:02 +03:00
anonymix007
12afebaf46 configs: packages: add Firefox 2024-08-22 12:02:05 +03:00
anonymix007
a22e4bef4f configs: shell: add bash 2024-08-21 17:49:43 +03:00
12 changed files with 182 additions and 15 deletions

View File

@ -96,8 +96,8 @@ def add_file(ctx: ArchBuilderContext, file: dict):
# at least path content # at least path content
if "path" not in file: if "path" not in file:
raise ArchBuilderConfigError("no path set in file") raise ArchBuilderConfigError("no path set in file")
if "content" not in file and "source" not in file: if "content" not in file and "source" not in file and "url" not in file:
raise ArchBuilderConfigError("no content or source set in file") raise ArchBuilderConfigError(f"no content, source or url set in file")
root = ctx.get_rootfs() root = ctx.get_rootfs()
path: str = file["path"] path: str = file["path"]
if path.startswith("/"): path = path[1:] if path.startswith("/"): path = path[1:]
@ -139,9 +139,13 @@ def add_file(ctx: ArchBuilderContext, file: dict):
src = os.path.join(ctx.dir, src) src = os.path.join(ctx.dir, src)
log.debug(f"copy {src} to {real}") log.debug(f"copy {src} to {real}")
if folder: if folder:
shutil.copytree(src, real, symlinks=follow) shutil.copytree(src, real, symlinks=follow, dirs_exist_ok=True)
else: else:
shutil.copyfile(src, real, follow_symlinks=follow) shutil.copyfile(src, real, follow_symlinks=follow)
elif "url" in file:
cmds = ["wget", file["url"], "-O", real]
ret = ctx.run_external(cmds)
if ret != 0: raise OSError(f"wget failed with {ret}")
else: else:
assert False assert False
log.debug(f"chmod file {real} to {mode:04o}") log.debug(f"chmod file {real} to {mode:04o}")

View File

@ -64,7 +64,7 @@ def gen_config(ctx: ArchBuilderContext, pacman: Pacman):
conf = os.path.join(ctx.get_rootfs(), "etc/pacman.conf") conf = os.path.join(ctx.get_rootfs(), "etc/pacman.conf")
lines: list[str] = [] lines: list[str] = []
append_config(ctx, lines) append_config(ctx, lines)
pacman.append_repos(lines) pacman.append_repos(lines, True)
with open_config(conf) as f: with open_config(conf) as f:
f.writelines(lines) f.writelines(lines)
log.info(f"generated pacman config {conf}") log.info(f"generated pacman config {conf}")

View File

@ -52,17 +52,26 @@ class PacmanRepo(SerializableDict):
name: str = None name: str = None
priority: int = 10000 priority: int = 10000
servers: list[PacmanRepoServer] = None servers: list[PacmanRepoServer] = None
mirrorlist: str = None
publickey: str = None
keyid: str = None
def __init__( def __init__(
self, self,
name: str = None, name: str = None,
priority: int = None, priority: int = None,
servers: list[PacmanRepoServer] = None servers: list[PacmanRepoServer] = None,
mirrorlist: str = None,
publickey: str = None,
keyid: str = None
): ):
if name is not None: self.name = name if name is not None: self.name = name
if priority is not None: self.priority = priority if priority is not None: self.priority = priority
if servers is not None: self.servers = servers if servers is not None: self.servers = servers
else: self.servers = [] else: self.servers = []
if mirrorlist is not None: self.mirrorlist = mirrorlist
if publickey is not None: self.publickey = publickey
if keyid is not None: self.keyid = keyid
def add_server( def add_server(
self, self,
@ -86,12 +95,15 @@ class Pacman:
caches: list[str] caches: list[str]
repos: list[PacmanRepo] repos: list[PacmanRepo]
def append_repos(self, lines: list[str]): def append_repos(self, lines: list[str], rootfs: bool = False):
""" """
Add all databases into config Add all databases into config
""" """
for repo in self.repos: for repo in self.repos:
lines.append(f"[{repo.name}]\n") lines.append(f"[{repo.name}]\n")
if rootfs and repo.mirrorlist is not None:
lines.append(f"Include = /etc/pacman.d/{repo.name}-mirrorlist\n")
else:
for server in repo.servers: for server in repo.servers:
if server.mirror: if server.mirror:
lines.append(f"# Mirror {server.name}\n") lines.append(f"# Mirror {server.name}\n")
@ -136,6 +148,24 @@ class Pacman:
log.info("initializing pacman keyring") log.info("initializing pacman keyring")
self.pacman_key(["--init"]) self.pacman_key(["--init"])
# Download and add public keys and mirrorlist
for repo in self.repos:
if repo.mirrorlist is not None:
mirrorlist = os.path.join(self.ctx.work, f"etc/pacman.d/{repo.name}-mirrorlist")
cmds = ["wget", repo.mirrorlist, "-O", keypath]
ret = self.ctx.run_external(cmds)
if ret != 0: raise OSError(f"wget failed with {ret}")
if repo.publickey is not None:
keypath = os.path.join(self.ctx.work, f"{repo.name}.pub")
cmds = ["wget", repo.publickey, "-O", keypath]
ret = self.ctx.run_external(cmds)
if ret != 0: raise OSError(f"wget failed with {ret}")
self.pacman_key(["--add", keypath])
self.lsign_key(repo.keyid)
elif repo.keyid is not None:
self.recv_keys(repo.keyid)
self.lsign_key(repo.keyid)
def init_config(self): def init_config(self):
""" """
Create host pacman.conf Create host pacman.conf
@ -282,6 +312,19 @@ class Pacman:
if "priority" in repo: if "priority" in repo:
pacman_repo.priority = repo["priority"] pacman_repo.priority = repo["priority"]
if "mirrorlist" in repo:
pacman_repo.mirrorlist = repo["mirrorlist"]
# add public key url and id
if "publickey" in repo and "keyid" not in repo:
raise ArchBuilderConfigError("publickey is provided without keyid")
if "publickey" in repo:
pacman_repo.publickey = repo["publickey"]
if "keyid" in repo:
pacman_repo.keyid = repo["keyid"]
originals: list[str] = [] originals: list[str] = []
servers: list[str] = [] servers: list[str] = []

View File

@ -0,0 +1,17 @@
filesystem:
files:
- path: /etc/systemd/system/pacman-init.service
content: |
[Unit]
Description=Initializes Pacman keyring
Requires=etc-pacman.d-gnupg.mount
After=etc-pacman.d-gnupg.mount time-sync.target
BindsTo=etc-pacman.d-gnupg.mount
Before=archlinux-keyring-wkd-sync.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/pacman-key --init
ExecStart=/usr/bin/pacman-key --populate
[Install]
WantedBy=multi-user.target

View File

@ -2,6 +2,9 @@
pacman: pacman:
install: install:
- plasma - plasma
- konsole
- kate
- dolphin
- sddm - sddm
- packagekit-qt6 - packagekit-qt6
systemd: systemd:
@ -17,3 +20,4 @@ filesystem:
+also: +also:
# Ensure NetworkManager is enabled # Ensure NetworkManager is enabled
- packages/network-manager - packages/network-manager
- packages/firefox

33
configs/locale/en-US.yaml Normal file
View File

@ -0,0 +1,33 @@
# I18N for English (US)
locale:
enable:
- "en_US.UTF-8 UTF-8"
default: en_US.UTF-8
systemd:
enable:
- systemd-timesyncd
filesystem:
files:
# Wireless regulatory
- path: /etc/conf.d/wireless-regdom
content: |
WIRELESS_REGDOM="US"
# Windows NTP Server
- path: /etc/systemd/timesyncd.conf.d/windows-ntp.conf
content: |
[Time]
NTP=time.windows.com
sysconf:
environments:
GTK_IM_MODULE: ibus
QT_IM_MODULE: ibus
XMODIFIERS: '@im=ibus'
COUNTRY: US
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
LC_ALL: en_US.UTF-8
TZ: US/Eastern
timezone: US/Eastern

33
configs/locale/ru-RU.yaml Normal file
View File

@ -0,0 +1,33 @@
# I18N for Russian
locale:
enable:
- "ru_RU.UTF-8 UTF-8"
- "en_US.UTF-8 UTF-8"
default: en_US.UTF-8
systemd:
enable:
- systemd-timesyncd
filesystem:
files:
# Wireless regulatory
- path: /etc/conf.d/wireless-regdom
content: |
WIRELESS_REGDOM="RU"
- path: /etc/systemd/timesyncd.conf.d/ntp-pool-ntp.conf
content: |
[Time]
NTP=0.ru.pool.ntp.org
sysconf:
environments:
GTK_IM_MODULE: ibus
QT_IM_MODULE: ibus
XMODIFIERS: '@im=ibus'
COUNTRY: RU
LANG: ru_RU.UTF-8
LANGUAGE: ru_RU.UTF-8
LC_ALL: ru_RU.UTF-8
TZ: Europe/Moscow
timezone: Europe/Moscow

View File

@ -0,0 +1,4 @@
# Firefox
pacman:
install:
- firefox

View File

@ -0,0 +1,10 @@
pacman:
install:
- neovim
- neovide
- less
sysconf:
environments:
EDITOR: nvim
VISUAL: neovide
PAGER: less

View File

@ -0,0 +1,12 @@
pacman:
repo:
- name: endeavouros
priority: 200
server: https://github.com/endeavouros-team/repo/raw/master/$$repo/$$arch/
mirrorlist: https://raw.githubusercontent.com/endeavouros-team/PKGBUILDS/master/endeavouros-mirrorlist/endeavouros-mirrorlist
trust:
- info@endeavouros.com
- manuel@endeavouros.com
install:
- endeavouros/endeavouros-keyring
- endeavouros/endeavouros-mirrorlist

3
configs/shell/bash.yaml Normal file
View File

@ -0,0 +1,3 @@
pacman:
install:
- bash

4
configs/shell/fish.yaml Normal file
View File

@ -0,0 +1,4 @@
pacman:
install:
- fish
- fisher