Sign inSign up

pacur/fedora-28

By pacur

Updated over 7 years ago

Pacur Fedora 28

Image
1

3.6K

pacur/fedora-28 repository overview

pacur

pacur: simple packaging

Docker Repository

Docker Repository Docker Repository

Docker Repository

Docker Repository Docker Repository Docker Repository

Docker Repository

Docker Repository Docker Repository

Docker Repository Docker Repository Docker Repository Docker Repository

Pacur allows building packages for multiple linux distributions with a consistent package spec format. Currently deb, rpm and pacman packages are available for several linux distributions. Builds are done on Docker containers without needing to setup any virtual machines or install any software other then Docker. All packages are built using a simple format that is similar to PKGBUILD from ArchLinux. Each distribution is different and will still require different build instructions but a consistent build process and format can be used for all builds. Docker only supports 64 bit containers, pacur can't be used to build packages 32 bit packages. Pacur will also create a deb, rpm and pacman signed repository that can be used on ArchLinux, CentOS, Fedora, Debian and Ubuntu to distribute the packages. A tutorial on creating a project is aviaible on medium.

initialize

It is recommended to build the docker images locally instead of pulling each image from the Docker Hub. A script is located in the docker directory to assist with this. Always run the clean.sh script to clear any existing pacur images. Building the images can take several hours.

cd ~/go/src/github.com/pacur/pacur/docker
sh clean.sh
sh build.sh
format
key="example string"
key=`example "quoted" string`
key=("list with one element")
key=(
    "list with"
    "multiple elements"
)
key="example ${variable} string"
key:ubuntu="this will apply only to ubuntu builds"
builtin variables
keyvalue
${srcdir}Source directory where all sources are downloaded and extracted
${pkgdir}Package directory for the root of the package
spec
keytypevalue
targetslistList of build targets only used for projects. Prefix a ! to ignore target.
pkgnamestringPackage name
pkgverstringPackage version
pkgrelstringPackage release number
pkgdescstringShort package description
pkgdesclonglistList of lines for package description
maintainerstringPackage maintainer
archstringPackage architecture, can be all or amd64
licenselistList of licenses for packaged software
sectionstringSection for package. Built in sections available:
admin
localization
mail
comm
math
database
misc
debug
net
news
devel
doc
editors
electronics
embedded
fonts
games
science
shells
sound
graphics
text
httpd
vcs
interpreters
video
web
kernel
x11
libdevel
libs
prioritystringPackage priority, only used for debian packages
urlstringPackage url
dependslistList of package dependencies
optdependslistList of package optional dependencies
makedependslistList of package build dependencies
provideslistList of packages provided
conflictslistList of packages conflicts
sourceslistList of packages sources. Sources can be url or paths that are relative to the PKGBUILD
hashsumslistList of md5/sha1/sha256/sha512 hex hashes for sources, hash type is determined by the length of the hash. Use skip to ignore hash check
backuplistList of config files that shouldn't be overwritten on upgrades
buildfuncFunction to build the source, starts in srcdir
packagefuncFunction to package the source into the pkgdir, starts in srcdir
preinstfuncFunction to run before installing
postinstfuncFunction to run after installing
prermfuncFunction to run before removing
postrmfuncFunction to run after removing
build targets
targetvalue
archlinuxAll archlinux releases
amazonlinuxAll amazonlinux releases
centosAll centos releases
debianAll debian releases
fedoraAll fedora releases
oraclelinuxAll oraclelinux releases
ubuntuAll ubuntu releases
amazonlinux-1Amazonlinux 1
amazonlinux-2Amazonlinux 2
centos-7Centos 7
debian-jessieDebian jessie
debian-stretchDebian stretch
debian-busterDebian buster
fedora-28Fedora 28
fedora-29Fedora 29
oraclelinux-7Oraclelinux 7
ubuntu-trustyUbuntu trusty
ubuntu-xenialUbuntu xenial
ubuntu-bionicUbuntu bionic
ubuntu-cosmicUbuntu cosmic
directives
directivevalue
aptAll deb packages
pacmanAll pkg packages
yumAll rpm packages
archlinuxAll archlinux releases
amazonlinuxAll amazonlinux releases
centosAll centos releases
debianAll debian releases
fedoraAll fedora releases
oraclelinuxAll oraclelinux releases
ubuntuAll ubuntu releases
amazonlinux-1Amazonlinux 1
amazonlinux-2Amazonlinux 2
centos-7Centos 7
debian-jessieDebian jessie
debian-stretchDebian stretch
debian-busterDebian buster
fedora-28Fedora 28
fedora-29Fedora 29
oraclelinux-7Oraclelinux 7
ubuntu-trustyUbuntu trusty
ubuntu-xenialUbuntu xenial
ubuntu-bionicUbuntu bionic
ubuntu-cosmicUbuntu cosmic

Directives are used to specify variables that only apply to a limited set of build targets. All variables can use directives including user definied variables. To use directives include the directive after a variable seperated by a colon such as pkgdesc:ubuntu="This description will only apply to Ubuntu packages" The directives above are sorted lowest to highest priority.

example

First create a directory for the PKGBUILD file. This directory should only contain the PKGBUILD file and any other files needed such as patches. Then create a PKGBUILD the package directory. After creating the PKGBUILD build the package with docker.

$ mkdir httpserver
$ cd httpserver
$ nano PKGBUILD
$ docker run --rm -t -v `pwd`:/pacur pacur/ubuntu-trusty
targets=(
    "archlinux"
    "centos"
    "debian"
    "ubuntu"
)
pkgname="httpserver"
pkgver="1.0"
pkgrel="1"
pkgdesc="Http file server written with Go"
pkgdesc:centos="Http file server written with Go for CentOS"
pkgdesc:debian="Http file server written with Go for Debian"
pkgdesc:fedora="Http file server written with Go for Fedora"
pkgdesc:ubuntu="Http file server written with Go for Ubuntu"
pkgdesclong=(
    "Quick http file server written with Go"
    "using directory listing similar to apache"
)
maintainer="Example <[email protected]>"
arch="all"
license=("GPLv3")
section="utils"
priority="optional"
url="https://github.com/pacur/${pkgname}"
sources=(
    "${url}/archive/${pkgver}.tar.gz"
)
hashsums=(
    "3548e1263a931b27970e190f04b74623"
)

build() {
    mkdir -p "go/src"
    export GOPATH="${srcdir}/go"
    mv "${pkgname}-${pkgver}" "go/src"
    cd "go/src/${pkgname}-${pkgver}"
    go get
    go build -a
}

package() {
    cd "${srcdir}/go/src/${pkgname}-${pkgver}"
    mkdir -p "${pkgdir}/usr/bin"
    cp ${pkgname}-${pkgver} ${pkgdir}/usr/bin/${pkgname}
}
project example

A project can be created with the cli tools which can be installed using go get. The packages can be built and added to the repo. An example project is available in the example directory. The pull command should be run before all builds to update the docker images used for builds.

$ go get github.com/pacur/pacur
$ cd example
$ pacur pull
$ pacur project init
$ pacur project build
$ pacur project repo
$ go get github.com/pacur/httpserver
$ cd mirror
$ httpserver --port 80

After the repo has been created and is hosted on a server the following commands can be used to add the repo to the package manager for yum and apt. For the debian repo the jessie should be replaced with the debian/ubuntu release name. The pacur repo name and filenames can be change to suite the name of your software.

$ nano /etc/pacman.conf
[pacur]
Server = http://HTTP_SERVER_IP/arch

$ pacman-key --keyserver hkp://pgp.mit.edu -r KEYID
$ pacman-key --lsign-key KEYID
$ pacman -Sy
$ pacman -S httpserver
$ nano /etc/yum.repos.d/pacur.repo
[pacur]
name=Pacur Repository
baseurl=http://HTTP_SERVER_IP/yum/centos/7/
gpgcheck=1
enabled=1

$ gpg --keyserver hkp://pgp.mit.edu --recv-keys KEYID
$ gpg --armor --export KEYID > key.tmp; rpm --import key.tmp; rm -f key.tmp
$ yum install httpserver
$ nano /etc/apt/sources.list.d/pacur.list
deb http://HTTP_SERVER_IP/apt jessie main

$ apt-key adv --keyserver hkp://pgp.mit.edu --recv KEYID
$ apt-get update
$ apt-get install httpserver
signing

Packages in the repository can also be signed by adding a sign.key in the project directory. The signing key cannot use a passphrase. To export a key first get the key id then export the key with the commands below.

$ gpg --list-secret-keys
$ gpg -a --export-secret-keys KEYID > sign.key

Tag summary

Content type

Image

Digest

Size

843.5 MB

Last updated

over 7 years ago

docker pull pacur/fedora-28