On 03/05/2017 10:31 AM, Yousong Zhou wrote: > This patch set tries to make it possible that files serving the same purpose > and installed to different locations can be available under the same name > through a symbolic link > > The idea is from alternatives of debian system [1,2]. "ip" command is a good > example of the problem it tries to solve [3]. Files provided by different > packages cannot be installed to the same location, so we have busybox ip, > ip-tiny, ip-full all installed to different locations > > It works by first adding to CONTROL file of each ipkg a new field > "Alternatives", > which is a list of specs of the following form seprated by commas to describe > alternatives provided by this package > > <prio>:<path>:<altpath> > > The new field will be interpreted by postinst and prerm script. <path> will > be > a symbolic link to <altpath> of the highest <prio>, and updates will be made > to > UCI config "opkg" > > Several patches for uci are also included here to support usage at build-time. > The whole series is available in my staging tree [4] > > [1] https://wiki.debian.org/DebianAlternatives > [2] > https://debian-administration.org/article/91/Using_the_Debian_alternatives_system > [3] https://bugs.lede-project.org/index.php?do=details&task_id=428 > [4] https://git.lede-project.org/?p=lede/yousong/staging.git;a=summary
First of all, thank you very much for working on this, I've been missing this feature for a long time. I have some comments though: I see that the opkg UCI config contains a lot of redundant data when many alternatives are installed (for example, many busybox applets and their corresponding coreutils/util-linux/... variants); AFAICT, the same information is also available in the opkg status files. I think I'd opt for not making this list of alternatives configurable independently of opkg. Adding configuration to UCI would only be necessary when a user overrides the automatic selection. This could also avoid adding host UCI support to the build system, making the whole patchset a lot smaller. Matthias > > Content of UCI config file "opkg" when busybox and ip-tiny are installed > > root@LEDE:/# uci export opkg > package opkg > > config alternatives > option path '/sbin/ip' > list altpath '100:/bin/busybox' > list altpath '200:/sbin/ip-tiny' > > Install ip-full > > root@LEDE:/# opkg install /tmp/ip-full_4.4.0-9_mips_24kc.ipk > Installing ip-full (4.4.0-9) to root... > Configuring ip-full. > /usr/sbin/update-alternatives: link /sbin/ip -> /sbin/ip-full > root@LEDE:/# uci export opkg > package opkg > > config alternatives > option path '/sbin/ip' > list altpath '100:/bin/busybox' > list altpath '200:/sbin/ip-tiny' > list altpath '300:/sbin/ip-full' > > Remove ip-full > > root@LEDE:/# opkg remove ip-full > Removing package ip-full from root... > /usr/sbin/update-alternatives: link /sbin/ip -> /sbin/ip-tiny > root@LEDE:/# uci export opkg > package opkg > > config alternatives > option path '/sbin/ip' > list altpath '100:/bin/busybox' > list altpath '200:/sbin/ip-tiny' > > Remove ip-tiny > > root@LEDE:/# opkg remove ip-tiny > Removing package ip-tiny from root... > /usr/sbin/update-alternatives: link /sbin/ip -> /bin/busybox > root@LEDE:/# uci export opkg > package opkg > > config alternatives > option path '/sbin/ip' > list altpath '100:/bin/busybox' > > The "opkg" file and update-alternatives are not intended for interactive use, > but let's a demo can be useful for understanding > > root@LEDE:/# update-alternatives remove --spec 100:/sbin/ip:/bin/busybox > /usr/sbin/update-alternatives: remove empty alternatives section for > /sbin/ip > root@LEDE:/# uci export opkg > package opkg > > root@LEDE:/# ip > /bin/ash: ip: not found > root@LEDE:/# update-alternatives update --spec 100:/sbin/ip:/bin/busybox > /usr/sbin/update-alternatives: link /sbin/ip -> /bin/busybox > root@LEDE:/# uci export opkg > package opkg > > config alternatives > option path '/sbin/ip' > list altpath '100:/bin/busybox' > > root@LEDE:/# > > Yousong Zhou (12): > opkg: add update-alternatives support > uci: patch for static host build > uci: add host build > build: prepare_rootfs: preserve prerm script > build: cleanup tmp/ dir of target rootfs > build: opkg: enable presence of uci > build: ipkg: new field Alternatives > base-files: link /var to tmp instead of /tmp > base-files: enable presence of uci when IPKG_INSTROOT is set > base-files: add update-alternatives call to default_{postinst,prerm} > busybox: add as an alternative of /sbin/ip > iproute2: add ip-tiny, ip-full as alternatives of /sbin/ip > > include/package-ipkg.mk | 1 + > include/rootfs.mk | 20 ++- > package/Makefile | 3 +- > package/base-files/Makefile | 4 +- > package/base-files/files/lib/functions.sh | 21 ++- > package/network/utils/iproute2/Makefile | 28 ++-- > package/system/opkg/Makefile | 5 +- > package/system/opkg/files/update-alternatives | 163 > +++++++++++++++++++++ > package/system/uci/Makefile | 15 +- > package/system/uci/files/lib/config/uci.sh | 31 ++-- > .../uci/patches/0001-build-fix-BUILD_STATIC.patch | 63 ++++++++ > ...-redundant-NULL-check-on-return-value-of-.patch | 29 ++++ > ...w-setting-confdir-and-savedir-with-enviro.patch | 58 ++++++++ > package/utils/busybox/Makefile | 3 +- > 14 files changed, 407 insertions(+), 37 deletions(-) > create mode 100755 package/system/opkg/files/update-alternatives > create mode 100644 > package/system/uci/patches/0001-build-fix-BUILD_STATIC.patch > create mode 100644 > package/system/uci/patches/0002-file-remove-redundant-NULL-check-on-return-value-of-.patch > create mode 100644 > package/system/uci/patches/0003-libuci-allow-setting-confdir-and-savedir-with-enviro.patch >
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev