SSH를 통해 컴파일을 오프로드하시겠습니까?

SSH를 통해 컴파일을 오프로드하시겠습니까?

나는 해킹된 Chromebook을 가지고 있고 거기에서 Gentoo를 실행하고 있습니다. 컴파일하려고 하면아무것, CPU 사용량이 100%로 급증하고, 온도가 섭씨 10도 정도 올라가고, 배터리 사용량이 급증(4.XW -> 10W)하는데 이는 느린 프로세스입니다. 하지만 SSH를 통해 연결할 수 있는 실행 중인 Arch Linux 시스템도 있습니다. 둘 다 x86_64 CPU입니다. SSH를 통해 콘텐츠 편집(Linux 커널, 일일 패키지 등)을 Arch Linux 시스템으로 오프로드할 수 있는 방법이 있습니까? 나는 전에 이런 일을 한 적이 없습니다. 어쩌면 크로스 컴파일이 필요할 수도 있습니다.

답변1

아니요, 크로스 컴파일할 필요는 없습니다. (다른 아키텍처를 대상으로 하는 경우 필요합니다.) 이를 수행하기 위해 시스템을 설정하는 두 가지 방법을 생각할 수 있습니다.

  1. 사용 distcc. 이것루트 다이어그램그리고아치스 위키프로그램을 설치하고 구성하는 방법은 잘 설명되어 있으므로 여기에 전체 내용을 복사하지는 않겠습니다. 즉, 작동하려면 다음을 설정해야 합니다.

    • 당신 CFLAGS/etc/portage/make.conf 기필코 아니다또는 원격 컴퓨터는 로컬 컴퓨터가 march=native아닌 mtune=native"기본" CPU 개념을 사용하기 때문입니다. "네이티브"를 사용하는 경우 사용할 플래그를 알아보세요.다음을 실행하여:

      $ gcc -v -E -x c -march=native -mtune=native - < /dev/null 2>&1 | grep cc1 | perl -pe 's/^.* - //g;'
      
    • 두 컴퓨터 모두 동일한 컴파일러 및 binutils 버전이 필요합니다.

    • 두 컴퓨터 모두 distcc설치, 구성 및 실행되어야 합니다.
  2. chrootArch 시스템의 환경과 Chromebook 파일 시스템의 복사본을 사용하십시오 (Gentoo를 설치하는 것처럼 resolv.confArch 설치에서 복사하고 각각에 적절한 파일 시스템을 마운트하십시오).젠투 설치 매뉴얼/dev/shm, Arch 버전이 심볼릭 링크인지 여부에 대한 경고를 기억하세요 . ) Chromebook 환경과 최대한 가까워야 합니다. 그렇지 않으면 복사본을 만들 때 잘못된 바이너리가 생성될 수 있으므로 더 적은 수의 패키지를 다시 빌드해야 합니다. 이 환경 내부:

    • 에 추가하세요.FEATURES="buildpkg"/etc/portage/make.conf
    • 생성된 패키지는 에 있습니다 /usr/portage/packages. 이 방법으로 커널을 컴파일할 수도 있습니다. 생성된 커널과 해당 /lib/modules디렉터리를 Chromebook에 복사하기만 하면 됩니다. (이 디렉토리 위치는 chroot에 상대적이라는 점을 기억하십시오!) Wiki에서는 파일을 수동으로 복사할 필요가 없도록 NFS 또는 다른 서버를 설치할 것을 권장합니다. 이는 Arch 시스템에서 올바르게 설정할 수 있습니다. 저는 rsyncd이 목적을 위해 설정하고 싶지만 파일에 액세스하려면 원하는 방법을 사용하세요.

    Chromebook에서:

    • 로컬로 컴파일되는 것을 방지하려면 에 추가하세요 FEATURES="getbinpkg"./etc/portage/make.conf
    • 원격 파일 액세스를 사용하는 경우 에 추가 PORTAGE_BINHOST="protocol://path/to/your/chroot/usr/portage/packages"하세요 /etc/portage/make.conf.

    보다젠투 위키의 바이너리 패키징 가이드더 많은 정보를 알고 싶습니다.

나는 이전에 이 두 가지 방법을 모두 사용해 본 적이 있으며 잘 작동했습니다. 두 가지 접근 방식에 대한 내 관찰은 다음과 같습니다.

  1. distcc양쪽에 동일한 설정이 있어도 작업하기가 까다롭습니다. gcc버전을 binutils동일하게 유지하는 것이 가장 큰 과제가 될 것입니다. 그러나 일단 시작하면 꽤 빠르며 충분히 빠른 추가 컴퓨터가 있으면 추가할 수 있습니다.

  2. 환경은 chroot그다지 까다롭지 않지만 포티지 환경의 일부( CFLAGS, USE플래그, 마스크, 구성 파일 등)를 변경하는 경우 양쪽이 일관성이 있는지 확인해야 합니다. 그렇지 않으면 패키지로 끝날 수 있습니다. 잘못된 종속성이 있습니다. 젠투는 USE 플래그가 일치하는지 확인하는 일을 훌륭하게 수행하지만 바이너리 패키지의 컴파일러 옵션을 추적하지는 않습니다. 한 가지 장점은 컴파일을 위해 Chromebook의 디스크 공간과 메모리(부족)로 인해 제한을 받지 않는다는 것입니다.

해당 접근 방식을 사용하려면 chroot설정에 필요한 모든 지루한 작업을 수행하는 스크립트를 작성하겠습니다( /mnt/gentoochroot 위치 대체).

cp -L /etc/resolv.conf /mnt/gentoo/etc
mount -t proc proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
chroot /mnt/gentoo /bin/bash
umount -R /mnt/gentoo/dev
umount -R /mnt/gentoo/sys
umount /mnt/gentoo/proc

답변2

허용된 답변에서 영감을 얻었지만 댓글이 너무 많습니다.

우수한크롬 북, 시스템 마운트 지점에서 루트 파일 시스템을 분리 합니다 /dev./sys/run

mount -o bind / /mnt/gentoo
# If neccesary
mount -o bind /boot /mnt/gentoo/boot
mount -o bind /usr /mnt/gentoo/usr

위치 /etc/exports: /mnt/gentoo 192.168.0.2 (rw, sync, nohide, no_root_squash)

커널이 NFS를 통한 내보내기를 지원하는지 확인하세요. 관련 서비스를 시작합니다. ( nfsd)

우수한아치리눅스상자, /etc/fstab:

# You might need to tune mount options for performance.
192.168.0.3:/mnt/gentoo   /mnt/gentoo   nfs   defaults 0 0

Arch 측( netmount또는 )에서 nfs올바른 서비스가 시작되었는지 확인하세요. 원격 파일 시스템이 성공적으로 마운트되었는지 확인합니다.

resolv.confErikF에서 우아하게 훔쳤습니다( 실행 중인 시스템에 이미 있으므로 복사하지 마세요 ):

mount -t proc proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
chroot /mnt/gentoo /bin/bash
umount -R /mnt/gentoo/dev
umount -R /mnt/gentoo/sys
umount /mnt/gentoo/proc

/etc/portage/make.conf설정이 올바른지 확인하세요 . -march아니요 native!

이제 emerge원하는 대로 실행하면 모든 것이 크롬북의 rootfs에 직접 설치됩니다.

중요한 팁:이 답변을 흥미로워 보이는 가능성으로 추가했습니다. 아직 테스트되지 않았습니다. 또한 루트 파일 시스템(rw, no_root_squash)을 내보내면 IT 보안을 존중하는 사람이라면 누구나 소름끼칠 것입니다. 따라서 매우 신뢰할 수 있는 네트워크에서만 이 작업을 수행하십시오!

관련 정보