Linux Azure VM에서 cloud-init를 사용하여 Rust 도구 체인 관리 설치
동기 부여
현재 프로젝트 중 하나를 위해 Windows의 Visual Studio Code에서 Linux Azure VM으로 원격 SSH 개발을 수행합니다.
build structure and performance requirements prevent me from using local WSL or GitHub Codespaces
이러한 경우에 대해 재현 가능한 환경을 얻으려면 일반적으로 cloud-init support for virtual machines in Azure을 사용합니다. VM 이미징 또는 Ansible과 같은 다른 도구를 사용하는 것은 여전히 이 간단한 요구 사항에 비해 너무 많을 것입니다.
그러나 rustup / Rust Toolchain management을 Docker와 같은 자동화 프로세스 중에 설치하거나 제 경우에는 cloud-init을 설치하는 경우 해당 설치는 일반적으로 루트 컨텍스트에서 실행되며 대상 사용자는 rustup에 액세스할 수 없거나 사용할 수 없습니다.
이것이 당신이 직접 재사용할 수 없는 엣지 케이스라는 것을 알고 있기 때문에, 나는 여전히 거기에서 찾기 쉽지 않은 몇 가지 측면을 공유하고 싶었습니다. multi-user rustup installation 또는 cloud-init 내 사용자 컨텍스트 처리 .
as cloud-init is primarily used to bring up plain server systems in the cloud, multi user considerations surely are not that relevant
클라우드 초기화.txt
이
cloud-init.txt
는 Ubuntu 22.04 기반 VM에 맞게 조정되었습니다. 이것은 기본적으로 rustup 툴체인을 설치한 다음 나중에 시스템에 SSH로 연결하는 데 사용하는 대상 사용자가 사용할 수 있도록 합니다.#cloud-config
package_upgrade: true
packages:
- apt-transport-https
- build-essential
- cmake
runcmd:
- export USER=$(awk -v uid=1000 -F":" '{ if($3==uid){print $1} }' /etc/passwd)
- export RUSTUP_HOME=/opt/rust
- export CARGO_HOME=/opt/rust
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s -- -y --no-modify-path --default-toolchain stable --profile default
- echo '\n\n# added by cloud init\nsource /opt/rust/env' >> /home/$USER/.profile
- sudo -H -u $USER bash -c 'source /opt/rust/env && rustup default stable'
필수 부분을 분석해 보겠습니다.
cloud-init 중에 VM의 관리 사용자를 결정합니다.
The user name, which is put on the Azure VM, is controlled by a configuration like this e.g. in Bicep
osProfile: {
computerName: computerName
adminUsername: adminUsername
adminPassword: adminPasswordOrKey
customData: base64(customData)
linuxConfiguration: ((authenticationType == 'password') ? json('null') : linuxConfiguration)
}
but is not available during cloud-init. So with this line below, the username of this user is obtained and put into an environment variable for later use:
- export USER=$(awk -v uid=1000 -F":" '{ if($3==uid){print $1} }' /etc/passwd)
it is assumed that the first user created on the Azure VM will get uid 1000
Rustup 툴체인 설치
다음 명령문을 통해 도구 체인은 나중에 사용자가 액세스할 수 있는 폴더에 설치됩니다.
- export RUSTUP_HOME=/opt/rust
- export CARGO_HOME=/opt/rust
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s -- -y --no-modify-path --default-toolchain stable --profile default
--default-toolchain stable --profile default
- although not directly required during root user installation, it helps controlling the unattended installation and avoiding warnings
대상 사용자를 위한 툴체인 PATH 추가
툴체인을
PATH
에 넣기 위해 사용자의 .profile
가 확장됩니다.- echo '\n\n# added by cloud init\nsource /opt/rust/env' >> /home/$USER/.profile
$USER
is determined above
대상 사용자를 위한 툴체인 설치
위의 섹션은 일반적으로 사용자가 도구 체인을 사용할 수 있도록 하며, 이 줄은 사용자를 위한 기본 프로필을 설치합니다.
- sudo -H -u $USER bash -c 'source /opt/rust/env && rustup default stable'
sudo -H -u $USER
는 대상 사용자bash -c
로 지정된 명령을 실행합니다.위의
source /opt/rust/env
에 대한 추가가 현재 PATH
가 필요합니다.하지만 잠깐만 더...
$USER
환경 변수도 사용할 수 있습니다. VM에 Docker를 설치하고 사용자를 docker
그룹의 구성원으로 만들 때docker-buildx
를 VM에 자동으로 추가하는 방법#cloud-config
package_upgrade: true
packages:
- apt-transport-https
- jq
- build-essential
- cmake
- libssl-dev
- openssl
- unzip
- pkg-config
runcmd:
- export USER=$(awk -v uid=1000 -F":" '{ if($3==uid){print $1} }' /etc/passwd)
- export RUSTUP_HOME=/opt/rust
- export CARGO_HOME=/opt/rust
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s -- -y --no-modify-path --default-toolchain stable --profile default
- echo '\n\n# added by cloud init\nsource /opt/rust/env' >> /home/$USER/.profile
- sudo -H -u $USER bash -c 'source /opt/rust/env && rustup default stable'
- curl -fsSL https://get.docker.com -o get-docker.sh
- sudo sh get-docker.sh
- sudo usermod -aG docker $USER
- wget -q -O /usr/libexec/docker/cli-plugins/docker-buildx $(curl -s https://api.github.com/repos/docker/buildx/releases/latest | jq -r ".assets[] | select(.name | test(\"linux-amd64\")) | .browser_download_url")
- chmod u+x /usr/libexec/docker/cli-plugins/docker-buildx
- curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
이와 같은 단일 덩어리가 이 커뮤니티에 게시하는 것이 합당한지 알려주세요.
Reference
이 문제에 관하여(Linux Azure VM에서 cloud-init를 사용하여 Rust 도구 체인 관리 설치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kaiwalter/install-rust-toolchain-management-with-cloud-init-on-an-linux-azure-vm-2o51텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)