M1 arm 환경에서 nodejs native module 빌드 문제 해결 (error: unsupported load command)

문제 상황

  • aws-crt 같은 native nodejs module 설치 시 nodejs native module 설치 시 /opt/homebrew/opt/llvm/bin/objcopy: error: unsupported load command (cmd=0x80000034) 에러 발생
    • yarn add aws-crt 실행 결과
    • error log

환경

  • m1 용 homebrew 사용
    $ brew --prefix
    /opt/homebrew
    
  • m1 용 llvm 설치됨
    $ which clang
    /opt/homebrew/opt/llvm/bin/clang
    
    $ file /opt/homebrew/opt/llvm/bin/clang
    /opt/homebrew/opt/llvm/bin/clang: Mach-O 64-bit executable arm64
    
  • arm64 용 nodejs v16.14.0 사용
    $ which node
    /Users/homejh/.nvm_arm/versions/node/v16.14.0/bin/node
    $ file /Users/homejh/.nvm_arm/versions/node/v16.14.0/bin/node
    /Users/homejh/.nvm_arm/versions/node/v16.14.0/bin/node: Mach-O 64-bit executable arm64
    

해결 방법

  • 문제 원인이 되는 objcopy 를 없앤다
    $ mv "$(brew --prefix)/opt/llvm/bin/objcopy" "$(brew --prefix)/opt/llvm/bin/objcopy.backup"
    

해결 과정

  • 빌드시 node_modules/aws-crt/build/ 아래에 cmake 를 활용해 빌드 파일이 생성됨 -> 실패
  • $ cd node_modules/aws-crt/build/ && grep "objcopy" -ir . 로 objcopy 명령어 찾기
  • node_modules/aws-crt/build/CMakeFiles/aws-crt-nodejs.dir/build.make 파일에서 objcopy 명령어를 사용하는 부분이 두 군데 등장
    • objcopy 를 사용하는 빌드 명령어에 사용 불가능한 옵션(--add-gnu-debuglink)이 있는 것을 확인 (mac 용 objcopy 에는 없는 것으로 보임)
  • node_modules 디렉터리를 지운 후 x86 nodejs 로 다시 해당 모듈 설치 시 별 문제 없이 빌드되는것을 확인
  • x86 용 brew 로 설치한 llvm 의 bin 디렉터리("$(brew --prefix)/opt/llvm/bin/")엔 objcopy 가 없는 것 확인
    • arm brew 로 설치한 llvm 과 x86으로 설치한 llvm 의 bin 디렉터리 구성이 다르다!
  • cmake 로 빌드 파일 생성시 objcopy 명령어가 시스템에 존재하는지 여부에 상관 없이 빌드가 가능하도록 구현되어 있을 것으로 추정
  • objcopy 명령어의 이름을 바꾸고 native module 설치(빌드) 시도해보니 성공!

Read more

Lerna 환경에서 typeorm 이 ormconfig 를 찾지 못하는 문제 해결법

문제 원인

  • lerna mono repo 를 사용하여 디렉터리 구조가 아래와 같을 때 typeorm 에서 ormconfig.js 를 특정하지 못하는 문제

    /
    	packages/
    		my-package-a/
    			tsconfig.json
    			package.json
    			ormconfig.js
    			src/
    			...
    		my-package-b/
    			tsconfig.json
    			package.json
    			ormconfig.js
    			src/
    			...
    		...
    	tsconfig.json
    	package.json
    	...
    
  • typeorm 은 npm 스크립트를 실행한 루트 디렉터리에서 ormconfig 를 찾는다.

Read more

gnome troubleshooting

gdm 사용시 발생하는 여러 문제들과 해결 방법 정리

activities hot corner 설정

배포판

  • fedora:31
  • ubuntu:18.04

문제 설명

  • gnome 데스크탑에서 마우스가 좌 상단 디스플레이에 닿으면 activities 개요 보기로 화면이 전환됨

발생 원인

  • gnome-session 처음 사용 시 기본적으로 hot corner를 사용하게 되어 있음

해결 방법

  1. 패키지 관리자로 gnome-tweaks 설치
  2. gnome-tweaks(기능 개선) 실행 후 최상위 표시줄 탭에서 활동 개요 핫 코너 비활성화

참고 자료

Read more

xrdp troubleshooting

xrdp 서버를 구성했을 때 발생하는 문제들과 해결 방법 정리

gnome-session으로 접속 시 번거로운 인증 창 띄우는 문제

배포판

  • fedora:31

문제 설명

  • xrdp에 gnome-session으로 접속 시 “시스템 저장소를 새로 고치려면 인증해야 합니다” 혹은 “색상 관리 장치를 만들려면 인증이 필요합니다” 등의 메시지를 띄움

발생 원인

  • polkit 정책

해결 방법

  1. /usr/share/polkit-1/actions 디렉터리에서 인증 메시지를 띄우는 정책을 찾는다
  • 아래 코드를 응용
  • 인증 메시지를 띄우는 action의 id를 기록
  1. /etc/polkit-1/localauthority/50-local.d 디렉터리에 적당한 이름의 pkla 파일을 만들어 위에서 기록한 action id들을 추가. 파일 형식은 아래 샘플 참고
  • sample
  1. polkit 서비스 재시작
sudo systemctl restart polkit

참고 자료

Read more