root@starkos:~$ stark help

starkpm

El gestor de puertos de starkOS. Escrito en shell script POSIX con extensiones GNU, descomprime las fuentes en una ubicacion temporal $SRC donde se compilan y posteriormente se instalan en otra ubicación temporal $PKG mediante el método DESTDIR y después se comprimen por defecto en un archivo tar.xz originando el paquete.

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.

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
descriptionDescripción corta del paquete.
homepageURL de la web del software.
maintainerNombre y correo del mantenedor.
nameNombre del paquete; debe coincidir con el nombre del directorio del puerto.
versionVersión del paquete.
releaseVersión de release del paquete, útil cuando el script cambia sin que cambie la versión.
backupArchivos que deben respaldarse al actualizar el paquete (sin '/' inicial).
noextractArchivos que no deben extraerse, separados por espacio.
sourceURLs de las fuentes, separadas por espacio. Puede usarse <nuevo-nombre>::<url> para guardar el archivo con otro nombre.
dependsTodas las dependencias necesarias, una por línea, en un archivo aparte.

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'

  1. 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
  2. 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.
  3. 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.
  4. 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
  5. 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
  6. 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'
  7. 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 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.
configMuestra la configuración de starkpm.
dependent <port>Muestra las dependencias inversas.
depends <port>Muestra las dependencias.
dupMuestra puertos duplicados.
files <port>Muestra los archivos instalados por el puerto.
foreignMuestra puertos foráneos (fuera de los repos).
info <port>Muestra información del puerto.
installedMuestra todos los puertos instalados.
integrityComprueba 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.
missingdepMuestra dependencias faltantes.
news <args>Gestor de noticias (ver stark news help).
orphanMuestra los puertos huérfanos instalados.
outdateMuestra 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.
helpMuestra 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

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.

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:

  1. 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
  2. 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"
  3. 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ónContenido
name.cfgArchivos de configuración a copiar en el árbol de fuentes.
name.optFragmentos de shell con opciones o variables de compilación.
name.depLista 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

Además, starkpm incluye varios scripts para facilitar tareas comunes.

  1. 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
  2. 02

    portcreate

    Script para crear la plantilla de un puerto nuevo.

  3. 03

    updateconf

    Script para actualizar archivos de configuración pendientes (*.spkgnew).

  4. 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
  5. 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

/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.

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