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
89
90
|
[[!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/September 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-libbb-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][0.2.x]. 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 [0.1.8+r618][opkg-owrt-lcmc] version
(SVN revision 618, 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
[0.2.x]: http://git.yoctoproject.org/cgit/cgit.cgi/opkg/log/?h=opkg-0.2.x
[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
|