system: add option to choose what /bin/sh points to
RFC PATCH 1/1 system: add option to choose what /bin/sh points to
Not all our shells do install a pointer to /bin/sh. Besides, between those that do and multiple ones are enabled, the last one to install wins the the symlink.
Add a new config choice in the system sub-menu that allows the user to explicitly select the shell to provide /bin/sh.
Remove the symlink creation from bash.mk at the same time.
Note: for every shell, we select them, except busybox, on which we depend, on the assumption that we do not want to force busybox in case the user decided not to enable it.
--- package/bash/bash.mk | 1 - system/Config.in | 43 +++++++++++++++++++++++++++++++++++++++++++ system/system.mk | 12 ++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-)
package/bash/bash.mk +0 -1
@@ -35,7 +35,6 @@ define BASH_INSTALL_TARGET_CMDS $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ DESTDIR=$(TARGET_DIR) exec_prefix=/ install rm -f $(TARGET_DIR)/bin/bashbug - ln -sf bash $(TARGET_DIR)/bin/sh endef $(eval $(autotools-package))
system/Config.in +43 -0
49 lines not on this page · raw message
system/system.mk +12 -0
@@ -2,6 +2,7 @@ TARGET_GENERIC_HOSTNAME = $(call qstrip,$(BR2_TARGET_GENERIC_HOSTNAME)) TARGET_GENERIC_ISSUE = $(call qstrip,$(BR2_TARGET_GENERIC_ISSUE)) TARGET_GENERIC_ROOT_PASSWD = $(call qstrip,$(BR2_TARGET_GENERIC_ROOT_PASSWD)) TARGET_GENERIC_PASSWD_METHOD = $(call qstrip,$(BR2_TARGET_GENERIC_PASSWD_METHOD)) +TARGET_GENERIC_BIN_SH = $(call qstrip,$(BR2_SYSTEM_BIN_SH)) TARGET_GENERIC_GETTY_PORT = $(call qstrip,$(BR2_TARGET_GENERIC_GETTY_PORT)) TARGET_GENERIC_GETTY_BAUDRATE = $(call qstrip,$(BR2_TARGET_GENERIC_GETTY_BAUDRATE)) TARGET_GENERIC_GETTY_TERM = $(call qstrip,$(BR2_TARGET_GENERIC_GETTY_TERM))
@@ -46,6 +47,17 @@ define SYSTEM_ROOT_PASSWD endef TARGET_FINALIZE_HOOKS += SYSTEM_ROOT_PASSWD +ifeq ($(BR2_SYSTEM_BIN_SH_NONE),y) +define SYSTEM_BIN_SH + rm -f $(TARGET_DIR)/bin/sh +endef +else +define SYSTEM_BIN_SH + ln -sf $(TARGET_GENERIC_BIN_SH) $(TARGET_DIR)/bin/sh +endef +endif +TARGET_FINALIZE_HOOKS += SYSTEM_BIN_SH + ifeq ($(BR2_TARGET_GENERIC_GETTY),y) ifeq ($(BR2_PACKAGE_SYSVINIT),y) # In sysvinit inittab, the "id" must not be longer than 4 bytes, so we
Signature · 1 line
1.9.1
RFC PATCH 1/1 system: add option to choose what /bin/sh points to
Quoted 6 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Yann" == Yann E MORIN <[email protected]> writes:
Not all our shells do install a pointer to
/bin/sh. Besides, between those that do and multiple ones are enabled, the last one to install wins the the symlink.
Quoted 8 lines
Add a new config choice in the system sub-menu that allows the user to explicitly select the shell to provide
/bin/sh.Remove the symlink creation from bash.mk at the same time.
Note: for every shell, we select them, except busybox, on which we depend, on the assumption that we do not want to force busybox in case the user decided not to enable it.
But we default to BR2_INIT_BUSYBOX, so you still need to go into the system menu and disable that before you can deselect busybox.
Another issue with the 'depends on' is that if you disable busybox the choice then jumps to the next option which pulls in bash (which might not really be what you want when you try to save space by disabling busybox).
So I think it is better to use selects everywhere.
Quoted 32 lines
Signed-off-by "Yann E. MORIN" <[email protected]>Cc Gustavo Zacarias <[email protected]>--- package/bash/bash.mk | 1 - system/Config.in | 43 +++++++++++++++++++++++++++++++++++++++++++ system/system.mk | 12 ++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-)package/bash/bash.mk +0
-1@@ -35,7 +35,6 @@ define BASH_INSTALL_TARGET_CMDS $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ DESTDIR=$(TARGET_DIR) exec_prefix=/ install rm -f $(TARGET_DIR)/bin/bashbug - ln -sf bash $(TARGET_DIR)/bin/sh endef $(eval $(autotools-package))system/Config.in +4
-0@@ -211,6 +211,49 @@ config BR2_TARGET_GENERIC_ROOT_PASSWD in the build log! Avoid using a valuable password if either the .config file or the build log may be distributed! +choice + bool "/bin/sh" + help + Select which shell will provide /bin/sh.
system/Config.in config BR2_TARGET_GENERIC_ROOT_PASSWD · line 227
Quoted 10 lines
system/Config.in +10
-0+ +# busybox has shells that work on noMMU +config BR2_SYSTEM_BIN_SH_BUSYBOX + bool "busybox' default shell" + depends on BR2_PACKAGE_BUSYBOX + +config BR2_SYSTEM_BIN_SH_BASH + bool "bash" + depends on BR2_USE_MMU # bash + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS || !BR2_PACKAGE_BUSYBOX
You arguably don't need the || !BR2_PACKAGE_BUSYBOX as we do a trick and make BR2_PACKAGE_BUSYBOX_SHOW_OTHERS a hidden symbol (=y) when busybox isn't enabled.
With that said, it doesn't actually work when I change the busybox option to use select:
system/Config.in:214:error: recursive dependency detected!
system/Config.in:214: choice <choice> contains symbol BR2_SYSTEM_BIN_SH_BASH
system/Config.in:224: symbol BR2_SYSTEM_BIN_SH_BASH depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
package/busybox/Config.in:23: symbol BR2_PACKAGE_BUSYBOX_SHOW_OTHERS depends on BR2_PACKAGE_BUSYBOX
package/busybox/Config.in:1: symbol BR2_PACKAGE_BUSYBOX is selected by BR2_SYSTEM_BIN_SH_BUSYBOX
system/Config.in:220: symbol BR2_SYSTEM_BIN_SH_BUSYBOX is part of choice <choice>
Any idea what we can do?
Signature · 1 line
Bye, Peter Korsgaard
RFC PATCH 1/1 system: add option to choose what /bin/sh points to
Quoted 18 lines · Peter Korsgaard
Quoted 6 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Yann" == Yann E MORIN <[email protected]> writes:
Not all our shells do install a pointer to
/bin/sh. Besides, between those that do and multiple ones are enabled, the last one to install wins the the symlink.Quoted 8 lines
Add a new config choice in the system sub-menu that allows the user to explicitly select the shell to provide
/bin/sh.Remove the symlink creation from bash.mk at the same time.
Note: for every shell, we select them, except busybox, on which we depend, on the assumption that we do not want to force busybox in case the user decided not to enable it.
But we default to
BR2_INIT_BUSYBOX, so you still need to go into the system menu and disable that before you can deselect busybox.
Quoted 6 lines
Another issue with the 'depends on' is that if you disable busybox the choice then jumps to the next option which pulls in bash (which might not really be what you want when you try to save space by disabling busybox).
So I think it is better to use selects everywhere.
I disagree.
For people who want to avoid busybox, it is already annoying that they have to
change their init system first. Adding more implicit selects of busybox is not going to make their life easier.
For the jumping, it's better to fix it by adding a 'default dash if !busybox' line.
And since busybox is on by default, there is no strong need for a select - if
the user deselects busybox I guess they know what they're doing.
And also using a depends solves the issue you mention below :-)
Regards,
Arnout
Quoted 60 lines
Quoted 33 lines
Signed-off-by "Yann E. MORIN" <[email protected]>Cc Gustavo Zacarias <[email protected]>--- package/bash/bash.mk | 1 - system/Config.in | 43 +++++++++++++++++++++++++++++++++++++++++++ system/system.mk | 12 ++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-)package/bash/bash.mk +0
-1@@ -35,7 +35,6 @@ define BASH_INSTALL_TARGET_CMDS $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ DESTDIR=$(TARGET_DIR) exec_prefix=/ install rm -f $(TARGET_DIR)/bin/bashbug - ln -sf bash $(TARGET_DIR)/bin/sh endef $(eval $(autotools-package))system/Config.in +4
-0@@ -211,6 +211,49 @@ config BR2_TARGET_GENERIC_ROOT_PASSWD in the build log! Avoid using a valuable password if either the .config file or the build log may be distributed! +choice + bool "/bin/sh" + help + Select which shell will provide /bin/sh.system/Config.in config BR2_TARGET_GENERIC_ROOT_PASSWD · line 227
Quoted 10 lines
system/Config.in +10
-0+ +# busybox has shells that work on noMMU +config BR2_SYSTEM_BIN_SH_BUSYBOX + bool "busybox' default shell" + depends on BR2_PACKAGE_BUSYBOX + +config BR2_SYSTEM_BIN_SH_BASH + bool "bash" + depends on BR2_USE_MMU # bash + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS || !BR2_PACKAGE_BUSYBOXYou arguably don't need the || !BR2_PACKAGE_BUSYBOX as we do a trick and make
BR2_PACKAGE_BUSYBOX_SHOW_OTHERSa hidden symbol (=y) when busybox isn't enabled.With that said, it doesn't actually work when I change the busybox option to use select:
system/Config.in:214:error: recursive dependency detected!
system/Config.in:214: choice <choice> contains symbolBR2_SYSTEM_BIN_SH_BASH
system/Config.in:224: symbolBR2_SYSTEM_BIN_SH_BASHdepends onBR2_PACKAGE_BUSYBOX_SHOW_OTHERS
package/busybox/Config.in:23: symbolBR2_PACKAGE_BUSYBOX_SHOW_OTHERSdepends onBR2_PACKAGE_BUSYBOX
package/busybox/Config.in:1: symbolBR2_PACKAGE_BUSYBOXis selected byBR2_SYSTEM_BIN_SH_BUSYBOX
system/Config.in:220: symbolBR2_SYSTEM_BIN_SH_BUSYBOXis part of choice <choice>Any idea what we can do?
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286500 Essensium/Mind http://www.mind.be G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
RFC PATCH 1/1 system: add option to choose what /bin/sh points to
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Arnout" == Arnout Vandecappelle <[email protected]> writes:
Hi,
Quoted 16 lines
Quoted 9 lines
But we default to
BR2_INIT_BUSYBOX, so you still need to go into the system menu and disable that before you can deselect busybox.Another issue with the 'depends on' is that if you disable busybox the choice then jumps to the next option which pulls in bash (which might not really be what you want when you try to save space by disabling busybox).
So I think it is better to use selects everywhere.
I disagree.
For people who want to avoid busybox, it is already annoying that they have to
change their init system first. Adding more implicit selects of busybox is not going to make their life easier.
Quoted 6 lines
For the jumping, it's better to fix it by adding a 'default dash if !busybox' line.
And since busybox is on by default, there is no strong need for a select - if
the user deselects busybox I guess they know what they're doing.And also using a depends solves the issue you mention below :-)
Ok, that's also fine by me.
Signature · 1 line
Bye, Peter Korsgaard