From 0e2f27713f42779c70e652996a62d96c73a3a16e Mon Sep 17 00:00:00 2001 From: Ana Hobden Date: Fri, 2 Dec 2022 07:30:32 -0800 Subject: [PATCH] Make nix-install.sh script point at a binary (#77) * Make nix-install.sh script point at a binary * feedback suggestions --- nix-install.sh | 240 +++---------------------------------------------- 1 file changed, 10 insertions(+), 230 deletions(-) diff --git a/nix-install.sh b/nix-install.sh index b0e7892..bf34aca 100755 --- a/nix-install.sh +++ b/nix-install.sh @@ -14,7 +14,7 @@ if [ "$KSH_VERSION" = 'Version JM 93t+ 2010-03-05' ]; then # The version of ksh93 that ships with many illumos systems does not # support the "local" extension. Print a message rather than fail in # subtle ways later on: - echo 'rustup does not work with this ksh93 version; please try bash!' >&2 + echo 'harmonic does not work with this ksh93 version; please try bash!' >&2 exit 1 fi @@ -22,34 +22,7 @@ fi set -u # If NIX_INSTALL_UPDATE_ROOT is unset or empty, default it. -NIX_INSTALL_UPDATE_ROOT="${NIX_INSTALL_UPDATE_ROOT:-https://nix-install.determinate.systems/nix-install}" - -#XXX: If you change anything here, please make the same changes in setup_mode.rs -usage() { - cat 1>&2 < Choose a default host triple - --default-toolchain Choose a default toolchain to install - --default-toolchain none Do not install any toolchains - --profile [minimal|default|complete] Choose a profile - -c, --component ... Component name to also install - -t, --target ... Target name to also install -EOF -} +NIX_INSTALL_UPDATE_ROOT="${NIX_INSTALL_UPDATE_ROOT:-https://install.determinate.systems}" main() { downloader --check @@ -71,7 +44,7 @@ main() { ;; esac - local _url="${NIX_INSTALL_UPDATE_ROOT}/dist/${_arch}/nix-install${_ext}" + local _url="${NIX_INSTALL_OVERRIDE_URL-${NIX_INSTALL_UPDATE_ROOT}/harmonic-${_arch}${_ext}}" local _dir if ! _dir="$(ensure mktemp -d)"; then @@ -106,9 +79,9 @@ main() { done if $_ansi_escapes_are_valid; then - printf "\33[1minfo:\33[0m downloading installer\n" 1>&2 + printf "\33[1minfo:\33[0m downloading installer \33[4m%s\33[0m\n" "$_url" 1>&2 else - printf '%s\n' 'info: downloading installer' 1>&2 + printf 'info: downloading installer (%s)\n' "$_url" 1>&2 fi ensure mkdir -p "$_dir" @@ -150,61 +123,10 @@ check_proc() { fi } -get_bitness() { - need_cmd head - # Architecture detection without dependencies beyond coreutils. - # ELF files start out "\x7fELF", and the following byte is - # 0x01 for 32-bit and - # 0x02 for 64-bit. - # The printf builtin on some shells like dash only supports octal - # escape sequences, so we use those. - local _current_exe_head - _current_exe_head=$(head -c 5 /proc/self/exe ) - if [ "$_current_exe_head" = "$(printf '\177ELF\001')" ]; then - echo 32 - elif [ "$_current_exe_head" = "$(printf '\177ELF\002')" ]; then - echo 64 - else - err "unknown platform bitness" - fi -} - -is_host_amd64_elf() { - need_cmd head - need_cmd tail - # ELF e_machine detection without dependencies beyond coreutils. - # Two-byte field at offset 0x12 indicates the CPU, - # but we're interested in it being 0x3E to indicate amd64, or not that. - local _current_exe_machine - _current_exe_machine=$(head -c 19 /proc/self/exe | tail -c 1) - [ "$_current_exe_machine" = "$(printf '\076')" ] -} - -get_endianness() { - local cputype=$1 - local suffix_eb=$2 - local suffix_el=$3 - - # detect endianness without od/hexdump, like get_bitness() does. - need_cmd head - need_cmd tail - - local _current_exe_endianness - _current_exe_endianness="$(head -c 6 /proc/self/exe | tail -c 1)" - if [ "$_current_exe_endianness" = "$(printf '\001')" ]; then - echo "${cputype}${suffix_el}" - elif [ "$_current_exe_endianness" = "$(printf '\002')" ]; then - echo "${cputype}${suffix_eb}" - else - err "unknown platform endianness" - fi -} - get_architecture() { - local _ostype _cputype _bitness _arch _clibtype + local _ostype _cputype _arch _ostype="$(uname -s)" _cputype="$(uname -m)" - _clibtype="gnu" if [ "$_ostype" = Linux ]; then if [ "$(uname -o)" = Android ]; then @@ -241,39 +163,13 @@ get_architecture() { fi case "$_ostype" in - - Android) - _ostype=linux-android - ;; - Linux) check_proc - _ostype=unknown-linux-$_clibtype - _bitness=$(get_bitness) - ;; - - FreeBSD) - _ostype=unknown-freebsd - ;; - - NetBSD) - _ostype=unknown-netbsd - ;; - - DragonFly) - _ostype=unknown-dragonfly + _ostype=linux ;; Darwin) - _ostype=apple-darwin - ;; - - illumos) - _ostype=unknown-illumos - ;; - - MINGW* | MSYS* | CYGWIN* | Windows_NT) - _ostype=pc-windows-gnu + _ostype=darwin ;; *) @@ -283,36 +179,6 @@ get_architecture() { esac case "$_cputype" in - - i386 | i486 | i686 | i786 | x86) - _cputype=i686 - ;; - - xscale | arm) - _cputype=arm - if [ "$_ostype" = "linux-android" ]; then - _ostype=linux-androideabi - fi - ;; - - armv6l) - _cputype=arm - if [ "$_ostype" = "linux-android" ]; then - _ostype=linux-androideabi - else - _ostype="${_ostype}eabihf" - fi - ;; - - armv7l | armv8l) - _cputype=armv7 - if [ "$_ostype" = "linux-android" ]; then - _ostype=linux-androideabi - else - _ostype="${_ostype}eabihf" - fi - ;; - aarch64 | arm64) _cputype=aarch64 ;; @@ -320,105 +186,19 @@ get_architecture() { x86_64 | x86-64 | x64 | amd64) _cputype=x86_64 ;; - - mips) - _cputype=$(get_endianness mips '' el) - ;; - - mips64) - if [ "$_bitness" -eq 64 ]; then - # only n64 ABI is supported for now - _ostype="${_ostype}abi64" - _cputype=$(get_endianness mips64 '' el) - fi - ;; - - ppc) - _cputype=powerpc - ;; - - ppc64) - _cputype=powerpc64 - ;; - - ppc64le) - _cputype=powerpc64le - ;; - - s390x) - _cputype=s390x - ;; - riscv64) - _cputype=riscv64gc - ;; - loongarch64) - _cputype=loongarch64 - ;; *) err "unknown CPU type: $_cputype" + ;; esac - # Detect 64-bit linux with 32-bit userland - if [ "${_ostype}" = unknown-linux-gnu ] && [ "${_bitness}" -eq 32 ]; then - case $_cputype in - x86_64) - if [ -n "${RUSTUP_CPUTYPE:-}" ]; then - _cputype="$RUSTUP_CPUTYPE" - else { - # 32-bit executable for amd64 = x32 - if is_host_amd64_elf; then { - echo "This host is running an x32 userland; as it stands, x32 support is poor," 1>&2 - echo "and there isn't a native toolchain -- you will have to install" 1>&2 - echo "multiarch compatibility with i686 and/or amd64, then select one" 1>&2 - echo "by re-running this script with the RUSTUP_CPUTYPE environment variable" 1>&2 - echo "set to i686 or x86_64, respectively." 1>&2 - echo 1>&2 - echo "You will be able to add an x32 target after installation by running" 1>&2 - echo " rustup target add x86_64-unknown-linux-gnux32" 1>&2 - exit 1 - }; else - _cputype=i686 - fi - }; fi - ;; - mips64) - _cputype=$(get_endianness mips '' el) - ;; - powerpc64) - _cputype=powerpc - ;; - aarch64) - _cputype=armv7 - if [ "$_ostype" = "linux-android" ]; then - _ostype=linux-androideabi - else - _ostype="${_ostype}eabihf" - fi - ;; - riscv64gc) - err "riscv64 with 32-bit userland unsupported" - ;; - esac - fi - - # Detect armv7 but without the CPU features Rust needs in that build, - # and fall back to arm. - # See https://github.com/rust-lang/rustup.rs/issues/587. - if [ "$_ostype" = "unknown-linux-gnueabihf" ] && [ "$_cputype" = armv7 ]; then - if ensure grep '^Features' /proc/cpuinfo | grep -q -v neon; then - # At least one processor does not have NEON. - _cputype=arm - fi - fi - _arch="${_cputype}-${_ostype}" RETVAL="$_arch" } say() { - printf 'rustup: %s\n' "$1" + printf 'harmonic: %s\n' "$1" } err() {