0123-ifupdown-scripts.patch 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. diff --git a/package/Config.in b/package/Config.in
  2. index 9ed296f..3a1cd2a 100644
  3. --- a/package/Config.in
  4. +++ b/package/Config.in
  5. @@ -1487,6 +1487,7 @@ menu "Networking applications"
  6. source "package/ifplugd/Config.in"
  7. source "package/iftop/Config.in"
  8. source "package/ifupdown/Config.in"
  9. + source "package/ifupdown-scripts/Config.in"
  10. source "package/igd2-for-linux/Config.in"
  11. source "package/igh-ethercat/Config.in"
  12. source "package/igmpproxy/Config.in"
  13. diff --git a/package/ifupdown-scripts/Config.in b/package/ifupdown-scripts/Config.in
  14. new file mode 100644
  15. index 0000000..166094c
  16. --- /dev/null
  17. +++ b/package/ifupdown-scripts/Config.in
  18. @@ -0,0 +1,7 @@
  19. +config BR2_PACKAGE_IFUPDOWN_SCRIPTS
  20. + bool "ifupdown scripts"
  21. + default y if BR2_ROOTFS_SKELETON_DEFAULT
  22. + depends on !BR2_PACKAGE_SYSTEMD_NETWORKD && !BR2_PACKAGE_NETIFRC
  23. + help
  24. + Set of scripts used by ifupdown (either the standalone one,
  25. + or the busybox one) to bring network up, or tear it down.
  26. diff --git a/package/ifupdown-scripts/S40network b/package/ifupdown-scripts/S40network
  27. new file mode 100644
  28. index 0000000..642c501
  29. --- /dev/null
  30. +++ b/package/ifupdown-scripts/S40network
  31. @@ -0,0 +1,30 @@
  32. +#!/bin/sh
  33. +#
  34. +# Start the network....
  35. +#
  36. +
  37. +# Debian ifupdown needs the /run/network lock directory
  38. +mkdir -p /run/network
  39. +
  40. +case "$1" in
  41. + start)
  42. + printf "Starting network: "
  43. + /sbin/ifup -a
  44. + [ $? = 0 ] && echo "OK" || echo "FAIL"
  45. + ;;
  46. + stop)
  47. + printf "Stopping network: "
  48. + /sbin/ifdown -a
  49. + [ $? = 0 ] && echo "OK" || echo "FAIL"
  50. + ;;
  51. + restart|reload)
  52. + "$0" stop
  53. + "$0" start
  54. + ;;
  55. + *)
  56. + echo "Usage: $0 {start|stop|restart}"
  57. + exit 1
  58. +esac
  59. +
  60. +exit $?
  61. +
  62. diff --git a/package/ifupdown-scripts/ifupdown-scripts.mk b/package/ifupdown-scripts/ifupdown-scripts.mk
  63. new file mode 100644
  64. index 0000000..5ef0321
  65. --- /dev/null
  66. +++ b/package/ifupdown-scripts/ifupdown-scripts.mk
  67. @@ -0,0 +1,72 @@
  68. +################################################################################
  69. +#
  70. +# ifupdown-scripts
  71. +#
  72. +################################################################################
  73. +
  74. +define IFUPDOWN_SCRIPTS_PREAMBLE
  75. + echo "# interface file auto-generated by buildroot" \
  76. + > $(TARGET_DIR)/etc/network/interfaces
  77. +endef
  78. +
  79. +define IFUPDOWN_SCRIPTS_LOCALHOST
  80. + ( \
  81. + echo ; \
  82. + echo "auto lo"; \
  83. + echo "iface lo inet loopback"; \
  84. + ) >> $(TARGET_DIR)/etc/network/interfaces
  85. +endef
  86. +
  87. +IFUPDOWN_SCRIPTS_DHCP_IFACE = $(call qstrip,$(BR2_SYSTEM_DHCP))
  88. +
  89. +ifneq ($(IFUPDOWN_SCRIPTS_DHCP_IFACE),)
  90. +define IFUPDOWN_SCRIPTS_DHCP
  91. + ( \
  92. + echo ; \
  93. + echo "auto $(IFUPDOWN_SCRIPTS_DHCP_IFACE)"; \
  94. + echo "iface $(IFUPDOWN_SCRIPTS_DHCP_IFACE) inet dhcp"; \
  95. + echo " pre-up /etc/network/nfs_check"; \
  96. + echo " wait-delay 15"; \
  97. + echo " hostname \$$(hostname)"; \
  98. + ) >> $(TARGET_DIR)/etc/network/interfaces
  99. +endef
  100. +define IFUPDOWN_SCRIPTS_DHCP_OPENRC
  101. + echo "ifup $(IFUPDOWN_SCRIPTS_DHCP_IFACE)" \
  102. + > $(TARGET_DIR)/etc/ifup.$(IFUPDOWN_SCRIPTS_DHCP_IFACE)
  103. + echo "ifdown $(IFUPDOWN_SCRIPTS_DHCP_IFACE)" \
  104. + > $(TARGET_DIR)/etc/ifdown.$(IFUPDOWN_SCRIPTS_DHCP_IFACE)
  105. +endef
  106. +endif
  107. +
  108. +define IFUPDOWN_SCRIPTS_INSTALL_TARGET_CMDS
  109. + $(INSTALL) -m 0755 -D $(IFUPDOWN_SCRIPTS_PKGDIR)/nfs_check \
  110. + $(TARGET_DIR)/etc/network/nfs_check
  111. + $(call SYSTEM_RSYNC,$(IFUPDOWN_SCRIPTS_PKGDIR)/network,$(TARGET_DIR)/etc/network)
  112. +endef
  113. +
  114. +define IFUPDOWN_SCRIPTS_INSTALL_INIT_OPENRC
  115. + $(IFUPDOWN_SCRIPTS_PREAMBLE)
  116. + $(IFUPDOWN_SCRIPTS_DHCP)
  117. + $(IFUPDOWN_SCRIPTS_DHCP_OPENRC)
  118. +endef
  119. +
  120. +define IFUPDOWN_SCRIPTS_INSTALL_INIT_SYSV
  121. + $(INSTALL) -D -m 0755 $(IFUPDOWN_SCRIPTS_PKGDIR)/S40network \
  122. + $(TARGET_DIR)/etc/init.d/S40network
  123. + $(IFUPDOWN_SCRIPTS_PREAMBLE)
  124. + $(IFUPDOWN_SCRIPTS_LOCALHOST)
  125. + $(IFUPDOWN_SCRIPTS_DHCP)
  126. +endef
  127. +
  128. +# ifupdown-scripts can not be selected when systemd-networkd is
  129. +# enabled, so if we are enabled with systemd, we must install our
  130. +# own service file.
  131. +define IFUPDOWN_SCRIPTS_INSTALL_INIT_SYSTEMD
  132. + $(INSTALL) -D -m 644 $(IFUPDOWN_SCRIPTS_PKGDIR)/network.service \
  133. + $(TARGET_DIR)/etc/systemd/system/network.service
  134. + $(IFUPDOWN_SCRIPTS_PREAMBLE)
  135. + $(IFUPDOWN_SCRIPTS_LOCALHOST)
  136. + $(IFUPDOWN_SCRIPTS_DHCP)
  137. +endef
  138. +
  139. +$(eval $(generic-package))
  140. diff --git a/package/ifupdown-scripts/network.service b/package/ifupdown-scripts/network.service
  141. new file mode 100644
  142. index 0000000..0d77bb8
  143. --- /dev/null
  144. +++ b/package/ifupdown-scripts/network.service
  145. @@ -0,0 +1,21 @@
  146. +[Unit]
  147. +Description=Network Connectivity
  148. +Wants=network.target
  149. +Before=network.target
  150. +
  151. +[Service]
  152. +Type=oneshot
  153. +RemainAfterExit=yes
  154. +
  155. +# lo is brought up earlier, which will cause the upcoming "ifup -a" to fail
  156. +# with exit code 1, due to an "ip: RTNETLINK answers: File exists" error during
  157. +# its "ip addr add ..." command, subsequently causing this unit to fail even
  158. +# though it is a benign error. Flushing the lo address with the command below
  159. +# before ifup prevents this failure.
  160. +ExecStart=/sbin/ip addr flush dev lo
  161. +
  162. +ExecStart=/sbin/ifup -a
  163. +ExecStop=/sbin/ifdown -a
  164. +
  165. +[Install]
  166. +WantedBy=multi-user.target
  167. diff --git a/package/ifupdown-scripts/network/if-down.d/.empty b/package/ifupdown-scripts/network/if-down.d/.empty
  168. new file mode 100644
  169. index 0000000..e69de29
  170. diff --git a/package/ifupdown-scripts/network/if-post-down.d/.empty b/package/ifupdown-scripts/network/if-post-down.d/.empty
  171. new file mode 100644
  172. index 0000000..e69de29
  173. diff --git a/package/ifupdown-scripts/network/if-pre-up.d/wait_iface b/package/ifupdown-scripts/network/if-pre-up.d/wait_iface
  174. new file mode 100755
  175. index 0000000..ebccff2
  176. --- /dev/null
  177. +++ b/package/ifupdown-scripts/network/if-pre-up.d/wait_iface
  178. @@ -0,0 +1,21 @@
  179. +#!/bin/sh
  180. +
  181. +# In case we have a slow-to-appear interface (e.g. eth-over-USB),
  182. +# and we need to configure it, wait until it appears, but not too
  183. +# long either. IF_WAIT_DELAY is in seconds.
  184. +
  185. +if [ "${IF_WAIT_DELAY}" -a ! -e "/sys/class/net/${IFACE}" ]; then
  186. + printf "Waiting for interface %s to appear" "${IFACE}"
  187. + while [ ${IF_WAIT_DELAY} -gt 0 ]; do
  188. + if [ -e "/sys/class/net/${IFACE}" ]; then
  189. + printf "\n"
  190. + exit 0
  191. + fi
  192. + sleep 1
  193. + printf "."
  194. + : $((IF_WAIT_DELAY -= 1))
  195. + done
  196. + printf " timeout!\n"
  197. + exit 1
  198. +fi
  199. +
  200. diff --git a/package/ifupdown-scripts/network/if-up.d/.empty b/package/ifupdown-scripts/network/if-up.d/.empty
  201. new file mode 100644
  202. index 0000000..e69de29
  203. diff --git a/package/ifupdown-scripts/nfs_check b/package/ifupdown-scripts/nfs_check
  204. new file mode 100755
  205. index 0000000..dfa0cbf
  206. --- /dev/null
  207. +++ b/package/ifupdown-scripts/nfs_check
  208. @@ -0,0 +1,20 @@
  209. +#!/bin/sh
  210. +
  211. +# This allows NFS booting to work while also being able to configure
  212. +# the network interface via DHCP when not NFS booting. Otherwise, a
  213. +# NFS booted system will likely hang during DHCP configuration.
  214. +
  215. +# Attempting to configure the network interface used for NFS will
  216. +# initially bring that network down. Since the root filesystem is
  217. +# accessed over this network, the system hangs.
  218. +
  219. +# This script is run by ifup and will attempt to detect if a NFS root
  220. +# mount uses the interface to be configured (IFACE), and if so does
  221. +# not configure it. This should allow the same build to be disk/flash
  222. +# booted or NFS booted.
  223. +
  224. +nfsip=`sed -n '/^[^ ]*:.* \/ nfs.*[ ,]addr=\([0-9.]\+\).*/s//\1/p' /proc/mounts`
  225. +if [ -n "$nfsip" ] && ip route get to "$nfsip" | grep -q "dev $IFACE"; then
  226. + echo Skipping $IFACE, used for NFS from $nfsip
  227. + exit 1
  228. +fi