nVidia 그래픽 드라이버로 엉망된 Ubuntu 16.04의 18.04로 업그레이드 시도

내꺼는 아니지만 머신 러닝 등의 이유로 nVidia Geforce 1080ti가 4대가 설치된 서버가 있다.

처음 도입 시 Ubuntu Desktop 16.04로 세팅했고 당시엔 GUI가 잘 작동하고 있었었다. 그런데 이런 저런 여러가지를 진행하던 중에 GUI가 맛이 가버렸고 그 이후로 우리는 GUI 환경을 복구할 수 없었다. 원인을 알 수 없었다.

이제 여유가 나 이를 Ubuntu 18.04로 올리면서 GUI 환경을 살려보려 시도했다.

  1. Ubuntu Desktop GUI 환경이 동작 안 함
  2. 서드파티 ppa 레포지터리 추가 한 상태
  3. VirtualBox 5.2 등 deb 설치 상태
  4. 최신 업데이트 안 한 상태
  5. 그 상태에서 do-release-upgrade 수행 했다가 VirtualBox 종료해야 한다며 뻑남
  6. apt -f install 수행 다 설치 안 됨
  7. dpkg --reconfigure -a, grub update 도중 루트 파티션 read only 걸림
  8. 재부팅 후 파티션 인식 안 됨 (부팅 실패)
  9. LiveUSB 부팅해서 fsck 수행 -> 6번 apt -f..으로 반복 * 3회
    # fsck -f -a /dev/sde1    # boot 파티션
    # fsck -f -a /dev/sde2   # root 파티션
  10. grub 날아감 (???????)
  11. LiveUSB에서 grub 복구 시도했으나 루트 파티션을 인식 못하는지 unknown filesystem 에러 뱉어냄
    boot-repair는 root 파티션을 read only로 마운트해서 작동 안 함
    grub-install은 unknown filesystem을 뱉어냄
  12. 다른 SSD에 18.04 새로 설치 -> 기본 상태인 nouveau 상태에서 GUI 환경 잘 됨
    아래처럼 nvidia 드라이버 설치해도 잘 됨
    https://smprlab.tistory.com/29
    $ lsmod | grep nouveau   # nouveau 여부 확인
    $ sudo vim /etc/modprobe.d/blacklist-nouveau.conf
    # 다음 두 줄 추가 후 저장
    blacklist nouveau
    options nouveau modset=0
    $ sudo update-initramfs -u
    $ sudo reboot
    $ sudo add-apt-repository ppa:graphics-drivers/ppa
    $ sudo apt update
    $ sudo ubuntu-drivers autoinstall
    $ sudo reboot
  13. chroot 후 grub 복구 시도했으나 루트 파티션을 인식 못하는지 unknown filesystem 에러 뱉어냄
    $ sudo mount /dev/sde2 /mnt # root 파티션 마운트
    $ sudo mount /dev/sde1 /mnt/boot/efi # boot 파티션 마운트
    $ sudo mount --bind /dev /mnt/dev
    $ sudo mount –bind /dev/pts /mnt/dev/pts
    $ sudo mount –bind /proc /mnt/proc
    $ sudo mount --bind /sys /mnt/sys
    $ sudo chroot /mnt
    $ sudo grub-install /dev/sde --recheck --debug
    $ sudo update-grub
    $ sudo grub-probe /
  14. fsck, 에러 check, repair 등등 파티션에 대해선 이것저것 다 수행했으나 전부 실패
  15. 파티션 통째로 압축 백업 후 루트 파티션만 포맷, 다시 압축 해제하는 걸로 복원 시도
    # tar cvpzf backup.tar.gz --exclude=/lost+found /mnt
    포맷 + /mnt에 마운트
    # tar xvpzf backup.tar.gz -C /
  16. grub-install, update-grub 등 모두 정상 작동
  17. 하지만 우분투 로고에서 멈춤
  18. 부팅 로그 보니 온갖 서비스들 제대로 안 올라가고 hang
  19. Failed to start Create static device nodes in /dev. 에러 확인
  20. systemd-tmpfiles-setup-dev.service - Create static device nodes in /dev 서비스 문제
  21. /dev에 기존 가상 장치들이 모두 그대로 있는 상태, 다 삭제함 -> 부팅 안 됨
  22. /dev만 다시 압축 해제해서 원복시키고, VMWare에서 깔끔하게 설치하고 전원 끈 상태의 /dev와 비교해 똑같이 함 -> 부팅 안 됨
  23. / 및 /dev 권한이 잘못 설정된게 문제
    https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1807682
    $ sudo stat -c "%U %G" /
    명령 내려보니 root가 아닌 다른 id가 등장
    $ sudo chown root:root /
    $ sudo chown root:root /dev
    후 재부팅했더니 넘어감
  24. GUI 여전히 안 됨..
  25. 구 버전 nvidia 드라이버가 설치된 상태이므로 nouveau 로 원복 후 시도 -> 여전히 안 됨
  26. ...?
  27. gdm 내리고 startx 했으나 안 됨
  28. /var/log/Xorg.0.log 확인 했으나 잘 모르겠음..
  29. /var/log/syslog 확인 했으나 잘 모르겠음..
  30. /var/log/syslog 에서 EE로 검색해 (Xorg.log 내용이 함께 들어가있음) 살펴 봄
    - Activated service 'org.gnome.ScreenSaver' failed: Process org.gnome.ScreenSaver exited with status 1
    - traps: gnome-session-c[38296] trap int3 ip:7fdb16192f29 sp:7ffeca8cfda8 error:0 in libXext.so.6.4.0[7fdb16186000+11000]
    - (EE) Failed to load module "ast" (module does not exist, 0)
    - (II) Failed to load module "nvidia" (already loaded, 0)
    - (II) Failed to load module "nouveau" (already loaded, 0)...
    - (II) modeset(G3): Refusing to try glamor on llvmpipe
    - (EE) modeset(G3): glamor initialization failed
    - (EE) [drm] Failed to open DRM device for pci:0000:02:00.0: -19
    여기에서 맨 마지막 DRM 관련 에러를 통해 문제 발견
    https://nouveau.freedesktop.org/wiki/TroubleShooting/
    /etc/default/grub 파일에 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset" 이라 되어있었고 nomodeset 를 제거 -> 그래도 안 됨
  31. 다시 12번 단계처럼 드라이버 설치
  32. 드라이버가 12번 단계와 다른 구버전이 설치됨.....?
  33. 다 되돌리고 재부팅하고 apt clean 후 처음부터 다시 했더니 올바른 최신 버전 설치됨 -> 여전히 안 됨
  34. 30번 다시 수행
  35. 정상 부팅되는 우분투의 로그와 비교해본 결과, 다른 에러는 상관없는데
    traps: gnome-session-c[38296] trap int3 ip:7fdb16192f29 sp:7ffeca8cfda8 error:0 in libXext.so.6.4.0[7fdb16186000+11000]
    이 에러는 문제였음
  36. libXext.so.6.4.0을 정상 작동하는 우분투와 에러나는 우분투랑 버전 비교 했더니 같음. 근데 파일 비교하니 다름.
  37. 삭제 후 재설치를 시도했는데 libgcc1(의 의존성인 gcc-9-base) 등 의존성으로 인해 삭제를 할 수가 없음
  38. apt install --reinstall libxext6 했더니 정상 파일로 설치 됨
  39. 불필요한 gcc-9-base 삭제를 시도했더니 온갖 의존성 때문에 안 됨
  40. dpkg -l | grep 16.04 | grep -v 18.04 | grep ii 했더니 정상 작동하는 우분투엔 2개 나옴
    app-install-data-partner, gnome-initial-setup
    정상 작동하지 않는 우분투엔 엄청 많이 나오고, gcc-9-base를 포함한 의존성 걸려있는 애들도 같이 나옴
    얘들 제거하기 위해 lib~ 어쩌구부터 정상 설치된 우분투랑 비교해 그쪽 버전으로 강제 설치
    apt install --reinstall lib뭐시기=특정버전
    근데 비교하기 귀찮아서 apt-cache policy lib뭐시기 했더니 18.04용 버전이 나오길래 그거 보고함
    다 교체하고 나니까 gcc-9-base 삭제 가능해짐
    보니까 에러 뿜던 gnome screensaver라던가 기타 잡다한 것도 많길래, 교체할 버전이 없는 애들은 함께 다 지워버림
  41. 재부팅 -> 성공

이상이 삽질기.

22번 단계의 /dev 원래 내용은 다음과 같음.

결국 있었던 문제는 크게 다음과 같음.

  1. 설치한 nVidia 그래픽 드라이버가 최신이 아니었음
  2. libXext.so.6.4.0가 어째선지 깨졌음
  3. VirtualBox 등 외부 저장소의 패키지 및 deb 설치된 상태에서 18.04로 업그레이드 진행 -> 심지어 업그레이드 실패
  4. fsck 등 복구를 잘못 함
  5. 어째선지 / 및 /dev의 소유주가 잘못 설정되어 있었음
  6. /etc/default/grub의 커널 커맨드라인에 nomodeset을 추가해둠
  7. 위엔 안 적었지만 우분투가 설치된 SSD가 PCIe 카드형 SSD인데 온도가 90도가 넘음..