Trans:GentooX86Handbook4-2

Gentoo Korea Wiki
둘러보기로 가기 검색하러 가기

고급 설정

고급 설정

config_eth0 변수는 인터페이스 설정의 핵심입니다. 인터페이스를(이 경우에는 eth0) 설정하기 위한 고급 명령들의 모음입니다. 명령 목록의 각각의 명령은 순차적으로 실행합니다. 최소한 하나 이상의 명령이 동작하면 인터페이스는 정상으로 간주됩니다.

내부 명령의 목록은 다음과 같습니다.

명령 설명
null 아무것도 안함
noop 인터페이스가 올라가고 주소가 할당 되면 설정을 성공적으로 중지함
IPv4 또는 IPv6 주소 인터페이스에 주소를 추가
dhcp, adsl, apipa(또는 서드파티에서 제공하는
사용자 정의 명령)
제공하는 명령으로 모듈을 실행합니다. 예를 들어 dhcpdhcpcd 또는 dhclient, pump중 DHCP 서비스를 제공하는 하나의 모듈을 실행합니다

명령 실행에 실패하면 대체 명령을 지정할 수 있습니다. 대체 명령은 명령 구조와 완전히 일치합니다.

이들 명령을 함께 줄줄이 엮을 수 있습니다. 실제 사용 예를 보여드리겠습니다.


코드 예제 1.1: 설정 예제
# Adding three IPv4 addresses
config_eth0="192.168.0.2/24
192.168.0.3/24
192.168.0.4/24"

# Adding an IPv4 address and two IPv6 addresses
config_eth0="192.168.0.2/24
4321:0:1:2:3:4:567:89ab
4321:0:1:2:3:4:567:89ac"

# Keep our kernel assigned address, unless the interface goes
# down so assign another via DHCP. If DHCP fails then add a
# static address determined by APIPA

config_eth0="noop
dhcp"
fallback_eth0="null
apipa"



참고: ifconfig 모듈을 사용하고 하나 이상의 주소를 추가할 경우, 각각의 추가 주소에 대해 인터페이스 별칭을 만듭니다. 따라서 위의 두가지 예제를 통해 eth0eth0:1, eth0:2 인터페이스를 보게됩니다. 커널에서와 같이 이들 인터페이스에 어떤 특별한 동작을 취할 수 없으며 다른 프로그램들은 eth0:1eth0:2eth0와 같이 다룹니다.



중요: 대체 순서는 중요합니다! null 옵션을 지정하지 않았다면 noop 명령이 실패했을 경우에만 apipa 명령을 실행합니다.



참고: APIPADHCP는 다음에 설명합니다.


네트워크 의존성

/etc/init.d의 초기화 스크립트는 net이나 개별적인 네트워크 인터페이스에 의존할 수 있습니다. 젠투의 초기화 시스템에서 모든 네트워크 인터페이스는 net 이라고 하는 요소를 제공합니다.

/etc/rc.conf에서 rc_depend_strict="YES"를 설정했다면 "net"에 의존성이 걸린 곳을 만나기 전에는 "net"을 제공하는 모든 네트워크 인터페이스를 활성화 해야 합니다. 다시 발해, net.eth0과 net.eth1그리고 "net"에 의존하는 초기화 스크립트가 있다면, 이들 모두를 반드시 활성화 해야 한다는 뜻입니다.

반면에 rc_depend_strict="NO"를 설정햇다면, "net" 의존성은 최소한 하나 이상의 네트워크 인터페이스가 올라왔을 경우 해결된 것으로 처리됩니다.

그런데 net.eth0과 net.eth1에 의존하는 net.br0의 경우는 어떨까요? net.eth1이 브릿지에 추가할 수 있기 전에 설정이 필요한 무선 장치이거나 PPP 장치일 수도 있습니다. 이럴 경우 /etc/init.d/ent.br0을 net.lo로 심볼릭 링크를 걸어두는 걸로는 끝낼 수 없습니다.

이에 대한 답은 /etc/conf.d/net에 rc_need_를 정의하는 것입니다


코드 예제 2.1: /etc/conf.d/net의 net.br0 의존성
rc_need_br0="net.eth0 net.eth1"


단, 이 한 줄로는 충분하지 않습니다. 젠투 네트워크 초기화 스크립트는 네트워크를 사용할 수 있을때 시스템에 알려주는 net 이라고 하는 가상 의존성을 사용합니다. 정리하자면, 위와 같은 경우 다른 것들이 아닌 br0이 올라갔을 경우에야 네트워크를 사용할 수 있는 상태로 확인됩니다. 따라서 다음과 같이 /etc/conf.d/net에 알려주어야 합니다


코드 예제 2.2: 가상 의존성과 네트워크 제공 내용 업데이트
rc_net_lo_provide="!net"
rc_net_eth0_provide="!net"
rc_net_eth1_provide="!net"


의존성과 관련한 더 자세한 논의 내용은 젠투 핸드북의 초기화 스크립트 작성하기 절을 참고하십시오. /etc/rc.conf에 대한 더 많은 정보는 파일 안의 주석으로 있습니다.

변수 이름과 값

변수 이름은 수시로 바뀝니다. 보통 variable_${interface|mac|essid|apmac}의 구조를 따릅니다. 예를 들어 dhcpcd_eth0 변수는 eth0에 대한 dhcpcd 옵션 값을 가지고 있고 dhcpcd_essid 변수는 어떤 인터페이스가 ESSID "essid"로 연결할 때 dhcpcd옵션으로 사용할 "essid" 값을 가지고 있습니다.

그러나, 어려운 점은 아닙니다. 알아둘 간단한 규칙으로는 인터페이스 이름은 반드시 ethx 형식이 되어야 한다는 것입니다. 사실 대부분의 무선 인터페이스가 ethx 처럼 wlanx, rax 와 같은 식으로 되어 있습니다. 또한 브릿지와 같은 사용자가 직접 정의하는 인터페이스에 대해서도 foo 와 같은 임의의 이름을 줄 수 있습니다. 좀 더 흥미롭게 접근해보자면, 무선 액세스 포인트에는 영문자-숫자가 아닌 문자를 가진 이름을 지정할 수도 있습니다. 이는 ESSID에 네트워크 매개변수를 설정할 수도 있기 때문에 중요한 사실입니다.

이 모든 내용에 있어 단점이 있다면, 젠투가 네트워크 동작을 위해 배시 변수를 사용한다는 것이고 배시에서는 영문자 숫자 이외에는 사용할 수 없다는 것입니다. 이러한 제한 범위 내에서 영문자-숫자가 아닌 모든 문자를 _ 문자로 바꿀 수 있습니다.

배시의 다른 단점은 변수의 내용입니다. 어떤 문자는 이스케이프 처리를 해야 합니다. 이는 이스케이프 처리가 필요한 문자 앞에 \ 문자를 붙여주기만 하면 됩니다. 다음 문자들은 이런 방법으로 이스케이프 처리를 합니다. ", ', \.

이 예제에서 광범위 영역의 문자가 들어갈 수 있는 무선 ESSID를 사용하겠습니다. ESSID를 My "\ NET으로 사용합니다:


코드 예제 3.1: 변수 이름 예제
(This does work, but the domain is invalid)
dns_domain_My____NET="My \"\\ NET"

(The above sets the dns domain to My "\ NET when a wireless card
connects to an AP whose ESSID is My "\ NET)