summaryrefslogtreecommitdiffstats
path: root/dev/pkg/opkg.mdwn
blob: c1f06358d1d6208c5108b37e8d802073cabe2109 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
[[!meta title="Opkg in ProteanOS"]]

Background
==========

ProteanOS uses [opkg][opkg] to manage packages after installation with
[[prokit|dev/prokit]].  opkg has a long history through different umbrella
projects and maintainers.  After [more than three years since the 0.1.8
release][pbarker-maint], regular releases were resumed in August and September
of 2013 with the [0.2.x series][0.2.x-NEWS].  [Starting in December,
2013][yocto-move], development of opkg was moved from Google Code to
infrastructure of the Yocto Project, a project of the Linux Foundation that also
serves as a home for BitBake, OpenEmbedded, and Poky.

[opkg]: https://git.yoctoproject.org/cgit/cgit.cgi/opkg/tree/README
[pbarker-maint]: https://groups.google.com/forum/?_escaped_fragment_=topic/opkg-devel/R_yo9Qj1eZI
[0.2.x-NEWS]: https://git.yoctoproject.org/cgit/cgit.cgi/opkg/log/NEWS?h=opkg-0.2.x
[yocto-move]: https://groups.google.com/forum/?_escaped_fragment_=topic/opkg-devel/gjQG7Qv1cQU

The Growing Lightweight Package Management System
=================================================

Development has continued in the 0.3.x series.  Multiple maintainers and
contributors have added various bugfixes, new features, and architectural
improvements to make opkg a more modern and maintainable codebase.

For a long time, opkg had an embedded copy of BusyBox's libbb for reading
archives (as packages supported by opkg are doubly nested archive files).  This
copy of libbb had grown
[[stale_and_heavily_patched|dev/todo/removing-libbb-from-opkg]].  Finally, [in
2013/2014][drop-libbbb-git], libbb was [replaced][add-libarchive] with
[libarchive][libarchive].  This removed a large amount of old code from opkg,
however it added a dependency on a large library that was never designed with
the code size restraints of embedded systems in mind.

And in August, 2015, support for external dependency solver libraries was added,
so as to remove additional complexity from opkg and leave dependency solving to
another project.  Unfortunately, this also [pulls][solver] in
[another][solver-patch] large [library][oe-pw-libsolv], openSUSE's [libsolv][libsolv].  As of now, this
dependency is still optional, and the original internal solver can still be
used.  However, the current maintainer has [indicated][libsolv-focus] that the
internal solver will eventually be deprecated.

[drop-libbb-git]: https://git.yoctoproject.org/cgit/cgit.cgi/opkg/log/?id=04015d5
[add-libarchive]: https://groups.google.com/forum/?_escaped_fragment_=topic/opkg-devel/HYBBK8YeazI
[libarchive]: https://www.libarchive.org/
[solver]: https://groups.google.com/forum/?_escaped_fragment_=msg/opkg-devel/r4qbmhjbSNo/YH7cCjRtIQAJ
[solver-patch]: https://groups.google.com/forum/?_escaped_fragment_=msg/opkg-devel/bCtXIGQpvoM/PE_Pbi07IwAJ
[oe-pw-libsolv]: https://patchwork.openembedded.org/patch/137903/
[libsolv]: https://github.com/openSUSE/libsolv
[libsolv-focus]: https://groups.google.com/forum/?_escaped_fragment_=msg/opkg-devel/ZI1e5tmGcjM/w-1LFw4LCAAJ

The Future of the Past
======================

ProteanOS currently [still uses][pro-opkg-cl] the 0.2.x series.  The increasing
size of modern opkg (starting with the 0.3.x series) and its dependencies makes
it increasingly unsuitable for small system distributions like ProteanOS.  We
will need to find a solution going forward.

[OpenWrt][owrt] and [libreCMC][lcmc] use [a version][opkg-owrt-lcmc] between
0.1.8 and 0.2.0 with [numerous local patches][owrt-patches].  LEDE
[switched][lede-switch] their [opkg package][lede-pkgdata] to [their own
fork][lede-fork], which is based on the same 0.1.8+r618 version that OpenWrt and
libreCMC use.

LEDE actively maintains their opkg fork and backports changes from upstream.
This may be the best and easiest option for ProteanOS, although there are a
couple of minor problems:

 1. It still has [libbb][lede-opkg-libbb], and
 2. It pulls in a new, but small, dependency: LEDE's [libubox][lede-libubox].

Note also that the original Autoconf/Automake-based build system was
[removed][lede-opkg-at] and [replaced][lede-opkg-cm] with CMake.

[pro-opkg-cl]: http://git.proteanos.com/pkg/opkg.git/tree/changelog
[owrt]: https://github.com/openwrt/openwrt/blob/4e47861/package/system/opkg/Makefile#L14
[lcmc]: https://gogs.librecmc.org/libreCMC/libreCMC/src/ae523302b1506e48f8448454c5f8904ad415c524/package/system/opkg/Makefile#L19
[opkg-owrt-lcmc]: http://git.yoctoproject.org/cgit/cgit.cgi/opkg/log/?id=9c97d5e
[owrt-patches]: https://github.com/openwrt/openwrt/tree/4e47861/package/system/opkg/patches
[lede-switch]: https://git.lede-project.org/?p=source.git;a=commit;h=5aa97e3
[lede-pkgdata]: https://lede-project.org/packages/pkgdata/opkg
[lede-fork]: https://git.lede-project.org/?p=project/opkg-lede.git
[lede-opkg-libbb]: https://git.lede-project.org/?p=project/opkg-lede.git;a=tree;f=libbb
[lede-libubox]: https://git.lede-project.org/?p=project/libubox.git;a=summary
[lede-opkg-at]: https://git.lede-project.org/?p=project/opkg-lede.git;a=commit;h=6215c27
[lede-opkg-cm]: https://git.lede-project.org/?p=project/opkg-lede.git;a=commit;h=e6e6c5a