Ubuntu 12.04 시스템에서는 .NET에서 생성 된 것과 같은 udev 규칙을 사용하여 (물리적) 네트워크 인터페이스 (예 : eth0, eth1, ...)의 이름을 구성하려고합니다 /etc/udev/rules.d/70-persistent-net.rules
. 부팅 매체가 읽기 전용이지만, 향후 부팅을 위해 이러한 규칙을 지속적으로 (재) 구성 할 수 있기를 원합니다 (예 : 네트워크 카드 교체 후). 지속성을 위해 규칙을 (쓰기 가능한) 로컬 하드 디스크 (읽기 전용 부팅 매체와 다름)에 저장하려고합니다.
문제는 저장된 규칙에 대해 충분히 일찍 udev에 알리는 방법 인 것 같습니다. 분명히 저장된 규칙이있는 로컬 하드 디스크가 마운트되기 전에는 이런 일이 발생할 수 없습니다. 디스크 마운트는 로컬 하드 디스크 장치를 인식하는 udev에 따라 다릅니다. 동시에 udev는 네트워크 인터페이스를 인식하고 구성을 트리거합니다 (잠재적으로 로컬 하드 디스크의 규칙이 적용되기 전에).
필요한 초기화는 부팅 중에 어떻게 올바르게 조정됩니까?
세 가지 새로운 신생 작업을 사용하는 현재 솔루션이 작동하는 것으로 보입니다 (댓글 부탁드립니다).
우리는 새로운 신출내기 작업을 사용하여 /etc/init/hold-interfaces.conf
(신출내기 작업에서 네트워크 인터페이스의 구성을 지연 /etc/init/network-interface.conf
저장된 네트워크 규칙 (에 설치 될 때까지) /etc/udev/rules.d/71-persistent-net.rules
곳 /etc/
중 중첩이었다 initrd/init
A를 tmpfs
writeability에 대한).
# /etc/init/hold-interfaces.conf
start on starting network-interface and started mark-configured
instance holding${INTERFACE:+/}${INTERFACE:-}
task
exec :
start on
조건이 필요합니다 starting network-interface
. 이것은 기존 작업 파일 (이 경우 /etc/init/network-interface.conf
) 을 수정하지 않고 upstart 작업이 시작되는 것을 금지하는 일반적인 방법입니다. Upstart Cookbook .
network-interface
작업 의 개별 인스턴스 (각 인터페이스에 하나씩)가 있으므로 해당 인스턴스도 있어야합니다 hold-interfaces
. 따라서 instance
선언 (에서 찾은 것과 유사 /etc/init/network-interface-security.conf
)입니다.
start on
조건도 필요합니다 started mark-configured
. 이는 네트워크 규칙이 업데이트되었으며 인터페이스 초기화가 계속 될 수 있음을 나타냅니다. upstart 이벤트가 생성 될 때까지 직접 기다릴 수는 없습니다. 이러한 이벤트는의 단일 인스턴스 만 hold-interfaces
계속 하도록 허용합니다 . 권장되는 해결 방법은 전용 업 스타트 작업 /etc/init/mark-configured.conf
( 이 경우 (Cf. LP : # 447654 ))을 사용하여 일종의 지속적인 이벤트를 시뮬레이션하는 것입니다 .
새로운 upstart 작업 /etc/init/mark-configured.conf
은 모든 네트워크 구성 파일이 업데이트되었음을 지속적으로 표시합니다.
start on network-rules-ready
task
exec :
network-rules-ready
이 작업을 시작하려면 단일 이벤트 로 충분합니다. 그 후 작업 mark-configured
은 결과적으로 started
의 대기 인스턴스도 해제하는 것으로 알려져 있습니다 .hold-interfaces
network-interface
세 번째 새로운 upstart 작업 /etc/init/configure_interfaces.conf
은 네트워크 규칙을 설치하고 지연된 network-interface
작업을 중지하고 (이전 네트워크 규칙의 구성 데이터로 시작될 수 있기 때문에) 해제 이벤트를 내보내고 네트워크 장치를 추가하는 모든 udev 이벤트를 다시 트리거합니다.
# /etc/init/configure_interfaces.conf
start on local-filesystems
task
script
find_and_mount_local_hard_disk # abbreviated
install_stored_rules_and_other_network_configurations # abbreviated
udevadm control --reload-rules
# Stop all active network-interface upstart jobs (with data from old rules)
stop_active_network_interface_jobs # abbreviated, using: initctl stop network-interface <interface>
# Allow next network-interface jobs
# (with data from stored rules) to complete.
initctl emit --no-wait network-rules-ready
# Trigger udev recognition.
udevadm trigger --action='add' --subsystem-match='net'
end script
세 개의 네트워크 인터페이스가있는 테스트 시스템에서 이것은 작동하는 것처럼 보입니다. 반면에 때때로 / 적어도 다른 시스템에서 실패하지 않을 수 있는지 불확실합니다.
를 find_and_mount_local_hard_disk
실행할 때 모든 로컬 하드 디스크 장치를 사용할 수 있다는 보장이 있습니까?
일부 네트워크 장치가 인식되지 않을 수있는 경쟁 조건이 있습니까? (예 : 새 udev 규칙을 읽기 전에 커널이 새 장치를 udev에 전달 network-interface
하여 이전 규칙을 사용하여 upstart 작업 을 시작할 수 있습니다. upstart가이 작업을 중지하기 위해 인식 할 때까지 시간이 걸릴 수 있습니다. 가능합니까? 한편 udev 새 규칙을로드 할 수 있고 network-interface
작업을 중지 하면 새로운 작업이 누락되고 network-rules-ready
나중에 장치가 여전히 이전 속성을 사용하여 시작될 수 있도록 신호 가 방출됩니다.)
신생 작업을 어떻게 /etc/init/network-interface-security.conf
적절하게 지연 / 제어 할 수 있습니까? 다른 작업이나 이벤트가 지연 / 재 트리거되어야합니까?
/etc/init/network-interface-security.conf
영향을받는 네트워크 구성이 네트워크 규칙과 함께 충분히 일찍 설치된 경우 작업 을 적절하게 지연해야합니다.auto
에서 /etc/network/interfaces
와 같이 구성된 경우 신호가 지연 static-network-up
됩니다 ( /etc/network/if-up.d/upstart
모든 auto
인터페이스가 가동 된 후에서 방출 됨 ). 따라서 대부분의 네트워크 종속 작업은 SysV init 스크립트 시작 (에서 트리거 됨 /etc/init/rc-sysinit.conf
)을 포함하여 적절하게 지연되어야합니다 .다른 문제?
(로컬 하드 디스크가 마운트되고 새 네트워크 규칙이 적용될 때까지 커널, udev, upstart 또는 기타 기능을 통해 모든 네트워크 장치 (및 종속 시작 작업)의 구성을 지연하는 더 쉬운 방법이 있습니까?)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다