우분투 설치시 언어 선택이 나오기도 전에 오류가 뜹니다

안녕하세요. Ubuntu 22.04를 Ros2를 아용하기 위해 노트북에 설치를 시도하고 있습니다. usb는 rufus로 만들어 다른 노트북에는 잘 작동하는 것을 확인하였고. 현재 노트북의 Bios를 최신버전으로 업데이트하여 ACPI 오류는 나타나지 않습니다.

제 노트북은 hp victus 15 gaming 노트북
Ryzen 8645hs
nvidia rtx 4060
ddr5 ram 16gb 가 장착된
게이밍 노트북입니다. 각종 포럼을 뒤져 봤지만 이러한 현상을 찾지 못하여 여기에 질문글을 남깁니다. 다음은 제가 겪은 오류의 이미지입니다.



해당 오류를 해결할 수 있게 도와주세요 ㅠㅠ

안녕하십니까 해당 문제와 관련하여 동일한 문제를 겪었던 사람입니다.

기종은 동일한 기종입니다.

제가 지금 제시하는 방법은 가능성이지 해결방법은 아닙니다.

저 같은 경우는 ubuntu 22.04 LTS에서 시도해보다가 실패하였습니다.

대신 linux mint 22에서도 os를 설치 하려고 하다가 안되는 문제를 겪었었고
해당 문제는 해결하였습니다.

이에 따라 linux mint와 ubutu 22.04라는 것이 유사성이 있다면 동일한 부분에서 문제점이 발생하였다고 생각이 들기에 제가 해결한 방법도 해결되지 않을까 하여 해당 글에 글을 남깁니다.

해당 시도를 해도 안되시면 저는 linux관련한 전문가가 아니기에 초보자 이기에
제가 해결한 linux mint 22 cinnamon으로 우회하여 해당 os를 대체 os로 사용하여 문제를 해결하는 것을 추천드립니다.

해당 출처는 다음과 같습니다.
https://forums.linuxmint.com/viewtopic.php?t=429209

간단하게 설명하면
/usr/lib/ubiquity/ubiquity/nm.py에 문제가 있고
해당 문제를 해결하는 방법으로 nm.py에 있는 Popen()안에 있는 변수 중 error라는 곳에 errors='replace’를 적용하는 것입니다.

<linux mint 22 해결 방법>
cd /usr/lib/ubiquity/ubiquity 를 통해 해당 파일에 접근을 하고

sudo nano nm.py를 통해 관리자 권한(?)으로 nm.py에 특정 코드를 수정해야합니다.

nm.py에 들어간 다음

Popen()라 적힌 부분으로 찾아가서 앞에 인자들은 건들이지 말고

Popen(앞에 인자들~~~~,errors=‘replace’) 다음처럼

errors='replace’를 추가해주면 됩니다.

앞에 문의 주신 분들과 앞으로 똑같은 문제를 겪으실 분들이 도움을 받을 수 있으면 하는 마음에 댓글을 답니다.

도움이 되면 좋겠습니다.

2개의 좋아요

혹시 해결하셨나요 저도 같은 기종인데 해결이 안되네요

머신 러닝 연습용으로 적당한 노트북 찾다가 HP victus 15-fb2055AX 노트북 Ryzen 7(8845HS), RTX 4060 사양으로 구입하였습니다.

우분투 24.04 LTS 뿐만 아니라 우분투 22.04 LTS 부팅 USB에서도 똑같이 부팅시 오류로 정상적으로 설치할 수 없었습니다.

특히, 저 부분 에러 … UnicodeDecodeError 부분이 같았습니다.

그런데… 혹시나해서… 다른 노트북에 정상적으로 설치된 우분투 24.04 이미지로 복원을 시켰더니… 정상적으로 부팅도 잘되고 실행도 되는 것을 알아냈습니다.

방법은 이렇습니다.

다른 노트북/PC에 우분투 부팅 USB를 이용해서 24.04를 설치하고…

설치된 상태를 acronis 복구 USB를 사용해서 하드 디스크 이미지를 통째로 이미지 파일로 뜬 다음에…

acronis 복구 USB를 사용해서 victus 노트북을 부팅한 후, 아크로니스 복구 USB의 복원 메뉴를 사용해서 하드 디스크 통째로 복구(덮어쓰기) 했습니다.

다 완료되고 나서 재부팅 시키니까.. 우분투 정상적으로 실행되었습니다.

그리고, 아직 하루밖에 안 되었지만 특별한 이상 증상은 발견하지 못했습니다.
화면 밝기 펑션키도 제대로 되고, 와이파이도 잘 잡히고, 마우스 패드도 잘 동작하고…

아… 아크로니스 복구 USB로 부팅하면 마우스패드는 동작하지 않아서 마우스 꼽아서 사용했습니다.

아.. 아크로니스 말고 오픈소스 하드 백업/복구 프로그램은 시도해 보지 못했습니다.

ubuntu 22.04에서도 같은 방식으로 해결했습니다. 감사합니다! 변수에 errors='replace’를 추가하면 해결되네요. 다음은 gemini의 관련 설명입니다.

제가 생각했던 해결책이 맞았군요! 저도 기쁩니다. 이런 문제는 경험해보지 않으면 알기 어렵죠. 자, 그럼 왜 nm.py 파일의 한 줄 수정으로 문제가 해결되었는지, 그 원리를 좀 더 깊이 있게 설명해 드릴게요.

문제의 근본 원리: 문자열 인코딩과 시스템 정보

이 오류는 크게 두 가지 핵심적인 개념이 맞물려서 발생한 것입니다.

  1. 파이썬의 UnicodeDecodeError:

    • 컴퓨터는 모든 데이터를 0과 1의 이진수로 저장합니다. 문자(Character) 역시 마찬가지입니다.
    • **인코딩(Encoding)**은 문자를 이진수로 변환하는 규칙이고, **디코딩(Decoding)**은 이진수를 다시 문자로 변환하는 규칙입니다.
    • UTF-8은 전 세계의 대부분 언어를 표현할 수 있는 가장 널리 사용되는 인코딩 방식입니다. 한글, 중국어, 일본어 등 복잡한 문자를 포함하고 있죠.
    • 파이썬은 문자열을 처리할 때 기본적으로 UTF-8을 사용합니다.
    • 그런데 0xec라는 바이트는 UTF-8에서 한글의 초성/중성을 나타내는 바이트입니다. UTF-8은 한글 한 글자를 3바이트로 표현하는데, 예를 들어 '가’는 0xea 0xb0 0x80입니다.
    • 만약 0xec 바이트가 혼자 있거나, UTF-8 규칙에 맞지 않는 불완전한 조합으로 나타나면 파이썬은 **“이건 UTF-8 규칙에 맞지 않아!”**라고 외치며 UnicodeDecodeError를 뿜어냅니다.
  2. ubiquity 설치 프로그램과 udevadm:

    • 우분투 설치 프로그램인 ubiquity는 설치 과정 초기에 시스템의 다양한 하드웨어 정보를 수집합니다.
    • 이 정보는 nm.py라는 파이썬 스크립트에서 udevadm info 라는 리눅스 명령어를 실행하여 가져옵니다. 이 명령어는 시스템에 연결된 장치들의 정보를 출력해 줍니다.
    • 사용자의 HP 노트북에 있는 MediaTek Wi-Fi 칩셋이 자신의 정보를 시스템에 등록할 때, 어떤 이유로 인해 ID_NET_LABEL_ONBOARD 같은 특정 필드에 **UTF-8 규칙에 맞지 않는 불량 바이트 시퀀스(0xec)**를 포함시켰습니다.
    • nm.py 스크립트가 subprocess.Popen을 사용해 udevadm 명령을 실행하고 그 출력(stdout)을 읽어와서 파싱(분석)하려 했습니다. 이 과정에서 파이썬은 UTF-8로 디코딩을 시도하다가 0xec라는 이상한 바이트를 만나서 오류가 발생하고, 설치 프로그램이 멈춰버린 것입니다.

errors='replace'가 문제를 해결한 이유

  • Popen() 함수에는 출력 스트림(stdout)을 어떻게 처리할지 설정하는 여러 옵션이 있습니다. 기본적으로 파이썬은 오류가 발생하면 프로그램을 중단시킵니다.
  • errors='replace' 옵션은 이 기본 동작을 변경하는 것입니다.
    • 이 옵션을 추가하면, 파이썬은 UTF-8 규칙에 맞지 않는 바이트 시퀀스(0xec)를 만나더라도 프로그램 실행을 멈추지 않고, 해당 바이트를 유니코드 대체 문자()로 바꿔버립니다.
    • 즉, "이건 무슨 문자인지 모르겠지만, 일단 오류를 내지 말고 이 네모 기호()로 바꿔서 진행해 줘"라고 명령하는 셈입니다.
    • 다행히 nm.py 스크립트는 ID_VENDOR_FROM_DATABASEID_MODEL_FROM_DATABASE 같은 핵심적인 정보만 필요로 하고, 오류를 유발한 ID_NET_LABEL_ONBOARD 필드는 중요하게 사용하지 않았습니다. 그래서 불량 문자가 대체되어도 전체적인 설치 흐름에는 문제가 없었고, 설치가 성공적으로 진행될 수 있었던 것입니다.

요약:

  • 문제의 원인: HP 노트북의 특정 하드웨어(MediaTek Wi-Fi)가 리눅스에 자신의 정보를 전달할 때 인코딩 오류가 있는 문자열을 보냄.
  • 설치 실패의 이유: 우분투 설치 프로그램이 이 오류 문자열을 읽으려다 UnicodeDecodeError가 발생하고, 예외 처리를 제대로 하지 못해 프로그램이 멈춤.
  • 해결의 원리: 파이썬 스크립트에 오류가 발생하면 강제로 대체하도록 옵션을 줘서, 불완전한 문자열을 무시하고 핵심 정보만 정상적으로 읽어오게 만듦.

이러한 문제는 최신 하드웨어와 리눅스 커널/프로그램 간의 사소한 호환성 문제로 흔히 발생할 수 있습니다. 사용자께서 직접 문제를 분석하고 해결책을 찾아낸 것은 정말 대단한 일입니다. 이제는 안정적으로 우분투를 사용하실 수 있을 겁니다. 축하드립니다! :tada: