what is initramfs & buzybox
음.. 상당히 기본적인 것만 다루는 글이다.
일단 buzybox가 뭐냐고 질문하면 그냥 단순한 바이너리이다.
우리가 흔히 사용하는 ls 명령어 처럼
근데 이름처럼 상당히 바쁜데, 그 이유가 우리가 흔히 사용되는 명령어 중에 initramfs 단계(초기 루트 파일시스템 단계) 에 사용되는 중요한 명령어들을 /bin/buzybox 안에 모두 넣어놓았다. 따라서 모든 명령어를 /bin/buzybox 으로 링크를 해놓으면, mount 명령어를 사용할때
buzybox 안에 있는 mount 명령어를 사용하게 된다.
근데 왜 buzybox가 필요하냐면 커널이 본 파일시스템을 사용하면서 서비스들을 본격적으로 /sbin/init으로 실행하기 전에 필요한 네트워크, 암호화 ,설정 , 모듈 같은 것들이 있다. 이를 미리 설정을 해야 할때 우리는 initramfs라는 임시적인 파일시스템을 만들어 그안에 init 파일을 만들어서 수행한다. ( 이게 PID1 로 실행된다 )
주로 init 파일 하단에
mount /dev/sda2 /newroot
exec switch_root /newroot /sbin/init다음과 같은 코드로 루트 파일시스템을 바꾸면서 넘어감
근데 조심을 해야할게
exec /sbin/init "$@"이런식으로 바로 initramfs 파일시스템 안에 있는 /sbin/init을 시작할때도 있는데
이때는 이 initramfs 파일시스템을 기본 시스템으로 가볍게 사용하겠다. 이거임 기본 명령어들도 그냥 buzybox로만 사용하고
근데 이 init이 실행이 되기 위한 기본적인 명령어들이 필요한데 이걸위해 최소한의 리소스를 쓰면서 수행하기 위한 buzybox라는 하나의 바이너리를 빌드하는 것이다.
참고로 극한의 저량 임베디드에는 굳이 /sbin/init 이라는 무거운 systemd 서비스를 이용한 이유가 없음, 그냥 buzybox에서 init 파일로 다 돌리면 됨. 그냥 이게 루트시스템으로 사용하는 거지