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 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 -- 2.6.4 _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev