Subject: [alpine-user] How do I creating a binary only package?

From: Dan Cook <[email-masked]>
Date: Wed, 20 Jun 2018 23:11:20 -0700

Hoping to get some pointers on how to create a binary only pkg.  I have the
binaries already compiled on Alpine and all I need to do is package them
up.  I don't want abuild to compile for me.  I already have the directory
structure layout in a separate directory ready to go.  All I need is to
package up the directory structure and create a installable package.  All
the docs reference abuild doing the compiling/etc.  Do I use abuild for
this or some other tool?

Thanks,
Dan

---

From: Paul Zillmann <[email-masked]>
Date: Thu, 21 Jun 2018 20:18:12 +0200

Hello Dan,

just create a package with abuild / apkbuild.
In your APKBUILD file you have to provide a package() function which 
copies your binary data to it's final destination.
You will have to provide a build() function. Than one can be empty (or 
you return 0) - but it has to be there.

Paul

Am 21.06.2018 um 08:11 schrieb Dan Cook:
> Hoping to get some pointers on how to create a binary only pkg.  I 
> have the binaries already compiled on Alpine and all I need to do is 
> package them up.  I don't want abuild to compile for me.  I already 
> have the directory structure layout in a separate directory ready to 
> go.  All I need is to package up the directory structure and create a 
> installable package. All the docs reference abuild doing the 
> compiling/etc.  Do I use abuild for this or some other tool?
>
> Thanks,
> Dan

---
Unsubscribe:  [email-masked]
Help:         [email-masked]
---

---

From: Dan Cook <[email-masked]>
Date: Thu, 21 Jun 2018 21:28:20 -0700

Thanks Paul.  I will try it.  I have a question regarding the directory
structure.  I am familiar with rpm and deb packaging where the directory
structure is exactly as that on install target machine (the one installing
the pkg).  When you say the package function copies to the final
destination - which final destination - the destination from the packaging
perspective or the install.  I assume it is the package.
So for example, say I have an app called foo with the following directory
layout on the disk (after install):
  /etc/init.d/foo
  /opt/foo/bin/say_hi
  /opt/foo/etc/hello_msgs.db

After I compile my code the binaries and data directory tree is mirrored
under:  /home/dan/projects/foo/dist (very similar to rpm/deb pkg format)
So just for completeness:
   /home/dan/projects/foo/dist/etc/init.d/foo
   /home/dan/projects/foo/dist/opt/foo/bin/say_hi
   /home/dan/projects/foo/dist/opt/foo/etc/hello_msgs.db

>From the examples I have seen I would create a directory called pkg under
the /home/dan/projects/foo directory and add the following files:
  APKBUILD
  foo.XXXX scripts (like pre, post, etc).

What I am stuck on is the contents of the APKBUILD.

Let me try this very simple application and see if I can get a installable
pkg.  Any hints/tips would be helpful.

Thanks,
Dan

On Thu, Jun 21, 2018 at 11:18 AM, Paul Zillmann <[email-masked]> wrote:

> You will have to provide a build() function. Than one can be empty (or you
> return 0) - but it has to be there.
>
> Paul
>
>
>> Hoping to get some pointers on how to create a binary only pkg.  I have
>> the binaries already compiled on Alpine and all I need to do is package
>> them up.  I don't want abuild to compile for me.  I already have the
>> directory structure layout in a separate directory ready to go.  All I need
>> is to package up the directory structure and create a installable package.
>> All the docs reference abuild doing the compiling/etc.  Do I use abuild for
>> this or some other tool?
>>
>> Thanks,
>> Dan
>>
>
>
> ---

---

From: Paul Zillmann <[email-masked]>
Date: Fri, 22 Jun 2018 13:51:22 +0200

Hello Dan,

> Thanks Paul.  I will try it.  I have a question regarding the 
> directory structure.  I am familiar with rpm and deb packaging where 
> the directory structure is exactly as that on install target machine 
> (the one installing the pkg).  When you say the package function 
> copies to the final destination - which final destination - the 
> destination from the packaging perspective or the install.  I assume 
> it is the package.
> So for example, say I have an app called foo with the following 
> directory layout on the disk (after install):
>   /etc/init.d/foo
>   /opt/foo/bin/say_hi

That is correct. You can download an apk file (e.g. 
https://nl.alpinelinux.org/alpine/edge/main/x86_64/nginx-1.14.0-r0.apk 
), rename it to tar.gz and open it up.
The package content is an overlay to the root directory and is alway 
applied to the root directory.
>
> After I compile my code the binaries and data directory tree is 
> mirrored under:  /home/dan/projects/foo/dist (very similar to rpm/deb 
> pkg format)
> From the examples I have seen I would create a directory called pkg 
> under the /home/dan/projects/foo directory and add the following files:
> APKBUILD
You have to copy your included files to the pkg folder as well. (cp 
~/projects/foo/dist/etc/init.d/foo ~/projects/foo/pkg/foo.initscript etc.pp)
Now you create yourself an APKBUILD file:

    # Contributor: Your Name <[email-masked]>
    # Maintainer: Your Name <[email-masked]>
    pkgname=mypkgname
    pkgver=1.0
    pkgrel=0
    pkgdesc="Sample for binary distribution"
    url="http://example.org"
    arch="x86_64"
    license="MIT"
    depends=""
    makedepends=""
    install=""
    subpackages=""
    source="foo.initscript
             say_hi
             hello_mgsgs.db"
    builddir="$srcdir/"

    build() {
         return 0
    }

    package() {
         cd "$srcdir"
         mkdir -p "$pkgdir"/etc/init.d/ "$pkgdir"/opt/foo/bin/
    "$pkgdir"/opt/foo/etc/
         install -m755 -D "$srcdir"/say_hi "$pkgdir"/opt/foo/bin/say_hi
    || return 1
         install -m644 -D "$srcdir"/hello_msgs.db
    "$pkgdir"/opt/foo/etc/hello_msgs.db || return 1
         install -m644 -D "$srcdir"/foo.initscript
    "$pkgdir"/etc/init.d/foo || return 1
    }

Abuild will then add the sha512 checksums to that file and create a package.
Usefull resources:

https://wiki.alpinelinux.org/wiki/APKBUILD_Reference
https://wiki.alpinelinux.org/wiki/APKBUILD_examples
https://wiki.alpinelinux.org/wiki/Creating_an_Alpine_package
>
> Let me try this very simple application and see if I can get a 
> installable pkg.  Any hints/tips would be helpful.
>
> Thanks,
> Dan
>
>

Paul

>
> On Thu, Jun 21, 2018 at 11:18 AM, Paul Zillmann <[email-masked] 
> <mailto:[email-masked]>> wrote:
>
>     Hello Dan,
>
>     In your APKBUILD file you have to provide a package() function
>     which copies your binary data to it's final destination.
>     You will have to provide a build() function. Than one can be empty
>     (or you return 0) - but it has to be there.
>
>     Paul
>
>
>         Hoping to get some pointers on how to create a binary only
>         pkg.  I have the binaries already compiled on Alpine and all I
>         need to do is package them up.  I don't want abuild to compile
>         for me.  I already have the directory structure layout in a
>         separate directory ready to go.  All I need is to package up
>         the directory structure and create a installable package. All
>         the docs reference abuild doing the compiling/etc.  Do I use
>         abuild for this or some other tool?
>
>         Thanks,
>         Dan
>
>
>
>     ---
>     <mailto:[email-masked]>
>     <mailto:[email-masked]>
>     ---
>
>