Alexandru Ardelean [Thu, 11 May 2017 19:42:02 +0000 (22:42 +0300)]
opkg: add --no-check-certificate argument
For cases when artifacts are stored on https:// accessible
locations and you don't want to install ca-certificates
(for various reasons).
I'll admit, using SSL like this is not recommended,
but since wget (even uclient-fetch) allows the
--no-check-certificate option, it would be nice
for opkg to support setting it if needed/configured.
Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
Yousong Zhou [Mon, 20 Mar 2017 02:46:15 +0000 (10:46 +0800)]
libbb: xreadlink: fix memory leak on failure case
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
Alejandro del Castillo [Mon, 27 Mar 2017 21:58:17 +0000 (16:58 -0500)]
pkg_run_script: use pkg->dest in half installed case
Fixes running scripts for packages in half-installed state which would
otherwise fail with:
* pkg_run_script: Internal error: ... has a NULL tmp_unpack_dir.
* opkg_remove_pkg: not removing package "...", prerm script failed
Upstream bug: https://bugzilla.yoctoproject.org/show_bug.cgi?id=11245
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
[Jo-Philipp Wich: rebased onto opkg-lede, updated commit message]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Alejandro del Castillo [Wed, 23 Mar 2016 23:14:50 +0000 (18:14 -0500)]
check_data_file_clashes_change: remove duplicated offline root in paths
The function check_data_file_clashes_change update the ownership of
files that belong to a package being replaced. It calls
pkg_get_installed_files then adds an offline root if
opkg_conf->offline_root to each path. However, pkg_get_installed_files
already returns paths with the offline root (if present).
This fixes issue 156.
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Alejandro del Castillo [Mon, 21 Mar 2016 22:33:59 +0000 (17:33 -0500)]
buildReplaces: do not add duplicated replacees
If package A both replaces and conflicts package B, it is added
unconditionally to the replaced_by vector of package B. Add check to
only add it if it's not there to avoid inaccurate warnings of the type:
Multiple replacers for X, using first one
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Ross Burton [Tue, 1 Mar 2016 16:54:26 +0000 (16:54 +0000)]
opkg: compare-versions doesn't need any state
compare-versions doesn't need lock files created and databases opened, so don't.
Signed-off-by: Ross Burton <ross.burton@intel.com>
Jo-Philipp Wich [Wed, 15 Mar 2017 02:08:18 +0000 (03:08 +0100)]
opkg_cmd: fix segmentation fault in opkg_compare_versions_cmd()
Due to the fact that we're using blob buffers internally now we cannot simpyl
call parse_version() on an uninitialized struct.
Properly create the temporary packages using pkg_new() and deallocated them
using pkg_deinit() and free().
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Ross Burton [Tue, 1 Mar 2016 18:03:29 +0000 (18:03 +0000)]
opkg_cmd: fix return of opkg compare-versions
The implementation of opkg compare-version was simply returning the return value
of pkg_version_satisfied(), which returns a boolean. This results in inverted
logic in that:
$ opkg compare-version 1.0 == 1.0 || echo different
different
That's clearly not right. As nobody had noticed this before presumably nobody
was actually using this (likely either opkg-compare-version or
opkg-compare-versions.sh) just change the return value so it's correct.
Signed-off-by: Ross Burton <ross.burton@intel.com>
Alejandro del Castillo [Wed, 10 Feb 2016 22:27:37 +0000 (16:27 -0600)]
pkg_src_list_push: remove unused function
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Alejandro del Castillo [Wed, 10 Feb 2016 22:27:36 +0000 (16:27 -0600)]
pkg_src_list_pop: remove unused function
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Alejandro del Castillo [Wed, 10 Feb 2016 22:27:35 +0000 (16:27 -0600)]
str_list_push: remove unused function
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Alejandro del Castillo [Wed, 10 Feb 2016 22:27:34 +0000 (16:27 -0600)]
str_list_prev: remove unused function
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Alejandro del Castillo [Wed, 10 Feb 2016 22:27:33 +0000 (16:27 -0600)]
str_list_last: remove unused function
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Alejandro del Castillo [Wed, 10 Feb 2016 22:27:28 +0000 (16:27 -0600)]
conffile_list_pop: remove unused function
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Alejandro del Castillo [Wed, 10 Feb 2016 22:27:31 +0000 (16:27 -0600)]
pkg_dest_list_push: remove unused functions
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Alejandro del Castillo [Wed, 10 Feb 2016 22:27:30 +0000 (16:27 -0600)]
nv_pair_list_prev: remove unused function
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Alejandro del Castillo [Wed, 10 Feb 2016 22:27:29 +0000 (16:27 -0600)]
nv_pair_list_last: remove unused function
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Alejandro del Castillo [Wed, 10 Feb 2016 22:27:28 +0000 (16:27 -0600)]
conffile_list_pop: remove unused function
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Alejandro del Castillo [Wed, 10 Feb 2016 22:27:27 +0000 (16:27 -0600)]
conffile_list_push: remove unused function
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Alejandro del Castillo [Wed, 10 Feb 2016 22:27:26 +0000 (16:27 -0600)]
active_list_sort: remove unused function
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
[Jo-Philipp Wich: remove call from opkg_active_list_test]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Alejandro del Castillo [Wed, 10 Feb 2016 22:27:25 +0000 (16:27 -0600)]
active_list_add_depend: remove unused function
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
[Jo-Philipp Wich: remove call from opkg_active_list_test]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Alejandro del Castillo [Mon, 23 Nov 2015 19:48:42 +0000 (13:48 -0600)]
pkg_dependence_satisfied: remove unused function
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Michael Hansen [Wed, 14 Sep 2016 20:42:26 +0000 (13:42 -0700)]
Fix typo in pkg_hash_fetch_best_installation_candidate.
A (presumed) typo in pkg_hash_fetch_best_installation_candidate caused the
matching_pkgs vec to be sorted twice, instead of sorting matching_apkgs.
This fixes both the call and the API to match what appears to be intended.
Signed-off-by: Michael Hansen <michael.j.hansen@hp.com>
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
Alejandro del Castillo [Wed, 22 Feb 2017 23:32:08 +0000 (17:32 -0600)]
set_flags_from_control: remove function
During installs, install_data_files calls set_flags_from_control to
capture the case where fields, such as "Essential", are present in the
package control file but are missing on the Packages file. This
operation is expensive (re-parses the control file) and is catering to a
case that should not be supported on the first place.
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
[Jo-Philipp Wich: remove function prototype as well]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Mar 2017 00:32:52 +0000 (01:32 +0100)]
opkg_active_list_test: mark functions static, swap strcmp() with memcmp()
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Mar 2017 00:29:35 +0000 (01:29 +0100)]
libopkg_test: mark functions static, remove unused opkg_test()
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Mar 2017 00:26:16 +0000 (01:26 +0100)]
pkg_parse: fix bad message level for opkg_msg() call
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Mar 2017 00:23:31 +0000 (01:23 +0100)]
pkg_parse: remove unused variable in pkg_parse_line()
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Mar 2017 00:21:03 +0000 (01:21 +0100)]
pkg_parse: remove const requirement from pkg_parse_line()
To simplify parsing we'd like to be able to modify the passed line buffer
inplace, so remove the const requirement from the pkg_parse_line() argument.
Convert pkg_parse_line's sole user accordingly.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Mar 2017 00:16:23 +0000 (01:16 +0100)]
pkg_hash: remove unused variable in pkg_hash_load_feeds()
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Mar 2017 00:13:26 +0000 (01:13 +0100)]
pkg_depends: add missing parse_replacelist() prototype
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Mar 2017 00:11:14 +0000 (01:11 +0100)]
opkg_utils: add missing header
Include "opkg_utils.h" header file to declare function prototypes.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Mar 2017 00:04:49 +0000 (01:04 +0100)]
libopkg: remove unused progress parameters from opkg_download()
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Tue, 14 Mar 2017 23:59:45 +0000 (00:59 +0100)]
libopkg: remove unused progress callback
The current opkg_download() implementation completely ignores the passed
progress callback function, so drop this unused code.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Mar 2017 00:06:32 +0000 (01:06 +0100)]
libopkg: remove unused variable from opkg_install_package()
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Tue, 14 Mar 2017 23:52:47 +0000 (00:52 +0100)]
libbb: remove unused variables
Remove unused variables from deb_extract() to avoid compiler warnings.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Tue, 14 Mar 2017 23:50:46 +0000 (00:50 +0100)]
libbb: change gzip_read() buffer argument to void *
Make gzip_read() expect a void * buffer argument to avoid signed vs unsigned
char mismatch warnings.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Tue, 14 Mar 2017 23:47:23 +0000 (00:47 +0100)]
libbb: fix gzip_thread() warnings
- mark function static
- add missing return statement
- avoid uninitialized use of "len"
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Glenn Strauss [Thu, 2 Mar 2017 22:53:42 +0000 (17:53 -0500)]
libopkg/opkg_cmd.c: more robust PATH handling
preserve semantics of PATH when PATH is not set in environment
error and undefined behavior reported in
https://github.com/openwrt/packages/issues/1922
when PATH not set in environment
(lighttpd executes CGI with empty base env, plus standard CGI env vars)
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
[Jo-Philipp Wich: avoid free() on NULL, use default from cmake cache string]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Glenn Strauss [Thu, 2 Mar 2017 22:53:09 +0000 (17:53 -0500)]
libopkg: specify "/bin/sh" instead of "sh"
avoid strange behavior with execvp() when PATH is not set in environment
(in which case confstr(_CS_PATH) should return something reasonable)
reproducable running openwrt 15.05 and 15.05.1 and attempting to install
a software package (e.g. libuuid) via LuCI (prior to openwrt/luci#1048).
(https://github.com/openwrt/luci/pull/1048) libuuid.postinst fails with
status 255 on 15.05 and opkg segfaults in 15.05.1. This probably merits
further exploration.
Originally reported in https://github.com/openwrt/packages/issues/1922
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
Jo-Philipp Wich [Tue, 28 Feb 2017 23:46:39 +0000 (00:46 +0100)]
unarchive: fix possible segmentation fault in deb_extract()
When a not existing or unreachable file path is passed to deb_extract(),
the wfopen() call fails, causing a jump to the cleanup: label which leads
to a call to gzip_close() on the tar_outer structure.
The tar_outer structure however contains uninitialized memory at this point,
causing gzip_close() to operate on garbage data. Depending on the nature of
the unitialized memory, this might lead to all sorts of issues, e.g. freeing
of not allocated memory or invoking fclose() on garbage pointers.
Solve this problem by initializing the tar_outer and tar_inner structures
right at the declaration.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Tue, 28 Feb 2017 23:08:40 +0000 (00:08 +0100)]
pkg: forward "provided_by_hand" flag in pkg_merge()
Due to the fact that we now load status files after preparing the abstract
structures describing the cli specified packages, we need to ensure that the
"provided_by_hand" flag is properly conveyed in pkg_merge(), otherwise the
cli provided package archive might get ignored in favor to a newer version
from feeds.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Tue, 28 Feb 2017 22:53:41 +0000 (23:53 +0100)]
pkg: mark bit fields in pkg_t unsigned
Qualify the bit field type as unsigned int to ensure that set flags are
interpreted as "1" and not "-1".
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Mon, 27 Feb 2017 22:23:59 +0000 (23:23 +0100)]
opkg_cmd: avoid null pointer dereference in opkg_what_depends_conflicts_cmd()
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Mon, 27 Feb 2017 19:19:21 +0000 (20:19 +0100)]
opkg_cmd: fix endless loop in whatprovides/whatreplaces
Fix the loop semantics in opkg_what_provides_replaces_cmd() to properly
advance the package vector pointer.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Mon, 27 Feb 2017 18:24:31 +0000 (19:24 +0100)]
pkg_depends: propagate virtual provided detail flag to providers
When the provided abstract package (e.g. "px5g" provided by "px5g-mbedtls") is
marked as requiring details, then mark the provider abstract package as well.
This ensures that package info for discrete provider packages is acquired and
retained if the virtual package they provide is being depended upon by another
package requiring details.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Pieter Smith [Thu, 23 Feb 2017 12:54:14 +0000 (13:54 +0100)]
pkg_depends: fix unsatisfied dependency installation order
Unsatisfied dependencies are not being installed in the correct order. The
algorithm is not crawling down the dependency chain first when inserting
unsatisfied dependencies, resulting in a correct installation order only for
the first layer of dependencies.
This patch changes the unsatisfied dependency insertion order to first add leaf
dependencies, then move up the chain. The result is a list of unsatisfied
dependencies ordered most-dependent-first.
An example that resulted in the incorrect installation order was:
A -> B
A -> C
B -> D
Without the fix, a most-dependent-first installation order was not guaranteed
more than one layer deep, resulting in an installation order where B is
incorrectly installed before D:
B, D, C, A
After the fix, the installation order follows most-dependent first irrespective
of the number of layers:
D, B, C, A
Signed-off-by: Pieter Smith <pieter.smith@philips.com>
[Jo-Philipp Wich: rebased onto opkg-lede.git]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 23 Feb 2017 15:37:35 +0000 (16:37 +0100)]
libopkg: fix some overly aggressive line wrapping in pkg_depends.c
Then deeply nested blocks in pkg_depends.c tripped up Lindent, causing it
to perform overly aggressive line wrapping.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 23 Feb 2017 08:42:47 +0000 (09:42 +0100)]
libopkg: remove stray printf()
This lone printf() statement was accidentally left in the code during some
previous refactoring session.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 22 Feb 2017 15:13:49 +0000 (16:13 +0100)]
libopkg: switch to GPL2 SHA256 implementation
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 22 Feb 2017 12:27:20 +0000 (13:27 +0100)]
libopkg: initialize conffile list during status parsing
When parsing conffile information from status files, we need to initialize
the conffile list head upon encountering a "Conffiles:" line, otherwise
parse_conffiles() will ignore all subsequent entries due to a missing list
pointer.
Fixes missing conffile information in /usr/lib/opkg/status on a fresh
installation.
Reported-by: Hartmut Birr <e9hack@gmail.com>
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Mon, 20 Feb 2017 13:43:30 +0000 (14:43 +0100)]
build: enable usign support
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Sat, 18 Feb 2017 14:45:53 +0000 (15:45 +0100)]
build: allow to pass version via CMake
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Sat, 18 Feb 2017 14:06:38 +0000 (15:06 +0100)]
libopkg: remove OpenSSL support
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Sat, 18 Feb 2017 14:04:02 +0000 (15:04 +0100)]
libopkg: remove Curl support
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Sat, 18 Feb 2017 14:00:14 +0000 (15:00 +0100)]
libopkg: remove GPG support
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Sat, 18 Feb 2017 13:57:20 +0000 (14:57 +0100)]
libopkg: remove x509 support
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Sat, 18 Feb 2017 13:53:16 +0000 (14:53 +0100)]
libopkg: drop custom md5 implementation, unconditionally enable sha256 support
Drop custom md5 implementation and switch to the one provided by libubox,
also remove support for enabling/disabling checksum support and always build
it unconditionally.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Sat, 18 Feb 2017 13:35:53 +0000 (14:35 +0100)]
libopkg: fix pkg_set_int(), pkg_get_int()
Fix the return values of pkg_get_int() and pkg_set_int() to properly
convert the pointers from/to integer values.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Sat, 18 Feb 2017 12:48:25 +0000 (13:48 +0100)]
libopkg: properly fix parse_version()
A previous attempt to fix the verison/revision split caused unterminated
strings to get stored in the blob buffer, properly fix this case now.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Sat, 18 Feb 2017 12:32:45 +0000 (13:32 +0100)]
build: fix handling of string options
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 19:01:42 +0000 (20:01 +0100)]
libopkg: do not modify original version string in parse_version()
The parse_version() function might be parsing the version string of another
pkg_t instance so we must not modify it inplace to truncate the revision
part, otherwise we will clobber the original version, leading to failing
comparisations later on.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 17:43:19 +0000 (18:43 +0100)]
build: add install target for opkg-cl
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 17:28:19 +0000 (18:28 +0100)]
build: enable SHA256 support
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 17:26:40 +0000 (18:26 +0100)]
opkg-cl: remove config.h reference
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 17:26:18 +0000 (18:26 +0100)]
libopkg: remove config.h references
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 17:22:02 +0000 (18:22 +0100)]
build: infer VERSION from Git history
Pass short hash and commit date as VERSION string.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 17:19:53 +0000 (18:19 +0100)]
build: do not unconditionally link libpthread
Some environments, e.g. musl libc based ones, do not have a dedicated
libpthread, so only link it if it exists.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 14:58:57 +0000 (15:58 +0100)]
opkg-cl: add missing include to import FNM_CASEFOLD
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 14:36:08 +0000 (15:36 +0100)]
build: expose LOCK_FILE option
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 14:21:44 +0000 (15:21 +0100)]
build: remove outdated files
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 14:17:36 +0000 (15:17 +0100)]
build: remove automake/autoconf build system
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 14:13:29 +0000 (15:13 +0100)]
.gitignore: ignore test executables
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 14:10:07 +0000 (15:10 +0100)]
.gitignore: ignore CMake artifacts
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 14:08:44 +0000 (15:08 +0100)]
tests: fix build of opkg_extract_test
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Fri, 17 Feb 2017 14:08:03 +0000 (15:08 +0100)]
build: add cmake build system
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 16 Feb 2017 15:44:07 +0000 (16:44 +0100)]
opkg-cl: stop preloading package feeds on install
Instead of unconditionally loading all package feed lists entirely into
memory, let opkg_install_cmd() selectively parse the lists using the new
pkg_hash_load_package_details() helper.
This will result in a slightly longer runtime but dramatically reduces the
memory requirements. On an x86_64 test system, the peak heap memory
consumption during an "opkg install luci" dropped from 3.7 MB to about
360 KB, a decrease of roughly 90%.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 16 Feb 2017 15:36:58 +0000 (16:36 +0100)]
libopkg: selectively load package feeds in opkg_info_status_cmd()
Use the new pkg_hash_load_package_details() helper to selectively load the
dependency subgraphs of the to be installed packages.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 16 Feb 2017 15:33:57 +0000 (16:33 +0100)]
libopkg: immediately free packages not marked for detail parsing
Stop recording packages into the dependency graph which are not flagged
with SF_NEED_DETAILS.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 16 Feb 2017 14:56:14 +0000 (15:56 +0100)]
libopkg: avoid aggregating multiple identical providers
Since we might do multiple parsing runs over the feed list files in the
future, ensure that we do not insert the abstract provider package multiple
times into the provided_by vector.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 16 Feb 2017 11:19:02 +0000 (12:19 +0100)]
libopkg: implement pkg_hash_load_package_details() helper
The purpose of this new function is to keep parsing feed lists until
all package detail requests are satisified.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 16 Feb 2017 11:16:29 +0000 (12:16 +0100)]
libopkg: support passing default state flags in pkg_hash_load_feeds()
Add a new argument to pkg_hash_load_feeds() which allows specifying default
state flags that should be applied to all loaded packages.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 16 Feb 2017 11:12:04 +0000 (12:12 +0100)]
libopkg: flag package with SF_NEED_DETAIL in pkg_init_from_file()
Flag the package loaded from file as SF_NEED_DETAIL to properly fetch and
resolve dependencies.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 16 Feb 2017 11:10:16 +0000 (12:10 +0100)]
libopkg: fix printing provides in pkg_formatted_field()
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 16 Feb 2017 10:57:55 +0000 (11:57 +0100)]
libopkg: fix pkg_deinit() to properly free the resources in the blob buffer
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 16 Feb 2017 10:50:02 +0000 (11:50 +0100)]
libopkg: free old provides list in pkg_merge()
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 16 Feb 2017 10:47:48 +0000 (11:47 +0100)]
libopkg: fix merging PKG_CONFFILES in pkg_merge()
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Thu, 16 Feb 2017 10:46:31 +0000 (11:46 +0100)]
libopkg: fix pkg_set_ptr() to properly set NULL pointers
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Feb 2017 23:24:29 +0000 (00:24 +0100)]
libopkg: allow passing common package state flags to pkg_hash_add_from_file()
Add a new parameter to pkg_hash_add_from_file() for passing package state
flags that shall be applied to all pkg_t instances parsed from the given
file and use it to mark all packages loaded from local status files with
the SF_NEED_DETAIL flag.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Feb 2017 23:21:05 +0000 (00:21 +0100)]
libopkg: propagate SF_NEED_DETAIL from abstract to discrete package
During parsing, propagate the state of the SF_NEED_DETAIL flag from the
related abstract package to the discrete pkg_t instance getting assembled.
This is required to ensure that subsequent parsing of pkg_t's dependency
lists considers the state of SF_NEED_DETAIL.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Feb 2017 23:18:25 +0000 (00:18 +0100)]
libopkg: do not clobber package flags during parsing
When parsing "Status:" lines from package control or list files, do not
overwrite previously set flags in the package structure.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Feb 2017 23:15:05 +0000 (00:15 +0100)]
libopkg: propagate SF_NEED_DETAIL to related packages
When parsing Provides, Suggests, Conflicts, Replaces and Depends lists,
propagate the parent package SF_NEED_DETAIL flag to related abstract
packages in order to ensure that the entire related dependency graph
is processed.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Feb 2017 23:09:05 +0000 (00:09 +0100)]
libopkg: directly pass type to parseDepends()
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Feb 2017 23:01:58 +0000 (00:01 +0100)]
libopkg: expose abstract_pkg_fetch_by_name()
We need this function in other places later in order to be able to fetch
abstract packages without implicitely creating them.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Feb 2017 22:54:13 +0000 (23:54 +0100)]
libopkg: mark to-be-installed non-local, non-url packages for detail parsing
When just a package name is passed to opkg install, we need to retrieve
information about this package from the feeds list so stage an abstract
package with the given name and flag it with SF_NEED_DETAIL.
Packages specified as local file paths or direct download URLs do not
need this special treatment as the required details can be extracted
from their embedded control files.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Feb 2017 22:47:53 +0000 (23:47 +0100)]
libopkg: introduce SF_NEED_DETAIL flag
Introduce a new pkt_t state_flag value SF_NEED_DETAIL which will be used
to mark packages for which we require details.
When parsing the feed lists, we'll only keep information about packages
marked with SF_NEED_DETAIL and packages related to them through Provides,
Suggests, Conflicts, Depends etc.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Feb 2017 22:42:58 +0000 (23:42 +0100)]
libopkg: make checksum_bin2hex() and checksum_hex2bin() cope with NULL
Those functions may be called with a NULL source pointer, especially during
pkg_merge(), so allow that to keep call sites simple.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Wed, 15 Feb 2017 22:39:47 +0000 (23:39 +0100)]
libopkg: fix unsatisfied dependency reporting
Previous refactoring of pkg_hash_fetch_unsatisfied_dependencies() caused the
outermost loop counter variable to not get incremented anymore, causing the
function to always report the first dependency as unsatisifed.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Mon, 13 Feb 2017 17:07:04 +0000 (18:07 +0100)]
libopkg: fix hex encoding/decoding, add checksum getter/setter
Fix broken hex encoding/decoding due to the use of signed chars and introduce
new convenience getters and setters to simplify the checksum usage.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich [Mon, 13 Feb 2017 17:07:04 +0000 (18:07 +0100)]
libopkg: store checksums in binary form, use integer index for architecture
Instead of storing a copy of the architecture string and architecture
priority value in each pkg_t instance, declare a 3 bit wide field which
allows referencing the architecture in the global config array by index.
The 3 bit field allows referencing up to 8 different architectures which
is more than enough for the systems we target with opkg. Another nice side
effect is that we can coalesce this field with other flag values in pkg_t,
saving 4 bytes for an int member.
Also convert the hexadecimal checksums to binary format before storing them in
pkg_t's blob buffer to save 50% of the space per checksum.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>