Descripción general
Instalar un paquete empaquetado consiste en extraerlo directamente sobre el sistema real. Tras la instalación, todos los archivos extraídos quedan registrados en un directorio índice: starkpm hace un seguimiento completo de los archivos instalados, resuelve automáticamente el orden de las dependencias y lee el script de compilación (spkgbuild) del directorio de puertos para obtener las variables y funciones necesarias antes de compilar.
Formato de spkgbuild
spkgbuild es el script de compilación que usa portbuild para generar el paquete. Ejemplo:
description="This is example package"
homepage="https://example.com/"
maintainer="starkOS Team, starkos at disroot dot org"
name=foobar
version=1.0.0
release=1
backup="etc/example.conf etc/foobar.conf"
noextract="foobar.tar.xz"
source="https://dl.example.com/foobar.tar.xz
$name-$version.tar.gz::https://github.com/archive/$version.tar.gz
example.conf"
nostrip="lib.*/ld-.*\.so$
lib.*/libc-.*\.so$
lib.*/libpthread-.*\.so$
lib.*/libthread_db-.*\.so$"
build() {
cd $name-$version
./configure --prefix=/usr
make
make DESTDIR=$PKG install
install -d $SRC/example.conf $PKG/etc/example.conf
}
depends se define en un archivo aparte, con una dependencia por línea. Antes de crear un puerto nuevo, se recomienda compilarlo primero con fakeroot para asegurarse de que el script no falla y no deja archivos sin registrar en el sistema.
| Campo | Descripción |
|---|---|
| description | Descripción corta del paquete. |
| homepage | URL de la web del software. |
| maintainer | Nombre y correo del mantenedor. |
| name | Nombre del paquete; debe coincidir con el nombre del directorio del puerto. |
| version | Versión del paquete. |
| release | Versión de release del paquete, útil cuando el script cambia sin que cambie la versión. |
| backup | Archivos que deben respaldarse al actualizar el paquete (sin '/' inicial). |
| noextract | Archivos que no deben extraerse, separados por espacio. |
| source | URLs de las fuentes, separadas por espacio. Puede usarse <nuevo-nombre>::<url> para guardar el archivo con otro nombre. |
| depends | Todas las dependencias necesarias, una por línea, en un archivo aparte. |
Configuración global
Se define en /etc/starkpm.conf. Valores por defecto (comentados):
#
# Configuration file for starkpm
#
export CFLAGS="-O2 -march=x86-64 -pipe"
export CXXFLAGS="${CFLAGS}"
export FCFLAGS="${CFLAGS}"
export FFLAGS="${CFLAGS}"
export MAKEFLAGS="-j$(nproc)"
export LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs"
# SOURCE_DIR="/var/cache/starkpm/sources"
# PACKAGE_DIR="/var/cache/starkpm/packages"
# WORK_DIR="/var/cache/starkpm/work"
# CBUILD_DIR="/var/lib/starkpm/cbuild"
# CURL_OPTS=""
# COMPRESSION_MODE="xz"
# NO_STRIP="no"
# IGNORE_CHECKSUM="no"
# KEEP_DOC="no"
# KEEP_GOING="no"
# KEEP_LIBTOOL="no"
# KEEP_LOCALE="no"
# NOCOLOR="no"
# THEME="starkos" # variants: 'dracula', 'nord', 'starkos'
Herramientas principales
-
01
portadd
Instala y actualiza paquetes ya compilados por portbuild. Instalar consiste en extraer el paquete <name>-<version>-<release>.spkg.xz con tar sobre el sistema real y guardar la lista de archivos extraídos. Actualizar hace lo mismo, sustituye los archivos antiguos y elimina los que ya no existan en el paquete nuevo (como el pkgtool de Slackware).
Usage: portadd [ <options> <package.spkg.txz> ] Options: -u, --upgrade actualizar paquete -r, --reinstall reinstalar paquete -c, --ignore-conflict ignorar conflictos al instalar -v, --verbose mostrar archivos instalados -h, --help mostrar esta ayuda --no-backup omitir respaldo al actualizar --print-dbdir mostrar ruta de la base de datos de paquetes --root=<path> instalar en un directorio raíz personalizado Example: portadd foobar-1.0-1.spkg.txz -uc --no-backup actualiza foobar-1.0-1 sin respaldar su configuración anterior y sin comprobar conflictos -
02
portbuild
Compila un paquete a partir de un puerto. Lee spkgbuild para obtener la información de compilación antes de generar el paquete, con formato <name>-<version>-<release>.spkg.xz. Debe ejecutarse dentro del directorio del puerto.
Usage: portbuild [ <options> <arguments> ] Options: -q, --quiet mostrar solo mensajes de estado y errores -i, --install instalar el paquete en el sistema -u, --upgrade actualizar paquete -r, --reinstall reinstalar paquete -c, --ignore-conflict ignorar conflictos al instalar -v, --verbose instalación detallada -f, --force-rebuild forzar recompilación -m, --skip-checksum omitir comprobación de checksum -g, --genchecksum generar checksum -o, --download descargar solo las fuentes -x, --extract extraer solo las fuentes -p, --pkgfiles generar lista de archivos del paquete -w, --keep-work mantener el directorio de trabajo -h, --help mostrar esta ayuda -C, --clean eliminar fuentes descargadas y paquetes compilados --config=<config> usar archivo de configuración personalizado --srcdir=<path> sobrescribir ruta de las fuentes --pkgdir=<path> sobrescribir ruta del paquete compilado --workdir=<path> sobrescribir ruta del directorio de trabajo --no-backup omitir respaldo de configuración al actualizar Example: portbuild -iw compila, instala el paquete y conserva el directorio de trabajo Nota: sin opciones, portbuild solo descarga las fuentes y compila el paquete con el resto de opciones por defecto. -
03
portdel
Elimina un paquete del sistema leyendo la lista de archivos registrada en PKGDB_DIR.
Usage: portdel [ <options> <package name> ] Options: -h, --help mostrar esta ayuda -v, --verbose mostrar archivos eliminados --root=<path> eliminar el paquete de un directorio raíz personalizado Example: portdel firefox -v elimina firefox, muestra los archivos eliminados. -
04
portrebuild
Recompila los paquetes base en el orden correcto incluyendo la toolchain.
Usage: portrebuild <options> Options: -t, --toolchain recompilar el toolchain -b, --base recompilar los puertos base -h, --help mostrar esta ayuda Example: portrebuild recompila toolchain y base, en ese orden portrebuild -t recompila solo el toolchain portrebuild -b recompila solo los puertos base -
05
portbase
Elimina todos los paquetes salvo los del sistema base y los que indique el usuario.
Usage: portbase <options> Options: -n simulación (dry-run) -y no pedir confirmación -h mostrar esta ayuda -
06
portsync
Sincroniza los puertos y mantiene los repositorios del sistema al día.
Usage: portsync [options] Options: -p, --prune limpiar el repositorio git local -r, --reset reiniciar los repositorios git -s, --source <repos> sincronizar solo los repos indicados (separados por espacio) -h, --help mostrar esta ayuda Examples: portsync sincroniza todos los repos portsync --source main sincroniza solo 'main' portsync -s main custom sincroniza 'main' y 'custom' portsync -r -s main reinicia y sincroniza solo 'main' -
07
portnews
Gestor de noticias del sistema para starkpm. Se invoca como portnews o mediante stark news.
portnews Listar noticias no leídas con TUI portnews status Mostrar estadísticas de noticias portnews unread Listar noticias no leídas portnews read Listar noticias leídas portnews ignore Listar noticias ignoradas portnews cat N Mostrar noticia no leída N portnews cat read N Mostrar noticia leída N portnews cat ignore N Mostrar noticia ignorada N portnews N Mostrar noticia no leída N (atajo) portnews mv N <dst> Mover noticia no leída N a la categoría destino portnews mv all <dst> Mover todas las no leídas al destino portnews mv <src> N <dst> Mover noticia N de origen a destino portnews mv <src> all <dst> Mover todas las noticias de origen a destino portnews rm <cat> N Eliminar noticia N de read|ignore|unread portnews rm <cat> all Eliminar todas las noticias de read|ignore|unread portnews sync Sincronizar noticias desde el repo de puertos (requiere root) portnews restore Restaurar todas las noticias a no leídas desde el origen portnews purge orphan Eliminar noticias locales que no estén en el origen portnews purge all Eliminar todos los datos de noticias portnews create NAME Crear plantilla de noticia portnews help Mostrar esta ayuda
stark — la herramienta principal
stark es el front-end de portbuild, portadd y portdel: cambia de directorio dentro de los puertos, llama a portbuild para compilar y después a portadd para instalar. También añade funciones extra, como buscar paquetes, comprobar dependencias y dependientes, huérfanos, puertos duplicados o listar lo instalado. Ejecuta stark help para ver todas las funciones disponibles.
| Comando | Descripción |
|---|---|
| sync <arg> | Actualiza la base de datos de puertos (argumentos de portsync). |
| build <ports> <arg> | Compila puertos. |
| install <ports> <arg> | Instala puertos y sus dependencias. |
| upgrade <ports> <arg> | Actualiza puertos. |
| sysup <arg> | Actualización completa del sistema. |
| remove <ports> <arg> | Elimina puertos instalados. |
| deplist <ports> | Imprime todas las dependencias de los puertos indicados. |
| redeps <ports> <arg> | Busca dependencias redundantes. |
| cache <arg> | Limpia la caché de paquetes y/o fuentes. |
| cat <port> | Muestra el spkgbuild del puerto. |
| config | Muestra la configuración de starkpm. |
| dependent <port> | Muestra las dependencias inversas. |
| depends <port> | Muestra las dependencias. |
| dup | Muestra puertos duplicados. |
| files <port> | Muestra los archivos instalados por el puerto. |
| foreign | Muestra puertos foráneos (fuera de los repos). |
| info <port> | Muestra información del puerto. |
| installed | Muestra todos los puertos instalados. |
| integrity | Comprueba la integridad de los puertos instalados. |
| isinstalled <port> | Comprueba si un puerto está instalado. |
| locate <file> | Muestra la ubicación de un archivo en el repo de puertos. |
| missingdep | Muestra dependencias faltantes. |
| news <args> | Gestor de noticias (ver stark news help). |
| orphan | Muestra los puertos huérfanos instalados. |
| outdate | Muestra los puertos desactualizados. |
| path <port> | Muestra la ruta del puerto en el repo. |
| provide <file> | Muestra qué puerto provee un archivo. |
| purge [ports] | Elimina puertos instalados y sus dependencias huérfanas. |
| search <pattern> | Busca puertos en el repo. |
| trigger [ports] | Ejecuta los triggers del sistema. |
| world [ports] | Muestra, añade o elimina de la lista world. |
| help | Muestra esta ayuda. |
Opciones globales disponibles en la mayoría de comandos: --append-repo, --prepend-repo y --override-repo (para añadir, anteponer o sobrescribir repos locales personalizados), --repo-file, --config-file, --alias-file y --mask-file para usar archivos alternativos a los definidos por defecto.
# stark install -cv firefox
Compila e instala firefox y sus dependencias, ignorando conflictos de archivos
y con salida detallada
Continuidad ante fallos (KEEP_GOING)
KEEP_GOING permite continuar si un puerto falla en la compilación durante una actualización o instalación en lote, starkpm no detiene toda la operación: continúa con el resto de la cola y presenta un resumen de los fallos al final, evitando perder el trabajo ya realizado.
Compilación personalizada (cbuild)
cbuild permite sobrescribir la configuración de compilación de un puerto sin modificar los puertos del repositorio. Tres funciones están disponibles dentro de cualquier build() de un spkgbuild:
-
01
cbuild_restore <dest> [name]
Copia un archivo de configuración guardado al árbol de fuentes antes de compilar. Devuelve 1 si no existe ninguna configuración, para que el puerto pueda usar sus valores por defecto. Ejemplo con el puerto "linux":
cbuild_restore "$SRC/$name-${version%.*}/.config" || cp $SRC/x86_64-dotconfig .config -
02
cbuild_save <src> [name]
Guarda un archivo de configuración para futuras compilaciones. Útil tras ejecutar herramientas interactivas como make menuconfig. Ejemplo con el puerto "linux":
cbuild_save "$SRC/$name-${version%.*}/.config" -
03
cbuild_options [name]
Carga un fragmento de shell para sobrescribir variables de compilación: flags de configure, opciones de cmake, targets de LLVM, etc. Ejemplo con "llvm", "clang" y "lld":
llvm: cbuild_options usa "llvm" por defecto (archivo llvm.opt) clang y lld: cbuild_options "llvm" usa el perfil "llvm", sobrescribiendo el nombre del puerto
Los archivos de configuración se guardan en /var/lib/starkpm/cbuild/ con extensiones explícitas:
| Extensión | Contenido |
|---|---|
| name.cfg | Archivos de configuración a copiar en el árbol de fuentes. |
| name.opt | Fragmentos de shell con opciones o variables de compilación. |
| name.dep | Lista de dependencias personalizada que sobrescribe el archivo depends del puerto. |
El override .dep se gestiona de forma transparente en la resolución de dependencias de stark: si existe un archivo .dep para un puerto, se usa en lugar de su archivo depends, permitiendo eliminar dependencias que ya no hagan falta por las opciones de compilación elegidas. Un puerto puede combinar .cfg, .opt y .dep de forma independiente.
Ejemplo con el kernel de Linux — tras ejecutar make menuconfig, copia el .config aquí:
/var/lib/starkpm/cbuild/linux.cfg El puerto lo usará automáticamente en la siguiente compilación: cbuild_restore "$SRC/linux-$version/.config" || make defconfig cbuild_save "$SRC/linux-$version/.config"
Ejemplo para los targets de LLVM:
$ cat /var/lib/starkpm/cbuild/llvm.opt
BUILD_LLVM_TARGETS="AMDGPU;X86"
La ruta de CBUILD_DIR puede sobrescribirse en /etc/starkpm.conf:
CBUILD_DIR="/tu/ruta/personalizada"
Para filtrar los puertos que usan cbuild:
grep cbuild_ /usr/ports/*/*/spkgbuild | awk -F/ '{print $5}' | sort -u
Herramientas extra
Además, starkpm incluye varios scripts para facilitar tareas comunes.
-
01
schroot
Monta los sistemas de archivos necesarios y entra en un entorno chroot. Monta automáticamente /dev, /proc, /sys, /run, /tmp y /etc/resolv.conf. Si no se indica un comando, lanza /bin/sh.
Usage: schroot <chroot-dir> [command] Examples: schroot /mnt/misistema schroot /mnt/misistema portsync schroot /mnt/misistema stark sysup -y schroot /mnt/misistema /bin/bash -
02
portcreate
Script para crear la plantilla de un puerto nuevo.
-
03
updateconf
Script para actualizar archivos de configuración pendientes (*.spkgnew).
-
04
revdep
Script de dependencias inversas que conviene ejecutar tras actualizar o eliminar paquetes, para detectar paquetes rotos. Indica un nombre de paquete si quieres comprobar solo ese.
Usage: revdep [option] [arg] Options: -a, --all mostrar todos los archivos afectados -r, --rebuild recompilar e reinstalar el paquete roto -p, --package <pkg> comprobar solo un paquete concreto -f, --no-filter omitir el filtro de directorios, archivos y bibliotecas excluidos -e, --exclude <pkg1 pkg2 pkgN> excluir paquetes al recompilar (con -r/--rebuild) -y, --yes no pedir confirmación al recompilar (con -r/--rebuild) -h, --help mostrar esta ayuda -
05
hook
Un hook es un script de shell con los comandos que deben ejecutarse antes (pre) o después (post) de instalar, actualizar o eliminar un paquete. Se coloca en el directorio del puerto y stark lo ejecuta automáticamente en esos momentos. También puede lanzarse a mano:
Usage: stark hook <stage> <action> <port> Options: stark hook <pre|post> <install|remove> <port> Example: stark hook post install linux
Archivo de repositorios
/etc/starkpm.repo define los directorios y URLs de los repositorios de puertos usados para sincronizar y actualizar. Ejemplo del archivo por defecto:
#
# /etc/starkpm.repo : starkpm repo file
#
# format:
# <repo directory> <repo url> <repo branch, "main" by default>
#
/usr/ports/main https://codeberg.org/stark-OS/main
/usr/ports/community https://codeberg.org/stark-OS/community
#/usr/ports/kde-lxqt https://codeberg.org/stark-OS/kde-lxqt
#/usr/ports/mate https://codeberg.org/stark-OS/mate
#/usr/ports/xfce https://codeberg.org/stark-OS/xfce
#/usr/ports/multilib https://codeberg.org/stark-OS/multilib
#/usr/ports/nonfree https://codeberg.org/stark-OS/nonfree
#/usr/ports/s6 https://codeberg.org/stark-OS/s6
#/usr/ports/testing https://codeberg.org/stark-OS/testing
La URL es opcional: solo hace falta indicarla si quieres poder sincronizar ese repositorio.
Compilar starkpm desde el código fuente
starkpm forma parte del sistema base de starkOS, pero puede compilarse e instalarse manualmente ejecutando el script de instalación:
# ./INSTALL.sh
Si vas a empaquetarlo para instalarlo en otra ubicación, antepone DESTDIR al comando: DESTDIR=/tmp/ruta ./INSTALL.sh