[[!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