On 08/28/2018 01:53 PM, Ruslan Kabatsayev wrote:
Hello all,

I was trying to find a way to compile rustc-1.25.0 on an offline
machine. It finally appeared to be possible, and I'd like BLFS to
present this way of compilation (maybe as optional preparation
steps before the current ones).

The changes are as follows.
1. In addition to the rustc-1.25.0-src.tar.gz, we need these tarballs:

https://static.rust-lang.org/dist/2018-02-15/rust-std-1.24.0-i686-unknown-linux-gnu.tar.gz
https://static.rust-lang.org/dist/2018-02-15/rustc-1.24.0-i686-unknown-linux-gnu.tar.gz
https://static.rust-lang.org/dist/2018-02-15/cargo-0.25.0-i686-unknown-linux-gnu.tar.gz

2. Cargo package registry must be fetched into appropriate location.
This can be done with the following commands (requires git):

### BEGIN
mkdir -pv "$HOME/.cargo/registry/index/github.com-1ecc6299db9ec823"
pushd "$HOME/.cargo/registry/index/github.com-1ecc6299db9ec823"
git init .
git fetch --tags https://github.com/rust-lang/crates.io-index 
refs/heads/master:refs/remotes/origin/master
touch .cargo-index-lock
popd
### END

3. We need to download the dependencies – Rust packages AKA crates,
and place them into appropriate location. This can be done using the
following bash commands:

### BEGIN
mkdir -pv "$HOME/.cargo/registry/cache/github.com-1ecc6299db9ec823/"
pushd "$HOME/.cargo/registry/cache/github.com-1ecc6299db9ec823/"
crates=(
   filetime-0.1.15.crate
   textwrap-0.9.0.crate
   languageserver-types-0.31.0.crate
   synom-0.11.3.crate
   unicode-xid-0.0.3.crate
   same-file-0.1.3.crate
   open-1.2.1.crate
   serde_derive-1.0.27.crate
   hamcrest-0.1.1.crate
   syntex_errors-0.52.0.crate
   arrayvec-0.4.7.crate
   syntex_syntax-0.52.0.crate
   num-integer-0.1.35.crate
   percent-encoding-1.0.1.crate
   tempdir-0.3.5.crate
   rls-rustc-0.2.1.crate
   unicode-xid-0.0.4.crate
   debug_unreachable-0.1.1.crate
   rayon-core-1.4.0.crate
   phf_shared-0.7.21.crate
   shared_child-0.2.1.crate
   lazy_static-0.2.11.crate
   commoncrypto-sys-0.2.0.crate
   rustc-ap-rustc_cratesio_shim-29.0.0.crate
   toml-0.4.5.crate
   log-0.3.9.crate
   aho-corasick-0.5.3.crate
   unicode-normalization-0.1.5.crate
   openssl-0.9.23.crate
   lazycell-0.6.0.crate
   kernel32-sys-0.2.2.crate
   phf-0.7.21.crate
   net2-0.2.31.crate
   semver-0.8.0.crate
   getopts-0.2.15.crate
   libgit2-sys-0.6.19.crate
   procedural-masquerade-0.1.5.crate
   aho-corasick-0.6.4.crate
   crossbeam-deque-0.2.0.crate
   termion-1.5.1.crate
   thread_local-0.2.7.crate
   lazy_static-1.0.0.crate
   core-foundation-sys-0.5.1.crate
   tendril-0.4.0.crate
   string_cache_shared-0.3.0.crate
   env_logger-0.5.3.crate
   unicode-bidi-0.3.4.crate
   futf-0.1.3.crate
   semver-parser-0.7.0.crate
   thread_local-0.3.5.crate
   lazycell-0.5.1.crate
   semver-0.6.0.crate
   num-complex-0.1.41.crate
   home-0.3.0.crate
   term-0.4.6.crate
   log_settings-0.1.1.crate
   rls-analysis-0.11.3.crate
   handlebars-0.29.1.crate
   bitflags-0.7.0.crate
   utf8-ranges-1.0.0.crate
   byteorder-1.2.1.crate
   phf_codegen-0.7.21.crate
   miow-0.3.1.crate
   rustc-demangle-0.1.5.crate
   foreign-types-shared-0.1.1.crate
   glob-0.2.11.crate
   env_logger-0.4.3.crate
   winapi-0.2.8.crate
   shell-escape-0.1.3.crate
   xattr-0.1.11.crate
   toml-0.2.1.crate
   synstructure-0.6.1.crate
   yaml-rust-0.3.5.crate
   clap-2.29.0.crate
   num_cpus-1.8.0.crate
   bufstream-0.1.3.crate
   void-1.0.2.crate
   ar-0.3.1.crate
   string_cache_codegen-0.4.0.crate
   ignore-0.4.0.crate
   kuchiki-0.6.0.crate
   quote-0.3.15.crate
   wincolor-0.1.4.crate
   url-1.7.0.crate
   chrono-0.4.0.crate
   regex-0.1.80.crate
   fuchsia-zircon-sys-0.3.3.crate
   rls-data-0.15.0.crate
   cargo_metadata-0.4.0.crate
   rand-0.3.20.crate
   rls-blacklist-0.1.0.crate
   git2-0.6.11.crate
   rls-vfs-0.4.5.crate
   compiletest_rs-0.3.6.crate
   stable_deref_trait-1.0.0.crate
   nodrop-0.1.12.crate
   rustc-ap-rustc_data_structures-29.0.0.crate
   quick-error-1.2.1.crate
   bitflags-0.9.1.crate
   curl-0.4.11.crate
   derive-new-0.5.0.crate
   serde_json-1.0.9.crate
   rustc-serialize-0.3.24.crate
   serde-1.0.27.crate
   pkg-config-0.3.9.crate
   foreign-types-0.3.2.crate
   phf_generator-0.7.21.crate
   html-diff-0.0.6.crate
   ws2_32-sys-0.2.1.crate
   libz-sys-1.0.18.crate
   openssl-sys-0.9.24.crate
   html5ever-0.20.0.crate
   rustc-ap-serialize-29.0.0.crate
   ansi_term-0.10.2.crate
   advapi32-sys-0.2.0.crate
   itoa-0.3.4.crate
   rayon-1.0.0.crate
   selectors-0.18.0.crate
   failure-0.1.1.crate
   memchr-2.0.1.crate
   regex-syntax-0.3.9.crate
   precomputed-hash-0.1.1.crate
   pulldown-cmark-0.1.0.crate
   miow-0.2.1.crate
   smallvec-0.3.3.crate
   quine-mc_cluskey-0.2.4.crate
   xz2-0.1.4.crate
   regex-syntax-0.4.2.crate
   winapi-0.3.4.crate
   nibble_vec-0.0.3.crate
   shlex-0.1.1.crate
   bitflags-1.0.1.crate
   num-traits-0.1.41.crate
   memoffset-0.2.1.crate
   rustc-ap-syntax_pos-29.0.0.crate
   matches-0.1.6.crate
   userenv-sys-0.2.0.crate
   rustfmt-nightly-0.4.0.crate
   winapi-x86_64-pc-windows-gnu-0.4.0.crate
   scoped-tls-0.1.0.crate
   unreachable-0.1.1.crate
   is-match-0.1.0.crate
   failure_derive-0.1.1.crate
   utf-8-0.7.1.crate
   log-0.4.1.crate
   duct-0.8.2.crate
   nix-0.8.1.crate
   crossbeam-utils-0.2.2.crate
   unicode-width-0.1.4.crate
   num-0.1.41.crate
   futures-0.1.17.crate
   endian-type-0.1.2.crate
   libc-0.2.39.crate
   cssparser-0.13.7.crate
   fnv-1.0.6.crate
   itertools-0.7.6.crate
   num-iter-0.1.34.crate
   libssh2-sys-0.2.6.crate
   rls-span-0.4.0.crate
   smallvec-0.6.0.crate
   scopeguard-0.3.3.crate
   time-0.1.39.crate
   backtrace-0.3.5.crate
   pest-0.3.3.crate
   redox_syscall-0.1.37.crate
   siphasher-0.2.2.crate
   regex-0.2.5.crate
   vec_map-0.8.0.crate
   string_cache-0.6.2.crate
   jsonrpc-core-8.0.1.crate
   backtrace-sys-0.1.16.crate
   num-rational-0.1.40.crate
   atty-0.2.6.crate
   vcpkg-0.2.2.crate
   idna-0.1.4.crate
   globset-0.3.0.crate
   if_chain-0.1.2.crate
   same-file-1.0.2.crate
   syntex_pos-0.52.0.crate
   cargo_metadata-0.5.3.crate
   diff-0.1.11.crate
   enum_primitive-0.1.1.crate
   markup5ever-0.5.0.crate
   error-chain-0.11.0.crate
   cmake-0.1.29.crate
   git2-curl-0.7.0.crate
   rustc-ap-syntax-29.0.0.crate
   openssl-probe-0.1.2.crate
   cfg-if-0.1.2.crate
   rustc-ap-rustc_errors-29.0.0.crate
   cargo_metadata-0.2.3.crate
   walkdir-2.0.1.crate
   hex-0.3.1.crate
   fs2-0.4.3.crate
   mdbook-0.1.2.crate
   winapi-i686-pc-windows-gnu-0.4.0.crate
   curl-sys-0.4.1.crate
   tar-0.4.14.crate
   thread-id-2.0.0.crate
   syn-0.11.11.crate
   toml-query-0.6.0.crate
   mac-0.1.1.crate
   unicode-segmentation-1.2.0.crate
   either-1.4.0.crate
   env_logger-0.3.5.crate
   winapi-build-0.1.1.crate
   crossbeam-epoch-0.3.0.crate
   fuchsia-zircon-0.3.3.crate
   owning_ref-0.3.3.crate
   url_serde-0.2.0.crate
   os_pipe-0.5.1.crate
   hex-0.2.0.crate
   docopt-0.8.3.crate
   crossbeam-0.3.2.crate
   termcolor-0.3.3.crate
   parking_lot-0.5.3.crate
   cc-1.0.4.crate
   redox_termios-0.1.1.crate
   itertools-0.6.5.crate
   crypto-hash-0.3.0.crate
   walkdir-1.0.7.crate
   semver-0.9.0.crate
   serde_ignored-0.0.4.crate
   core-foundation-0.5.1.crate
   serde_derive_internals-0.19.0.crate
   error-chain-0.8.1.crate
   num-bigint-0.1.41.crate
   json-0.11.12.crate
   strsim-0.6.0.crate
   radix_trie-0.1.2.crate
   lzma-sys-0.1.9.crate
   cssparser-macros-0.3.0.crate
   pulldown-cmark-0.0.15.crate
   parking_lot_core-0.2.9.crate
   flate2-1.0.1.crate
   memchr-0.1.11.crate
   racer-2.0.12.crate
   jobserver-0.1.9.crate
   miniz-sys-0.1.10.crate
   unreachable-1.0.0.crate
   scopeguard-0.1.2.crate
   dtoa-0.4.2.crate
   schannel-0.1.10.crate
   socket2-0.3.0.crate
   utf8-ranges-0.1.3.crate
   commoncrypto-0.2.0.crate
)
for crate in "${crates[@]}"; do
     # See discussion of API at https://github.com/rust-lang/crates.io/issues/65
     wget --trust-server-names https://crates.io/api/v1/crates/$(sed 
's@\(.*\)-\([^-]\+\)\.crate@\1/\2@' <<< "$crate")/download
done
popd
### END

4. After all these downloads have been done, we can finally do the
(BLFS implied) extraction of rustc-1.25.0-src.tar.gz, cd into the
resulting directory, and from there:

### BEGIN
mkdir -pv build/cache/2018-02-15
ln -sv "$PWD"/../rust-std-1.24.0-i686-unknown-linux-gnu.tar.gz 
build/cache/2018-02-15/
ln -sv "$PWD"/../rustc-1.24.0-i686-unknown-linux-gnu.tar.gz 
build/cache/2018-02-15/
ln -sv "$PWD"/../cargo-0.25.0-i686-unknown-linux-gnu.tar.gz 
build/cache/2018-02-15/
### END

5. After all these steps you no longer need Internet connection, so
you can simply continue as you would following current BLFS
instructions. I've actually built rustc on an offline machine using
these preparations before going offline, and it worked nicely.


Note about DESTDIR: it seems you don't actually have to use this way:
you can simply set HOME environment variable to the normal user's home
directory. Then Cargo should look for its registry and cache in the
same place as while building, so it won't try to download all these
files while installing.

While I appreciate your efforts, I'm afraid that what you propose has too much maintenance effort for the benefit it gives. rust is really a PITA.

  -- Bruce

--
http://lists.linuxfromscratch.org/listinfo/blfs-dev
FAQ: http://www.linuxfromscratch.org/blfs/faq.html
Unsubscribe: See the above information page

Reply via email to