DHCP 및 읽기 전용 루트 파일 시스템

DHCP 및 읽기 전용 루트 파일 시스템

읽기 전용으로 설치된 ifup wlan0시스템(내장형 시스템)에서 작업을 수행할 때 다음 오류가 발생합니다./

Failed to connect to non-global ctrl_ifname: wlan0  error: Read-only file system
Internet Systems Consortium DHCP Client 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

can't create /var/lib/dhcp/dhclient.wlan0.leases: Read-only file system
Listening on LPF/wlan0/80:1f:02:d3:42:b8
Sending on   LPF/wlan0/80:1f:02:d3:42:b8
Sending on   Socket/fallback
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 7
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 13
...
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 5
No DHCPOFFERS received.
No working leases in persistent database - sleeping.

반면, 읽기-쓰기 ifup wlan0로 마운트된 경우에는 /문제 없이 IP 할당이 성공적으로 이루어졌습니다.

읽기 전용 루트 파일 시스템에서 DHCP가 작동하도록 하려면 어떻게 해야 합니까?


# /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid "<myssid>"
wpa-psk "<mypasswd>"

답변1

RAM에 tmpfs 파티션을 생성하고 그 안에 있는 디렉토리에 /var/lib/dh​​cp를 심볼릭 링크합니다.

편집: 루트 파일 시스템을 읽기 전용으로 변경하기 전에 편집할 수 있다고 가정합니다. 그래서:

  1. tmpfs 마운트 지점 설정mkdir /mnt/ramdisk && mkdir /mnt/ramdisk/var-lib-dhcp
  2. fstab에 tmpfs를 추가하세요tmpfs /mnt/ramdisk/var-lib-dhcp tmpfs size=10M 0 0
  3. /var/lib/dhcp에서 까지의 심볼릭 링크 추가/mnt/ramdisk/var-lib-dhcp
  4. 파일 시스템을 읽고 쓰는 동안 테스트
  5. 파일 시스템을 읽기 전용으로 설정하고 다시 테스트하세요.

답변2

~처럼다니엘 그리스콤 답변그러나 단순하게 유지하십시오.

당신은 추가할 수 있습니다

tmpfs /var/lib/dhcp/ tmpfs nodev,nosuid,size=1M,mode=1777 0 0

존재하다/etc/fstab

이렇게 하면 RAM에 임시 파일 시스템이 생성되고 해당 디렉터리를 tempfs의 마운트 지점으로 덮어씁니다. (그래서 이전에 파일이 있었다면 사용할 수 없습니다)

이를 사용하면 심볼릭 링크 등을 관리할 필요가 없으며 일부 임베디드 보드 dhcp 정보에 1M 크기이면 충분합니다. 이는 DHCP 서버로 액세스 포인트를 생성하려는 경우에도 필요합니다(임대 정보는 서버의 동일한 디렉터리에 저장됩니다).

먼저 쓰기 액세스 권한으로 다시 설치 mount -o remount,rw /(루트로)한 다음 쓰기 전용으로 다시 설치(루트로 mount -o remount,ro /)하거나 변경 후 재부팅하십시오.

내 tmpfs 구성 문자열의 원래 소스는 다음과 같습니다.이 짧은 가이드최종 애플리케이션을 위한 microSD 준비

답변3

/run, /var/run 또는 /tmp와 같은 tmpfs 마운트 지점이 이미 있다고 가정하고 매우 간단한 방법을 수행하십시오.

sudo rm -rf /var/lib/dhcp/

그리고

sudo ln -s /run /var/lib/dhcp

첫 번째는 /var/lib/dhcp데이터베이스 디렉토리를 삭제하고 두 번째는 에 생성합니다 . 또는 또는 /run에 연결할 수 있습니다 ./tmp/var/run

위의 변경 사항을 수행하려면 파일 시스템 읽기/쓰기를 다시 마운트해야 합니다.

답변4

방금 이 문제가 발생했습니다. /var/lib/dh​​cp에 대한 읽기-쓰기 위치를 만드는 것만으로는 충분하지 않습니다.

다음 두 가지 작업을 수행해야 합니다.

/etc/fstab에 주석 항목을 추가하여 /가 읽기 전용 파일 시스템에 있음을 알리도록 /sbin/dhclient-script를 속입니다.

# The following line is here only to tell dhclient that we are readonly
#/root   /   auto  defaults 0 0

("/"는 줄의 두 번째 토큰이어야 합니다.)

또한 요청 목록에서 "네임서버"를 (적어도) 제거하기 위해 /etc/dhcp/dhclient.conf 구성 파일을 편집해야 했습니다(그러나 더 많은 것을 제거하고 관심 있는 항목만 남겨두었기 때문에 잘 모르겠습니다. 그냥 제거하는 것만으로도 충분합니까?)

DHCP 서버에서 네임서버 정보를 수신하는 데 관심이 있는 경우 /etc/resolv.conf를 읽기/쓰기 버전(/run, /var/run 또는 기타 tmpfs 위치)에 연결해 볼 수 있습니다. tmpfs 위치에 이 파일을 스크립트와 네트워크를 설정하는 스크립트 사이에 생성하거나 R/W 파일 시스템의 파일에 대한 링크로 생성합니다.

관련 정보