태그 보관물: Linux

복붙의 함정, 디렉토리를 삭제할 수 없다?

매우 간단한 디렉토리 생성 명령어가 의도대로 동작하지 않고 실패했다. 왜 일까? ls 명령어의 결과를 보면 알 수 있는데, 부모 디렉토리를 생성하는 -p 옵션이 동작하지 않고 디렉토리로 생성되어 버렸다. 그 다음으로 존재하지 않는 ~/docker/shared 디렉토리를 생성하려고 했으니 명령어가 실패한 것이다. 이 mkdir 명령어는 사실 어딘가에서 복사 붙여넣기 한 것인데, 이렇게 잘 못 생성된 디렉토리는 왠만해서 삭제가 […]

VMM에서 Host USB장치를 Guest로 넘기기

VMM(Virtual Machine Manager)에서 Host machine의 USB 장치(카메라)를 passthrough하는 단계에 대한 설명. Guest OS로 넘기고자하는 device는 Laptop에 달려 있는 카메라라고 하자. VMM에서 Add Hardware 버튼을 누르고 USB Host Device를 선택하면 연결된 장치들의 목록이 표시된다. 여기에서 해당 카메라 장치를 선택하고 Finish 버튼을 누르면 장치가 등록된다. Guest OS를 부팅하고 넘겨진 장치의 목록을 부면 Host OS의 BDF와는 다른 번호가 […]

Update failed: upgrade-temp-backup 디렉토리를 생성할 수 없습니다.

WordPress에서 몇 번 플러그인 업데이트 실패에 대한 알람이 왔었는데, 오늘에야 살펴보니 자동은 물론 수동 업데이트도 계속해서 실패하고 있었다. 새로 릴리즈된 WordPress 6.3에서 플러그인과 테마를 롤백할 수 있는 기능이 추가되었는데, 이 기능을 위해 wp-content/upgrade-temp-backup/plugins와 wp-content/upgrade-temp-backup/themes 디렉토리를 사용하는 모양이다. (관련 기사 링크) 문제의 원인은 간단했는데, wp-content 디렉토리의 쓰기 권한이 daemon에게 없기 때문에 디렉토리를 만들지 못하고 실패하는 것이었다. […]

Multi-container app의 Bad Gateway(502) 문제 디버깅

Intel Training and Learning Suite(TLS)는 처음으로 경험해보는 multi-container application이다. 중간에 native개발을 위한 환경 설정을 끼워 넣어 보려고 이것 저것 시도하는 중에 web interface를 담당하는 tls_proxy라는 docker가 Bad Gateway를 띄우면서 문제가 생겼다. 디버깅 하는 과정에서 사용해 본 docker-compose명령어 들의 쓰임새가 유용할 것 같아서 기록으로 남겨 둔다. Port number와 docker찾기: docker-compose ps Web browser로 서비스에 접근하면(https://localhost) Bad […]

Linux에서 메모리 포인터의 유효성 검증

Windows에서와 달리 Linux환경에서는 딱히 포인터의 유효성을 검증할 수 있는 system call이 없다. 이 포스팅은 Linux환경에서 이와 유사한 기능을 구현하기 위해 “정보의 바다”에서 찾은 내용들을 정리해 둔 것이다. 1. _etext를 이용하는 방법 첫번째 방법은 Define and use a pointer validation function 이라는 위키문서에서 가져온 것인데 컴파일러가 생성하는 text 영역의 시작점을 이용해서 포인터 값이 이를 침범 하는지 […]

GDB에서 인스턴스의 실제 타입 표시하기

Base class로 부터 상속 받은 Derived class의 인스턴스를 Base class 포인터에 넣으면 GDB에서 타입이 제대로 표시되지 않는다. 이 때는 ‘set print object on’을 설정해서 GDB의 ptype <var> 명령 결과에 해당 인스턴스의 실제 타입이 함께 표시 되도록 할 수 있다. 예를 들어 다음과 같은 코드가 있다고 할 때 main() 함수 내의 “Base *c”를 GDB에서 확인해 보면 […]

Gitlab test-runner의 FATAL: the “HOME” is not set 문제

GitLab Runner 문서를 보고 열심히 따라하고 설정까지 마쳤는데 러너가 동작하지 않고 commit을 하면 CI가 한 참 동안을 pending 상태에 있다가 실패했다는 에러 메일 보내 버리는 증상이 있다. Systemctl로 서비스 상태를 보니 제대로 올려지지 않고 ‘inactive’이거나 ‘activating’에 계속 머물러 있다. 하지만 만약 background 서비스로 동작시키지 않고 다음과 같이 run command로 foreground에서 돌리면 잘 동작한다. 환경 설정에는 […]

Travis CI 설정과 docker image 사용

GitHub project에 CI를 붙이고 싶은데 Jenkins server가 회사 firewall 안에 들어 있어서 GitHub에서 직접 webhook을 붙일 수 없는 문제가 있다. Jenkins의 GitHub plugin으로 tunneling을 설정하는 방법 등 있기는 하지만 다른 CI 옵션들을 살펴 보던중 Open source project에 대해서는 무료라는 Travis CI가 있다는 것을 알게 되었다. Travis CI는 기본으로 Ubuntu를 지원하고 그 외의 경우는 docker를 사용해서 환경을 […]

[Tip] Fedora CUI booting 설정

Fedora (Version26, Workstation edition)은 /etc/inittab file로 runlevel을 변경하던 이전의 방식은 지원되지 않는다. /etc/systemd/system/default.target file을 보면 /lib/systemd/systm/graphical.target으로 link되어 있는데 이것을 multi-user.target으로 변경해 주면 CUI console로 진입할 수 있다. 설정 후 시스템을 리붓하면 CUI로 booting되고 startx 명령으로 GUI를 불러 올 수 있다. Display Manager를 띄우지 않기 때문에 GUI에서 logout하면 CUI로 되돌아온다. 아마도 비슷한 글: Virtual Box에 ext4 […]

Virtual Box에 ext4 partition을 직접 mount

Windows용 Virtual Box에서 vdi file이 아닌 HDD의 특정한 영역을 ext4로 직접 mount하는 방법에 대한 설명이다. 오래전에 해본거라 실제로 속도 향상이 있었는지는 기억이 나지 않는다.. HDD를 format하지 않으면 windows의 탐색기에서는 표시되지 않지만 Disk Manager에서는 연결된 모든 HDD가 보인다. Virtual Box를 설치한 directory에 보면 vboxmanage.exe라는 실행 파일이 있는데 이것을 이용하면, vdmk file을 생성하고 물리적인 HDD를 virtual box에 […]