매번 테스트시에 로그인하는게 귀찮아서 자동 로그인을 구현 해야하는 상황이 발생했다🤔
==> 시스템이 부팅될 때 실행되어 특정 터미널 장치에 자동으로 root 사용자로 자동 로그인 되게 할 예정이다.
인터넷 찾아보니 나랑 완전히 똑같은 상황은 드물어서 공유하면 좋을 것 같아 기록한다! 내 공부도 되고!😊
참조한 글:
How to login automatically without typing the root username or password in Buildroot BusyBox init?
If I do: git clone git://git.buildroot.net/buildroot cd buildroot git checkout 2016.05 make qemu_x86_defconfig make BR2_JLEVEL=2 qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=...
unix.stackexchange.com
Reg: Auto-Login and run a script Automatically
Hi All, I would like to have a program starting right after boot. I have made some research about it but I could not find any solution for my problem until now. I want to connect the power supply of my board, it will boot, automatically login, run a script
community.nxp.com
자동 로그인 추가 후 sdcard img로 만들어 update할 예정임.
1. home/root/ 경로에 autologin.sh 파일 생성
+ 파일 생성 후 실행 권한 설정 : chmod +x autologin.sh
#!/bin/sh
exec /bin/login -f root
- 주어진 터미널에 자동으로 root 사용자로 로그인하는 데 사용
1. #!/bin/sh: 이것은 스크립트가 사용할 쉘을 지정합니다. 여기서는 /bin/sh가 사용됩니다.
2.exec: 이 명령어는 현재 프로세스를 새로운 프로세스로 대체합니다. 따라서 이 명령어 이후에 오는 명령어가 실행됩니다.
2. /bin/ogin -f root: 이 줄은 /bin/login 프로그램을 실행하는 명령어입니다. -f root는 사용자를 root로 로그인하도록 지시합니다.
따라서 이 스크립트는 시스템이 부팅될 때 실행되어 특정 터미널 장치에 자동으로 root 사용자로 로그인합니다.
2. package/sysvinit/inittab 파일에 위의 .sh파일 경로 추가
//package/sysvinit/inittab 파일
# S0:1:respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL
PS0::respawn:/sbin/getty -l /home/root/autologin.sh -n -L ttyPS0 0 vt100 # GENERIC_SERIAL
- sysvinit
- init 데몬이 /etc/inittab 파일을 읽음. (v)
- init 데몬이 /etc/rc.sysinit 스크립트를 읽음
- init 데몬이 /etc/rc 스크립트를 실행한다.
- /etc/rc 스크립트가 /etc/rc(run level).d 디렉터리 이하의 스크립트를 실행한다.
- Linux 시스템에서 최초로 실행된 프로세스인 init이 /etc/inittab파일의 설정에 따라 시스템이 필요한 서비스를 순차적으로 가동시킴.
inittab 파일은 시스템 초기화 및 프로세스 관리를 담당하는 데 사용되는 설정 파일 중 하나입니다.
주어진 줄은 시스템이 부팅될 때 특정 터미널 장치에 대한 로그인을 관리하는 데 사용됩니다.
1.
PS0: 이 줄은 특정 터미널 디바이스를 나타냅니다. 보통 시스템에서 시리얼 포트를 나타내는 ttyS0와 같은 형식을 사용합니다. 여기서는 PS0로 표시되어 있으며, 시스템의 특정 시리얼 포트를 나타내는 임의 지정된 id입니다.
2.
respawn: 프로세스 관리를 나타내는 키워드입니다. 이 부분은 getty 프로세스가 종료되면 다시 실행되도록 하는 역할을 합니다. 즉, 이 줄의 내용인 getty 프로세스가 종료되면 시스템이 자동으로 해당 터미널에 대한 로그인 프로세스를 다시 시작합니다.
3.
/sbin/getty: 실행될 프로그램 또는 명령어를 나타냅니다. getty는 터미널 장치에 로그인 프롬프트를 표시하는 프로그램입니다.
4.
-l /home/root/autologin.sh: 이 옵션은 로그인이 성공하면 /home/root/autologin.sh 스크립트를 실행합니다. 즉, 로그인이 성공하면 /home/root/autologin.sh 스크립트를 실행하고, 그렇지 않으면 다시 로그인을 시도합니다.
5.
-n: 이 옵션은 getty가 로그인 이름 입력을 요구하지 않도록 지정합니다.
6.
-L ttyPS0: 이 옵션은 로그인 프롬프트를 터미널에 출력합니다. 여기서는 ttyPS0로 표시된 특정 시리얼 포트에 출력됩니다.
7.
vt100: 이 부분은 로그인 프롬프트의 터미널 유형을 지정합니다. "vt100"은 터미널 유형을 나타내는 것으로, 여기서는 가장 일반적인 유형 중 하나입니다.
따라서 이 줄은 시스템이 부팅될 때
/home/root/autologin.sh 스크립트를 사용하여 특정 터미널 장치(ttyPS0)에서 자동 로그인을 관리하고, 사용자에게 로그인 이름을 요구하지 않는 방식으로 설정된 것입니다.
3. /package/sysvinit/sysvinit.mk 경로의 make 파일에 autologin.sh 경로 및 옵션 추가 [-l /home/root/autologin.sh -n]
ifeq ($(BR2_TARGET_GENERIC_GETTY),y)
define SYSVINIT_SET_GETTY
$(SED) '/# GENERIC_SERIAL$$/s~^.*#~$(shell echo $(SYSTEM_GETTY_PORT) | tail -c+4)::respawn:/sbin/getty -l /home/root/autologin.sh -n -L $(SYSTEM_GETTY_OPTIONS) $(SYSTEM_GETTY_PORT) $(SYSTEM_GETTY_BAUDRATE) $(SYSTEM_GETTY_TERM) #~' \
$(TARGET_DIR)/etc/inittab
endef
마지막으로, sysvinit.mk 파일을 수정하여 login.sh 파일의 경로를 지정해야 합니다. 이렇게 하면 inittab 파일에서 지정한 스크립트가 올바르게 실행됩니다.
4. make
+ 추가
ssh로 파일 수정시
- home/root/autologin.sh 넣기 + 실행권한
- etc/inittab에 [2]번 문장 삽입
추가 정보 🍘
시스템 부팅 및 재부팅 그리고 실행레벨을 init이나 shutdown 으로 변경시 init 데몬이 etc/inittab파일에서 정보를 읽어 프로세스를 시작한다.
inittab 파일에 대한 필드 설명
필드 | 설명 |
id | 항목에 대한 고유 식별자입니다. |
rstate | 이 항목이 적용되는 실행 레벨을 나열합니다. |
작업 | process 필드에 지정된 프로세스를 실행할 방법을 식별합니다. 가능한 값은 sysinit, boot, bootwait, wait 및 respawn입니다. |
프로세스 | 실행할 명령 또는 스크립트를 정의합니다. |
sysvinit
Linux 시스템에서 최초로 실행된 프로세스인 init이 /etc/inittab파일의 설정에 따라 시스템이 필요한 서비스를 순차적으로 가동시킴.
- init 데몬이 /etc/inittab 파일을 읽음. (v)
- init 데몬이 /etc/rc.sysinit 스크립트를 읽음
- init 데몬이 /etc/rc 스크립트를 실행한다.
- /etc/rc 스크립트가 /etc/rc(run level).d 디렉터리 이하의 스크립트를 실행한다.
==>이래서 sysvinit/inittab 을 수정 후 make 하면 etc/inittab에 저장됨.
https://docs.oracle.com/cd/E24846_01/html/E23290/hbrunlevels-12863.html
/etc/inittab 파일 - 시스템 관리 설명서: 기본 관리
/etc/inittab 파일 시스템을 부트하거나 init 또는 shutdown 명령으로 실행 레벨을 변경하면 init 데몬이 /etc/inittab 파일에서 정보를 읽어 프로세스를 시작합니다. 이 파일은 다음과 같이 init 프로세스에
docs.oracle.com