[LEDE-DEV] [PATCH 00/12] alternatives support

Yousong Zhou yszhou4tech at gmail.com
Sun Mar 5 01:31:31 PST 2017


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 at 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 at 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 at 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 at LEDE:/# opkg remove ip-full
	Removing package ip-full from root...
	/usr/sbin/update-alternatives: link /sbin/ip -> /sbin/ip-tiny
	root at 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 at LEDE:/# opkg remove ip-tiny
	Removing package ip-tiny from root...
	/usr/sbin/update-alternatives: link /sbin/ip -> /bin/busybox
	root at 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 at LEDE:/# update-alternatives remove --spec 100:/sbin/ip:/bin/busybox
	/usr/sbin/update-alternatives: remove empty alternatives section for /sbin/ip
	root at LEDE:/# uci export opkg
	package opkg

	root at LEDE:/# ip
	/bin/ash: ip: not found
	root at LEDE:/# update-alternatives update --spec 100:/sbin/ip:/bin/busybox
	/usr/sbin/update-alternatives: link /sbin/ip -> /bin/busybox
	root at LEDE:/# uci export opkg
	package opkg

	config alternatives
			option path '/sbin/ip'
			list altpath '100:/bin/busybox'

	root at 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




More information about the Lede-dev mailing list