본문 바로가기
Development/Linux

[LINUX] OpenSSH CrossCompile for ARM

by qWooWp 2023. 10. 5.
반응형

1. 목적 : OpenSSH 내가 사용할 Embedded Linux 이식 하기 위한 CrossCompile 방법

 

2. 빌드해야 되는 패키지 

 - zlib v1.3

 - openssl v1.1.1w

 - openssh v9.4p1

 

빌드 시작

 

사전에 실행할 Terminal 에서 tool chain 의 path 를 등록한다. 

각자 설치된 위치에 맞게 입력하시면 됩니다. 

# export PATH=${PATH}:/tools/arm/gcc/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf/bin/

 

 

zlib 빌드

  1. 다운로드

   https://zlib.net 에서 다운로드가 가능합니다.

   또는

   # wget https://www.zlib.net/zlib-1.3.tar.gz

 

  2. 빌드

 아래와 같이 수행하면 결과가 ./result 디렉토리에 생성됩니다 

# mkdir ./result
# sudo chmod -R 777 ./result
# export PATH=${PATH}:/tool/chain/path/bin/
# CC=arm-none-linux-gnueabifh-gcc prefix=/zib/path/result/ ./configure
# make
# make install

 

openssl v.1.1.1w 빌드

1. 다운로드

 https://www.openssl.org/source/

또는

# wget  https://www.openssl.org/source/openssl-1.1.1w.tar.gz

 

2. 빌드하기 

# tar xvf ./openssl-1.1.1w.tar.gz
# cd openssl-1.1.1w
# mkdir result
# sudo chmod -R 777 ./result
# ./Configure linux-generic32 --prefix=/absolute/path/openssl-1.1.1w/result --cross-compile-prefix=arm-linux-gnueabi-
# make
# make install

-> 1.0.1 을 빌드해야 되는 상황이라면 (내부 GLIBC 버전이 안맞거나) 기본 빌드 조건이 static 이므로 shared 옵션을 추가해야 한다. 

 

./Configure linux-generic32 shared .....

 

 

openSSH 빌드

1. 다운로드

 https://www.ftp.ne.jp/pub/OpenBSD/OpenSSH/portable/openssh-9.5p1.tar.gz

또는

#wget https://www.ftp.ne.jp/pub/OpenBSD/OpenSSH/portable/openssh-9.5p1.tar.gz

 

2. 빌드하기

# tar xvf openssh-9.5p1.tar.gz
# cd openssh-9.5p1.tar.gz
# mkdir ./result
# chmod -R 777 ./result
# ./configure --host=arm-none-linux-gnueabihf --target=arm-none-linux-gnueabihf --prefix=/output/path/result --with-zlib=/zlib/path --with-ssl-dir=/openssl/path --disable-strip

configure 에서의 패스는 모두 절대 경로로 입력해야 됩니다. 

이후 Makefile 에서 아래 내용을 임시 경로로 변경해야 합니다. 아니면 /var 권한이 없기 때문에 생성 실패가 발생합니다. 

 

PRIVSEP_PATH=/var/empty

아래와 같이 자신의 디렉토리로 또는 이 권한은 777 로 주고 하면 됩니다. 

PRIVSEP_PATH=/myhome/ssh/openssh-9.4p1/empty

 

** 생성된 config.h 파일에서

자신의 Target Device 의 기본 PATH 를 변경해야 한다. 

USER_PATH 값에서 자신의 PC 값으로 되어 있는 것을 target device 의 path 에 맞게 수정해야 됩니다. 

 

** Makefile 에서도 prefix 디렉토리를 제거 해야 한다. Target device 에서 잘못된 path 처리가 됨.

make install path 를 위해 Makefile 에 있는 DESTDIR path 만 존재 하면 된다.

 

# make
# make install-nokeys

arm 보드에서 빌드한 것이 아니기 때문에 key 생성 실패가 발생하기 때문에 위와 같은 옵션으로 설치를 하게 되면

result 디렉토리에 최종 파일들이 모입니다. 

 

* ssh_config, sshd_config 파일 설치 위치 -> /etc/ssh/

 

디바이스에는 위 3가지 패키지의 생성물 및 라이브러리들을 복사해서 설치하시면 됩니다. 

 

make install 대신에 생성된 파일을 각각 아래 Target Device 에 복사 하면 됩니다. 

prefix 문제로 키 생성이 정상적으로 되지 않는 문제가 생김

 

 

 

 

 

[ERROR] 

libcrypt.so 가 없다고 나올 경우 

 

<Solution>

glibc 라이브러리를 빌드하여 나오는 libcrypt.so 를 /usr/lib 에 복사하면 실행이 된다. 

 

 

[ERROR]

sshd: no hostkeys available -- exiting.

아래와 같이 키를 생성해 주어야 한다. 

 

<Solution>

ssh-keygen -A

 

 

 

 

반응형

댓글