리눅스 네트워크 자동화: 이더넷 디바이스 설정 스크립트
- 최초 작성일: 2023년 8월 23일(수)
목차
스크립트 개요
기본 설정 및 변수
#!/bin/bash
ETH_IP="192.168.1.100"
ENX_STATUS=0
if [ -z $1 ]; then
IP=100
else
IP=$1
fi
XML 파싱 및 IP 설정
IP1=`cat /system_config.xml|grep -i "NET_CONFIG"|gawk -F"<" '{print $2}'|gawk -F">" '{print $2}'`
ETH_IP="192.168.1."$IP1
구현 세부사항
1. 네트워크 설정 초기화 함수
function ETH_INIT()
{
sudo echo " " >> /etc/network/interfaces
sudo echo -n "allow-hotplug " >> /etc/network/interfaces
sudo echo $ETH_NAME >> /etc/network/interfaces
sudo echo -n "auto " >> /etc/network/interfaces
sudo echo $ETH_NAME >> /etc/network/interfaces
sudo echo "iface" $ETH_NAME "inet static" >> /etc/network/interfaces
sudo echo "address $ETH_IP" >> /etc/network/interfaces
sudo echo "netmask 255.255.255.0" >> /etc/network/interfaces
sudo ifconfig $ETH_NAME $ETH_IP netmask 255.255.255.0
}
function ETH_CHANGE_IP()
{
sudo sed -i "s/192.168.1.100/192.168.1.$IP/g" /etc/network/interfaces
sudo ifconfig $ETH_NAME $ETH_IP netmask 255.255.255.0
}
function INTERFACES_INIT()
{
sudo rm -rf /etc/network/interfaces
sleep 1
sudo echo "source-directory /etc/network/interfaces.d" >> /etc/network/interfaces
sudo echo "auto lo" >> /etc/network/interfaces
sudo echo "iface lo inet loopback" >> /etc/network/interfaces
sudo echo "allow-hotplug eth0" >> /etc/network/interfaces
sudo echo "auto eth0" >> /etc/network/interfaces
sudo echo " iface eth0 inet static" >> /etc/network/interfaces
sudo echo " address 192.168.1.1" >> /etc/network/interfaces
sudo echo " netmask 255.255.255.0" >> /etc/network/interfaces
}
주요 함수 분석
1. 이더넷 인터페이스 검출
# 이더넷 디바이스 이름 검출
ETH_NAME=`ifconfig | grep -i "eth" | gawk -F" " '{print$1}'`
echo "ETH_NAME: $ETH_NAME"
# 현재 IP 주소 확인
ETH_ADR=`ifconfig $ETH_NAME|grep "inet "|gawk '{print $2}'`
echo "ETH ADR: $ETH_ADR"
# interfaces 파일에서 설정 확인
GET_NAME=`cat /etc/network/interfaces|grep $ETH_NAME|grep "inet static"|gawk -F" " '{print $2}'`
echo "GET_NAME: $GET_NAME"
# 설정된 IP 주소 확인
GET_ADR=`cat /etc/network/interfaces|grep "192.168.1"|gawk -F" " '{print $2}'`
echo "GET_ADR: $GET_ADR"
실행 흐름과 동작 원리
1. 인터페이스 상태 확인 및 활성화
# 이더넷 상태 확인
ETH_STATUS=`ip link show|grep "eth"|gawk -F" " '{print $9}'`
echo "ETH_STATUS: $ETH_STATUS"
# 필요시 인터페이스 활성화
if [ "$ETH_STATUS" != "UP" ]; then
sudo ip link set $ETH_NAME up
sleep 1
ETH_STATUS=`ip link show|grep "eth"|gawk -F" " '{print $9}'`
echo "ETH activation status: $ETH_STATUS"
fi
2. 네트워크 설정 검증 및 적용
if [ -z $ETH_NAME ]; then
echo "Error: No ethernet interface detected"
exit 1
else
echo "Configuring ethernet interface..."
if [ -z $GET_NAME ]; then
echo "Initializing network configuration..."
ETH_INIT
exit 0
else
echo "Checking IP configuration..."
if [ "$ETH_ADR" == "$ETH_IP" ]; then
echo "IP configuration is correct"
else
echo "Updating network configuration..."
INTERFACES_INIT
ETH_INIT
exit 0
fi
fi
fi
고급 기능과 확장성
1. 오류 처리 및 로깅
function log_message() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
logger -t network-config "$1"
}
function handle_error() {
log_message "Error: $1"
exit 1
}
# 사용 예시
if [ ! -f "/etc/network/interfaces" ]; then
handle_error "Network interfaces file not found"
fi
2. 네트워크 설정 백업
function backup_interfaces() {
local backup_file="/etc/network/interfaces.backup.$(date '+%Y%m%d%H%M%S')"
cp /etc/network/interfaces $backup_file
log_message "Network configuration backed up to $backup_file"
}
# 설정 변경 전 백업 실행
backup_interfaces
결론
이 스크립트는 임베디드 리눅스 시스템에서 이더넷 인터페이스를 자동으로 감지하고 설정하는 강력한 도구다. 주요 기능은 다음과 같다:
- 이더넷 인터페이스 자동 감지
- 네트워크 설정 파일 자동 구성
- IP 주소 자동 할당 및 변경
- 오류 처리 및 로깅
- 설정 백업 및 복구
이러한 자동화 스크립트는 임베디드 시스템의 초기 설정과 유지보수를 단순화하고, 설정 오류를 최소화하는데 도움을 준다.