71c75a5ea0
Configuring the network interface with DHCP via /etc/network/interfaces generally does not work when NFS booting. The DHCP configuration will initially bring the interface down and system then hangs at that point as the root filesystem is no longer accessable. This adds a script to be run via a pre-up line in /etc/network/interfaces. It checks for a NFS root filesystem and if the interface to be configured is used for access to the NFS server. If this is the case, then it returns a failure code so that ifup will not configure the interface. This works for DHCP and another config methods (static, bootp, etc.). This system does detect if the interface to be configured isn't the one used for NFS and doesn't skip it when that is the case. NFS filesystems that aren't the root fs aren't considered. Fixes bug #4790. Signed-off-by: Trent Piepho <tpiepho@kymetacorp.com> Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
179 lines
6.4 KiB
Makefile
179 lines
6.4 KiB
Makefile
################################################################################
|
|
#
|
|
# skeleton
|
|
#
|
|
################################################################################
|
|
|
|
# source included in buildroot
|
|
SKELETON_SOURCE =
|
|
|
|
# The skeleton can't depend on the toolchain, since all packages depends on the
|
|
# skeleton and the toolchain is a target package, as is skeleton.
|
|
# Hence, skeleton would depends on the toolchain and the toolchain would depend
|
|
# on skeleton.
|
|
SKELETON_ADD_TOOLCHAIN_DEPENDENCY = NO
|
|
|
|
ifeq ($(BR2_ROOTFS_SKELETON_CUSTOM),y)
|
|
SKELETON_PATH = $(BR2_ROOTFS_SKELETON_CUSTOM_PATH)
|
|
else
|
|
SKELETON_PATH = system/skeleton
|
|
endif
|
|
|
|
ifeq ($(BR2_ROOTFS_MERGED_USR),y)
|
|
define SKELETON_USR_SYMLINKS_OR_DIRS
|
|
ln -snf usr/bin $(TARGET_DIR)/bin
|
|
ln -snf usr/sbin $(TARGET_DIR)/sbin
|
|
ln -snf usr/lib $(TARGET_DIR)/lib
|
|
endef
|
|
else
|
|
define SKELETON_USR_SYMLINKS_OR_DIRS
|
|
$(INSTALL) -d -m 0755 $(TARGET_DIR)/bin
|
|
$(INSTALL) -d -m 0755 $(TARGET_DIR)/sbin
|
|
$(INSTALL) -d -m 0755 $(TARGET_DIR)/lib
|
|
endef
|
|
endif
|
|
|
|
define SKELETON_INSTALL_TARGET_CMDS
|
|
rsync -a --ignore-times $(SYNC_VCS_EXCLUSIONS) \
|
|
--chmod=u=rwX,go=rX --exclude .empty --exclude '*~' \
|
|
$(SKELETON_PATH)/ $(TARGET_DIR)/
|
|
$(SKELETON_USR_SYMLINKS_OR_DIRS)
|
|
ln -snf lib $(TARGET_DIR)/$(LIB_SYMLINK)
|
|
ln -snf lib $(TARGET_DIR)/usr/$(LIB_SYMLINK)
|
|
$(INSTALL) -m 0644 support/misc/target-dir-warning.txt \
|
|
$(TARGET_DIR_WARNING_FILE)
|
|
endef
|
|
|
|
SKELETON_TARGET_GENERIC_HOSTNAME = $(call qstrip,$(BR2_TARGET_GENERIC_HOSTNAME))
|
|
SKELETON_TARGET_GENERIC_ISSUE = $(call qstrip,$(BR2_TARGET_GENERIC_ISSUE))
|
|
SKELETON_TARGET_GENERIC_ROOT_PASSWD = $(call qstrip,$(BR2_TARGET_GENERIC_ROOT_PASSWD))
|
|
SKELETON_TARGET_GENERIC_PASSWD_METHOD = $(call qstrip,$(BR2_TARGET_GENERIC_PASSWD_METHOD))
|
|
SKELETON_TARGET_GENERIC_BIN_SH = $(call qstrip,$(BR2_SYSTEM_BIN_SH))
|
|
SKELETON_TARGET_GENERIC_GETTY_PORT = $(call qstrip,$(BR2_TARGET_GENERIC_GETTY_PORT))
|
|
SKELETON_TARGET_GENERIC_GETTY_BAUDRATE = $(call qstrip,$(BR2_TARGET_GENERIC_GETTY_BAUDRATE))
|
|
SKELETON_TARGET_GENERIC_GETTY_TERM = $(call qstrip,$(BR2_TARGET_GENERIC_GETTY_TERM))
|
|
SKELETON_TARGET_GENERIC_GETTY_OPTIONS = $(call qstrip,$(BR2_TARGET_GENERIC_GETTY_OPTIONS))
|
|
|
|
ifneq ($(SKELETON_TARGET_GENERIC_HOSTNAME),)
|
|
define SYSTEM_HOSTNAME
|
|
mkdir -p $(TARGET_DIR)/etc
|
|
echo "$(SKELETON_TARGET_GENERIC_HOSTNAME)" > $(TARGET_DIR)/etc/hostname
|
|
$(SED) '$$a \127.0.1.1\t$(SKELETON_TARGET_GENERIC_HOSTNAME)' \
|
|
-e '/^127.0.1.1/d' $(TARGET_DIR)/etc/hosts
|
|
endef
|
|
TARGET_FINALIZE_HOOKS += SYSTEM_HOSTNAME
|
|
endif
|
|
|
|
ifneq ($(SKELETON_TARGET_GENERIC_ISSUE),)
|
|
define SYSTEM_ISSUE
|
|
mkdir -p $(TARGET_DIR)/etc
|
|
echo "$(SKELETON_TARGET_GENERIC_ISSUE)" > $(TARGET_DIR)/etc/issue
|
|
endef
|
|
TARGET_FINALIZE_HOOKS += SYSTEM_ISSUE
|
|
endif
|
|
|
|
define SET_NETWORK_LOCALHOST
|
|
( \
|
|
echo "# interface file auto-generated by buildroot"; \
|
|
echo ; \
|
|
echo "auto lo"; \
|
|
echo "iface lo inet loopback"; \
|
|
) > $(TARGET_DIR)/etc/network/interfaces
|
|
endef
|
|
|
|
NETWORK_DHCP_IFACE = $(call qstrip,$(BR2_SYSTEM_DHCP))
|
|
|
|
ifneq ($(NETWORK_DHCP_IFACE),)
|
|
define SET_NETWORK_DHCP
|
|
( \
|
|
echo ; \
|
|
echo "auto $(NETWORK_DHCP_IFACE)"; \
|
|
echo "iface $(NETWORK_DHCP_IFACE) inet dhcp"; \
|
|
echo " pre-up /etc/network/nfs_check"; \
|
|
echo " wait-delay 15"; \
|
|
) >> $(TARGET_DIR)/etc/network/interfaces
|
|
$(INSTALL) -m 0755 -D $(SKELETON_PKGDIR)/nfs_check \
|
|
$(TARGET_DIR)/etc/network/nfs_check
|
|
endef
|
|
endif
|
|
|
|
define SET_NETWORK
|
|
mkdir -p $(TARGET_DIR)/etc/network/
|
|
$(SET_NETWORK_LOCALHOST)
|
|
$(SET_NETWORK_DHCP)
|
|
endef
|
|
|
|
TARGET_FINALIZE_HOOKS += SET_NETWORK
|
|
|
|
# The TARGET_FINALIZE_HOOKS must be sourced only if the users choose to use the
|
|
# default skeleton.
|
|
ifeq ($(BR2_ROOTFS_SKELETON_DEFAULT),y)
|
|
|
|
ifeq ($(BR2_TARGET_ENABLE_ROOT_LOGIN),y)
|
|
ifeq ($(SKELETON_TARGET_GENERIC_ROOT_PASSWD),)
|
|
SYSTEM_ROOT_PASSWORD =
|
|
else ifneq ($(filter $$1$$% $$5$$% $$6$$%,$(SKELETON_TARGET_GENERIC_ROOT_PASSWD)),)
|
|
SYSTEM_ROOT_PASSWORD = '$(SKELETON_TARGET_GENERIC_ROOT_PASSWD)'
|
|
else
|
|
SKELETON_DEPENDENCIES += host-mkpasswd
|
|
# This variable will only be evaluated in the finalize stage, so we can
|
|
# be sure that host-mkpasswd will have already been built by that time.
|
|
SYSTEM_ROOT_PASSWORD = "`$(MKPASSWD) -m "$(SKELETON_TARGET_GENERIC_PASSWD_METHOD)" "$(SKELETON_TARGET_GENERIC_ROOT_PASSWD)"`"
|
|
endif
|
|
else # !BR2_TARGET_ENABLE_ROOT_LOGIN
|
|
SYSTEM_ROOT_PASSWORD = "*"
|
|
endif
|
|
|
|
define SKELETON_SYSTEM_SET_ROOT_PASSWD
|
|
$(SED) s,^root:[^:]*:,root:$(SYSTEM_ROOT_PASSWORD):, $(TARGET_DIR)/etc/shadow
|
|
endef
|
|
TARGET_FINALIZE_HOOKS += SKELETON_SYSTEM_SET_ROOT_PASSWD
|
|
|
|
ifeq ($(BR2_SYSTEM_BIN_SH_NONE),y)
|
|
define SKELETON_SYSTEM_BIN_SH
|
|
rm -f $(TARGET_DIR)/bin/sh
|
|
endef
|
|
else
|
|
define SKELETON_SYSTEM_BIN_SH
|
|
ln -sf $(SKELETON_TARGET_GENERIC_BIN_SH) $(TARGET_DIR)/bin/sh
|
|
endef
|
|
endif
|
|
TARGET_FINALIZE_HOOKS += SKELETON_SYSTEM_BIN_SH
|
|
|
|
ifeq ($(BR2_TARGET_GENERIC_GETTY),y)
|
|
ifeq ($(BR2_INIT_SYSV),y)
|
|
# In sysvinit inittab, the "id" must not be longer than 4 bytes, so we
|
|
# skip the "tty" part and keep only the remaining.
|
|
define SKELETON_SYSTEM_GETTY
|
|
$(SED) '/# GENERIC_SERIAL$$/s~^.*#~$(shell echo $(SKELETON_TARGET_GENERIC_GETTY_PORT) | tail -c+4)::respawn:/sbin/getty -L $(SKELETON_TARGET_GENERIC_GETTY_OPTIONS) $(SKELETON_TARGET_GENERIC_GETTY_PORT) $(SKELETON_TARGET_GENERIC_GETTY_BAUDRATE) $(SKELETON_TARGET_GENERIC_GETTY_TERM) #~' \
|
|
$(TARGET_DIR)/etc/inittab
|
|
endef
|
|
else ifeq ($(BR2_INIT_BUSYBOX),y)
|
|
# Add getty to busybox inittab
|
|
define SKELETON_SYSTEM_GETTY
|
|
$(SED) '/# GENERIC_SERIAL$$/s~^.*#~$(SKELETON_TARGET_GENERIC_GETTY_PORT)::respawn:/sbin/getty -L $(SKELETON_TARGET_GENERIC_GETTY_OPTIONS) $(SKELETON_TARGET_GENERIC_GETTY_PORT) $(SKELETON_TARGET_GENERIC_GETTY_BAUDRATE) $(SKELETON_TARGET_GENERIC_GETTY_TERM) #~' \
|
|
$(TARGET_DIR)/etc/inittab
|
|
endef
|
|
endif
|
|
TARGET_FINALIZE_HOOKS += SKELETON_SYSTEM_GETTY
|
|
endif
|
|
|
|
ifeq ($(BR2_INIT_BUSYBOX)$(BR2_INIT_SYSV),y)
|
|
ifeq ($(BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW),y)
|
|
# Find commented line, if any, and remove leading '#'s
|
|
define SKELETON_SYSTEM_REMOUNT_RW
|
|
$(SED) '/^#.*-o remount,rw \/$$/s~^#\+~~' $(TARGET_DIR)/etc/inittab
|
|
endef
|
|
else
|
|
# Find uncommented line, if any, and add a leading '#'
|
|
define SKELETON_SYSTEM_REMOUNT_RW
|
|
$(SED) '/^[^#].*-o remount,rw \/$$/s~^~#~' $(TARGET_DIR)/etc/inittab
|
|
endef
|
|
endif
|
|
TARGET_FINALIZE_HOOKS += SKELETON_SYSTEM_REMOUNT_RW
|
|
endif # BR2_INIT_BUSYBOX || BR2_INIT_SYSV
|
|
|
|
endif # BR2_ROOTFS_SKELETON_DEFAULT
|
|
|
|
$(eval $(generic-package))
|