ia32-libs가 필요한 패키지 관리자를 통해 제공되지 않는 소프트웨어를 실행하는 방법

ia32-libs가 필요한 패키지 관리자를 통해 제공되지 않는 소프트웨어를 실행하는 방법

저는 네트워크의 다른 컴퓨터로 임무를 오프로드할 수 있는 방식으로 샌드박스 환경에서 내 임무를 테스트할 수 있도록 Virtualbox VM에 Arma 2 OA 전용 서버를 설치하려고 합니다. (다른 컴퓨터는 VM을 실행하고 있지만 Windows 머신이므로 설치에 번거롭고 싶지 않았습니다.) 최소 2개, 바람직하게는 4GB의 RAM이 필요하므로 AMD64 버전의 우분투를 설치해야겠다고 생각했습니다. 13.10 이 작업을 진행합니다.

'64비트 버전의 Ubuntu에서 32비트 프로그램을 어떻게 실행합니까?'는 이미 apt-get 및/또는 dpkg를 통해 32비트 소프트웨어를 설치하는 방법을 설명했지만 이 경우에는 적용되지 않습니다.

서버는 Arma 게임 개발사인 BI Studio 사이트에서 압축 다운로드 형태로 제공됩니다. 설치 지침은 현재 최신 기술에 비해 확실히 약간 오래되었습니다. (아마 최신 기술이 아주 최근에 업데이트되었기 때문일 것입니다.) ia32-libs를 설치해야 한다고 명시되어 있는데, 이는 현재 더 이상 사용되지 않는 것으로 보입니다. 이제 올바른 패키지를 설치하여 실행되도록 하는 방법을 찾아야 합니다.

이러한 문제에 관한 내 경험 수준은 초중급과 같습니다. 나는 apt-get을 통해 많은 패키지를 설치했습니다. 나는 과거에 종속성 문제를 해결했습니다. 패키지 관리자를 사용하지 않고 소프트웨어를 많이 설치하지 않았습니다. conf 파일 편집 등과 같은 기본적인 관리 작업을 스스로 처리할 수 있습니다.

방금 apt-get을 통해 ia32-libs를 설치하지 않고 설치하려고 시도했지만 결국 libs를 얻기 위해 gcc를 설치했습니다. 내 추론은 gcc가 이전 버전과의 호환성 코딩을 위한 파일을 포함하고 Linux에서는 모든 lib가 (내가 알 수 있는 한) 시스템 수준에서 /libs. 지금까지는 시작된 것 같습니다. (게임 내 네트워크 브라우저를 통해 게임 서버에 연결할 수 있으므로 통신 중입니다.) 게임 서버 프로그램을 실행할 때 종속성 검사가 진행되고 있는지 확실하지 않아 몇 가지 질문이 남습니다.

  • 13.10에서는 ia32libs 라이브러리에 대한 호출을 포착하고 호출을 amd64의 올바른 코드로 변환합니까?
  • 실행되면 필요한 모든 라이브러리가 올바르게 로드되었음을 의미합니까, 아니면 나중에 필요한 라이브러리가 누락되었을 때 충돌이 발생할 가능성이 있습니까?
  • gcc 설치와 같은 해결 방법을 수행해야 합니까? (i386 라이브러리와 함께)
  • 이 소프트웨어를 실행하는 데 어떤 라이브러리가 필요할 수 있는지 어떻게 알 수 있나요? (또는 패키지 관리자를 통해 제공되지 않는 기타 32비트 소프트웨어)

  • 답변1

    대부분 소프트웨어와 작성 방법에 따라 다릅니다. 그런 경우에는 32비트 데비안(사용 가능한 경우) 바이너리나 컴파일된 32비트 바이너리를 선택합니다. 이것은 내 답변에서 이미 설명되었습니다.64비트 버전의 Ubuntu에서 32비트 프로그램을 어떻게 실행합니까?32비트 시스템의 64비트 버전 실행도 시연했습니다(몇 년 전에는 불가능했습니다).실제로 64비트 시스템에서 32비트 애플리케이션을 실행하는 것이 더 쉽습니다.

    일반적으로 바이너리를 실행하면 누락된 라이브러리가 있다는 알림이 표시되며, 이를 저장소에서 확인할 수 있습니다.

    13.10에서는 ia32libs 라이브러리에 대한 호출을 포착하고 호출을 amd64의 올바른 코드로 변환합니까?

    아니요. 개발자는 이 작업을 수행해야 합니다. 시스템은 GNU 링커를 사용하는 라이브러리만 표시합니다 ld. 소프트웨어가 "하드 코드" 라이브러리를 사용하려고 하면 그를 속여 올바른 라이브러리를 가리켜야 합니다. 현대적이고 잘 작성된 소프트웨어에는 이것이 필요하지 않습니다.

    실행되면 필요한 모든 라이브러리가 올바르게 로드되었음을 의미합니까, 아니면 나중에 필요한 라이브러리가 누락되었을 때 변경 사항이 충돌합니까?

    실행되면 완벽합니다. 실행 파일 시작 시 라이브러리가 로드되고 라이브러리가 없으면(즉, 일부 누락) 시작되지 않습니다. 그러나 존재하더라도 시작 시 모든 호출이 호출되는 것은 아니므로 특정 함수에 대한 특정 호출이 발생할 수 있습니다. 작동 방식이 변경되었으며 애플리케이션이 이를 지원하지 않아 충돌이 발생했습니다. 이것은 특수한 경우의 시나리오이지만 가능합니다. 따라서 최신 라이브러리와 호환되지 않는지 알 수 있을 것입니다. 그러나 그것은 완전히 또 다른 문제입니다. 이 문제를 해결하려면 새 라이브러리에 적응하거나 이미 설치된 라이브러리를 다운그레이드해야 합니다.

    gcc 설치와 같은 해결 방법을 수행해야 합니까?

    gcc컴파일러입니다. C 또는 C++를 사용하여 코드를 컴파일하는 경우에만 이를 설치해야 합니다. 다른 경우에는 해결 방법이 필요할 수 있지만 gcc컴파일러를 실행 해야 하는 "바이너리"(이미 컴파일된 실행 파일)를 본 적이 없습니다 .

    이 소프트웨어를 실행하는 데 어떤 라이브러리가 필요할 수 있는지 어떻게 알 수 있나요? (또는 패키지 관리자를 통해 제공되지 않는 기타 32비트 소프트웨어)

    약간 잔인하지만 지침에 정확히 어떤 라이브러리가 필요한지 나와 있지 않으면 명령을 사용하십시오 ld-linux.so --list. 예:

    $ /lib64/ld-linux-x86-64.so.2 --list /bin/bash
        linux-vdso.so.1 =>  (0x00007fffd479f000)
        libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f0d39138000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0d38f34000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0d38b6a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f0d3937f000
    

    ( ldd@ubfan 덕분에 바이너리는 동일한 출력을 제공합니다)

    보시다시피 bashlinux-vdso, libtinfo.so, libdl.so 및 libc.so를 사용합니다. 해당 라이브러리가 정확하다면 bash만족할 것입니다. 이것은동적 링크 바이너리. --verify대신 바이너리가 실제로 동적으로 연결되었는지 확인하는 데 사용할 수 있습니다 .

    그런 다음 라이브러리 이름을 사용하여libtinfo.so.5, 패키지에 포함되어 있습니다:

    File                                Packages
    /lib/i386-linux-gnu/libtinfo.so.5   libtinfo5 [not amd64]
    /lib/x86_64-linux-gnu/libtinfo.so.5 libtinfo5 [not i386]
    /lib32/libtinfo.so.5                lib32tinfo5 [not i386]
    /lib64/libtinfo.so.5                lib64tinfo5 [not amd64]
    /usr/lib/debug/libtinfo.so.5        libtinfo5-dbg
    /usr/libx32/libtinfo.so.5           libx32tinfo5
    

    따라서 바이너리 아키텍처에 맞는 올바른 패키지(32비트인 경우 :i386패키지 이름에 64비트를 추가 :amd64)를 설치하기만 하면 됩니다.

    말할 필요도 없이, 32비트 플랫폼에서 64비트 바이너리를 실행하려면 CPU가 64비트를 지원해야 하며(2008년 이후 시스템의 대부분은 지원) 64비트 커널이 설치되어 있어야 할 가능성이 높습니다.

    관련 정보