← Documents Documentation/arch/s390/config3270.sh GitHub 원문 ↗

Linux 6.18.37 · Architecture

s390 3270 장치와 inittab 자동 구성 스크립트

s390의 `tub3270` 드라이버 정보를 읽어 3270 문자 장치 노드와 `mingetty`용 inittab 갱신 명령을 담은 `/tmp/mkdev3270`을 생성하는 절차를 설명합니다.

Source pathDocumentation/arch/s390/config3270.sh
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

config3270.sh:1-76

s390의 `tub3270` 드라이버 정보를 읽어 3270 문자 장치 노드와 `mingetty`용 inittab 갱신 명령을 담은 `/tmp/mkdev3270`을 생성하는 절차를 설명합니다.

이 파일은 실제 변경 명령을 바로 실행하는 대신 `/tmp/mkdev3270`에 기록합니다. 생성된 파일을 별도로 실행한 뒤 `telinit q` 또는 재부팅해야 하며, 기존 `/etc/inittab`은 `/etc/OLDinittab`으로 옮기도록 구성됩니다.

구성 요약
tub3270 proc 조회장치 레코드 분류mkdev3270 생성장치·inittab 적용telinit q 또는 재부팅

드라이버 조회와 시스템 변경 적용이 두 실행 단계로 분리됩니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 #!/bin/sh
2 #
3 # config3270 -- Autoconfigure /dev/3270/* and /etc/inittab
4 #
5 # Usage:
6 # config3270
7 #
8 # Output:
9 # /tmp/mkdev3270
10 #
11 # Operation:
12 # 1. Run this script
13 # 2. Run the script it produces: /tmp/mkdev3270
14 # 3. Issue "telinit q" or reboot, as appropriate.
15 #
16 P=/proc/tty/driver/tty3270
17 ROOT=
18 D=$ROOT/dev
19 SUBD=3270
20 TTY=$SUBD/tty
21 TUB=$SUBD/tub
22 SCR=$ROOT/tmp/mkdev3270
23 SCRTMP=$SCR.a
24 GETTYLINE=:2345:respawn:/sbin/mingetty
25 INITTAB=$ROOT/etc/inittab
26 NINITTAB=$ROOT/etc/NEWinittab
27 OINITTAB=$ROOT/etc/OLDinittab
28 ADDNOTE=\\"# Additional mingettys for the 3270/tty* driver, tub3270 ---\\"
29
30 if ! ls $P > /dev/null 2>&1; then
31 modprobe tub3270 > /dev/null 2>&1
32 fi
33 ls $P > /dev/null 2>&1 || exit 1
34
35 # Initialize two files, one for /dev/3270 commands and one
36 # to replace the /etc/inittab file (old one saved in OLDinittab)
37 echo "#!/bin/sh" > $SCR || exit 1
38 echo " " >> $SCR
39 echo "# Script built by /sbin/config3270" >> $SCR
40 if [ ! -d /dev/dasd ]; then
41 echo rm -rf "$D/$SUBD/*" >> $SCR
42 fi
43 echo "grep -v $TTY $INITTAB > $NINITTAB" > $SCRTMP || exit 1
44 echo "echo $ADDNOTE >> $NINITTAB" >> $SCRTMP
45 if [ ! -d /dev/dasd ]; then
46 echo mkdir -p $D/$SUBD >> $SCR
47 fi
48
49 # Now query the tub3270 driver for 3270 device information
50 # and add appropriate mknod and mingetty lines to our files
51 echo what=config > $P
52 while read devno maj min;do
53 if [ $min = 0 ]; then
54 fsmaj=$maj
55 if [ ! -d /dev/dasd ]; then
56 echo mknod $D/$TUB c $fsmaj 0 >> $SCR
57 echo chmod 666 $D/$TUB >> $SCR
58 fi
59 elif [ $maj = CONSOLE ]; then
60 if [ ! -d /dev/dasd ]; then
61 echo mknod $D/$TUB$devno c $fsmaj $min >> $SCR
62 fi
63 else
64 if [ ! -d /dev/dasd ]; then
65 echo mknod $D/$TTY$devno c $maj $min >>$SCR
66 echo mknod $D/$TUB$devno c $fsmaj $min >> $SCR
67 fi
68 echo "echo t$min$GETTYLINE $TTY$devno >> $NINITTAB" >> $SCRTMP
69 fi
70 done < $P
71
72 echo mv $INITTAB $OINITTAB >> $SCRTMP || exit 1
73 echo mv $NINITTAB $INITTAB >> $SCRTMP
74 cat $SCRTMP >> $SCR
75 rm $SCRTMP
76 exit 0
77

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

tub3270 조회 결과로 /tmp/mkdev3270 생성

1-76

`config3270`은 s390의 3270 터미널 장치 노드와 `/etc/inittab` 항목을 구성하기 위한 셸 스크립트 생성기입니다. 이 스크립트를 한 번 실행하면 `/tmp/mkdev3270`이 만들어지고, 사용자는 그 결과 스크립트를 실행한 다음 상황에 따라 `telinit q`를 수행하거나 재부팅해야 합니다.

중요한 경계는 현재 스크립트와 생성된 스크립트의 역할이 다르다는 점입니다. 현재 스크립트는 필요하면 `tub3270` 모듈을 적재하고 `/proc/tty/driver/tty3270`을 조회하며 임시 파일을 작성합니다. 실제 `mknod`, `chmod`, `/etc/inittab` 교체 명령은 대부분 `/tmp/mkdev3270` 안에 기록되어 그 파일을 실행할 때 적용됩니다.

장치 정보는 `echo what=config > /proc/tty/driver/tty3270`으로 요청하고 각 행을 `devno maj min`으로 읽습니다. `min = 0`인 행은 파일 시스템 문자 장치의 주 번호를 `fsmaj`에 저장하고, `maj = CONSOLE`인 행은 콘솔용 `tub` 장치만 준비하며, 나머지 행은 `tty`와 `tub` 장치 및 대응하는 `mingetty` 항목을 생성합니다.

두 단계 구성 흐름
config3270 실행tub3270 확인·적재what=config 조회devno/maj/min 분기/tmp/mkdev3270 생성
/tmp/mkdev3270 실행/dev/3270 노드 구성OLDinittab 백업NEWinittab 적용telinit q 또는 재부팅

첫 실행은 드라이버 정보를 바탕으로 명령 파일을 만들고, 두 번째 실행이 장치 노드와 inittab 변경을 적용합니다.

경로와 문자열 변수
변수용도
P`/proc/tty/driver/tty3270`tub3270 드라이버 존재 확인 및 장치 구성 정보 조회
ROOT빈 문자열장치와 설정 경로 앞에 붙는 루트 접두사
D / SUBD`/dev` / `3270`3270 장치 디렉터리 구성
TTY / TUB`3270/tty` / `3270/tub`장치 노드 이름 접두사
SCR`/tmp/mkdev3270`최종 생성 스크립트
SCRTMP`/tmp/mkdev3270.a`inittab 갱신 명령을 모으는 임시 조각
GETTYLINE`:2345:respawn:/sbin/mingetty`각 일반 3270 tty의 inittab 실행 규칙
INITTAB`/etc/inittab`현재 설정 파일
NINITTAB`/etc/NEWinittab`새로 조립할 설정 파일
OINITTAB`/etc/OLDinittab`기존 설정 파일의 백업 이름
ADDNOTE추가 mingetty 주석새 inittab에 3270 항목의 시작을 표시

원문 16-29줄에서 생성 대상과 중간 파일 이름을 조립합니다.

드라이버 확인과 출력 파일 초기화
단계원문 동작결과
드라이버 확인`ls $P` 실패 시 `modprobe tub3270`proc 인터페이스가 없으면 모듈 적재를 시도
재확인다시 `ls $P`, 실패하면 `exit 1`조회 인터페이스 없이는 생성을 중단
SCR 시작shebang, 빈 줄, 생성자 주석 기록실행 가능한 셸 스크립트 본문 시작
구형 장치 방식`/dev/dasd`가 없으면 기존 `/dev/3270/*` 삭제 명령과 `mkdir -p` 명령 기록수동 장치 노드 구성을 위한 깨끗한 디렉터리 준비
SCRTMP 시작기존 `3270/tty` 행을 제외해 `NEWinittab` 작성중복 getty 행을 제거한 새 inittab 기반 생성
주석 추가`ADDNOTE`를 `NEWinittab`에 덧붙이는 명령 기록추가되는 mingetty 블록을 식별

원문 31-48줄은 조회 인터페이스를 확인하고 두 생성 파일의 머리 부분을 준비합니다.

devno·maj·min 레코드의 세 분기
조건상태·장치 노드inittab 처리
`min = 0``fsmaj=maj` 저장; `/dev/dasd`가 없으면 기본 `3270/tub` 문자 장치와 모드 666 생성 명령 기록추가 없음
`maj = CONSOLE``fsmaj`와 해당 minor로 `3270/tub$devno` 문자 장치 생성 명령 기록콘솔이므로 mingetty 행을 추가하지 않음
그 밖의 행`maj/min`으로 `3270/tty$devno`, `fsmaj/min`으로 `3270/tub$devno` 생성 명령 기록`t$min:2345:respawn:/sbin/mingetty 3270/tty$devno`를 새 inittab에 쓰는 명령 기록

원문 52-69줄에서 proc 응답 한 행이 생성 명령으로 변환되는 규칙입니다.

생성 스크립트의 마무리
순서기록·수행 내용효과
1`mv /etc/inittab /etc/OLDinittab` 명령을 SCRTMP에 추가현재 inittab을 백업하도록 예약
2`mv /etc/NEWinittab /etc/inittab` 명령을 추가새 설정을 정식 경로로 옮기도록 예약
3`cat $SCRTMP >> $SCR`inittab 조립·교체 명령을 `/tmp/mkdev3270` 끝에 병합
4`rm $SCRTMP`생성 과정의 임시 조각 삭제
5`exit 0`생성 작업의 성공 종료

원문 72-76줄은 설정 교체 명령을 최종 파일에 합칩니다.

원문 줄 좌표
원문 줄구성한국어 해설
1-15shebang과 사용 설명실행 순서, 생성 파일, 후속 `telinit q` 또는 재부팅 절차를 설명합니다.
16-29변수 정의proc 경로, 장치 경로, 생성 스크립트와 inittab 파일 이름을 설정합니다.
30빈 줄설정과 드라이버 확인 단계를 구분합니다.
31-34드라이버 확인proc 인터페이스를 검사하고 필요하면 `tub3270`을 적재한 뒤 실패 시 종료합니다.
35빈 줄드라이버 확인과 파일 초기화를 구분합니다.
36-48SCR·SCRTMP 초기화생성 스크립트 머리와 새 inittab 조립 명령을 준비합니다.
49빈 줄초기화와 장치 조회를 구분합니다.
50-69장치 정보 조회와 분기`what=config` 응답을 읽어 기본 tub, 콘솔, 일반 tty 레코드를 처리합니다.
70`done < $P`proc 파일을 while 루프의 표준 입력으로 연결하고 반복을 끝냅니다.
71빈 줄장치별 명령 생성과 최종 파일 조립을 구분합니다.
72-76inittab 교체 명령 병합백업과 교체 명령을 최종 스크립트에 붙이고 임시 파일을 제거합니다.

주석과 빈 줄을 포함한 76줄 전체를 기능 단위로 대응시킵니다.

아래 코드는 Linux v6.18.37 원문 1-76줄 전체입니다. 표시 안정성을 위해 탭만 여덟 칸으로 정규화했으며 경로, 변수명, 셸 조건, 리디렉션, 장치 번호, `mknod`·`mingetty` 명령, 주석과 줄 순서는 변경하지 않았습니다.

#!/bin/sh
#
# config3270 -- Autoconfigure /dev/3270/* and /etc/inittab
#
#       Usage:
#               config3270
#
#       Output:
#               /tmp/mkdev3270
#
#       Operation:
#               1. Run this script
#               2. Run the script it produces: /tmp/mkdev3270
#               3. Issue "telinit q" or reboot, as appropriate.
#
P=/proc/tty/driver/tty3270
ROOT=
D=$ROOT/dev
SUBD=3270
TTY=$SUBD/tty
TUB=$SUBD/tub
SCR=$ROOT/tmp/mkdev3270
SCRTMP=$SCR.a
GETTYLINE=:2345:respawn:/sbin/mingetty
INITTAB=$ROOT/etc/inittab
NINITTAB=$ROOT/etc/NEWinittab
OINITTAB=$ROOT/etc/OLDinittab
ADDNOTE=\\"# Additional mingettys for the 3270/tty* driver, tub3270 ---\\"

if ! ls $P > /dev/null 2>&1; then
        modprobe tub3270 > /dev/null 2>&1
fi
ls $P > /dev/null 2>&1 || exit 1

# Initialize two files, one for /dev/3270 commands and one
# to replace the /etc/inittab file (old one saved in OLDinittab)
echo "#!/bin/sh" > $SCR || exit 1
echo " " >> $SCR
echo "# Script built by /sbin/config3270" >> $SCR
if [ ! -d /dev/dasd ]; then
        echo rm -rf "$D/$SUBD/*" >> $SCR
fi
echo "grep -v $TTY $INITTAB > $NINITTAB" > $SCRTMP || exit 1
echo "echo $ADDNOTE >> $NINITTAB" >> $SCRTMP
if [ ! -d /dev/dasd ]; then
        echo mkdir -p $D/$SUBD >> $SCR
fi

# Now query the tub3270 driver for 3270 device information
# and add appropriate mknod and mingetty lines to our files
echo what=config > $P
while read devno maj min;do
        if [ $min = 0 ]; then
                fsmaj=$maj
                if [ ! -d /dev/dasd ]; then
                        echo mknod $D/$TUB c $fsmaj 0 >> $SCR
                        echo chmod 666 $D/$TUB >> $SCR
                fi
        elif [ $maj = CONSOLE ]; then
                if [ ! -d /dev/dasd ]; then
                        echo mknod $D/$TUB$devno c $fsmaj $min >> $SCR
                fi
        else
                if [ ! -d /dev/dasd ]; then
                        echo mknod $D/$TTY$devno c $maj $min >>$SCR
                        echo mknod $D/$TUB$devno c $fsmaj $min >> $SCR
                fi
                echo "echo t$min$GETTYLINE $TTY$devno >> $NINITTAB" >> $SCRTMP
        fi
done < $P

echo mv $INITTAB $OINITTAB >> $SCRTMP || exit 1
echo mv $NINITTAB $INITTAB >> $SCRTMP
cat $SCRTMP >> $SCR
rm $SCRTMP
exit 0