Recently I learned about
amp, a text editor that might lure me away from
vim. Intrigued by the idea, I tried to install it. I really tried, but I couldn’t manage it. I learned that I had some kind of dependency problem that I could solve by using the most recent tools for the Rust programming language.
I don’t want to learn Rust (yet), but I’d like to try
amp as a potential new go-to text editor. I wasn’t in the mood to learn enough about Rust tools to resolve the problem myself, so I posted an issue to github.
Fortunately, nice people gave me reasonable-sounding instructions, so I’m trying them. (Spoiler: they worked on my machine. Read on.)
I’m on Pop!_OS 18.04, which is mostly Ubuntu 18.04. I tried to follow these instructions, and I ended up with a compile error that seems to relate to a dependency version mismatch with
libssh2-sys-0.2.11. And I literally have no idea what that signifies. I understand the individual words, but not the significance of the sentence as a whole.
According to this Rust-related issue, this might signal an out-of-date version of Rust. I assume that whatever version of Rust I have came when I installed
cargo and that puts me out of rocks. I just started using
cargo minutes earlier, so I don’t know how it installs a Rust compiler nor how to change it nor whether somehow, magically, at some point in the past I accidentally installed some out-of-date version of the Rust development environment….
Evidently, since I’d tried to install
cargo through the Ubuntu package manager
apt, I probably got an out-of-date version, which led me to this dependency mismatch. I suppose this illustrates the down side of using package managers with rapidly-evolving software. Since then, I have removed
cargo from my system in the hopes of returning it to its previous state. With luck, I have nothing hanging around that will interfere with installing
amp in the future.
I have gleaned from the comments on my
amp issue the following instructions:
- Install a stable version of Rust using
cargo, and presumably it will use the stable version of Rust that I would have just installed.
cargo install --git https://github.com/jmacdonald/amp, which I’d tried earlier, and which led me to this mess and to writing these words.
So let me try.
Let Me Try
I follow the instructions at https://www.rust-lang.org/en-US/install.html to install
rustup, which seems to be like
sdkman in the Java world,
rvm for Ruby, and so on.
I see a version of Rust from literally 8 days ago. I feel very bleeding-edge.
So I seem to get two for the price of one. I will need to move
$HOME/.cargo to where I store my dotfiles in a git repository and then
stow it. No problem. I will also need to commit changes to my shell profile scripts, so before I continue, let me check that my
dotfiles repository is clean.
Since my dotfiles are clean, I can continue. I can uninstall any time with
rustup self uninstall, so I note that command here in this article so that I might remember where to look for it later.
I continue with the installation using the default options, because—and I can’t stress this enough—I don’t know what I’m doing.
Back in the first shell window, where I’m installing
rustup, I choose Proceed with installation (default) because it is the default, then I see evidence of installing something.
Rust is installed now. Great!
Before I go anywhere and do anything, I commit changes to my dotfiles.
$ cd $DOTFILES_PROJECT_ROOT $ git status -s [I see changes to .profile and .bash_profile, but strangely not .zprofile, so I guess I don't have one. I still don't understand the difference between the profile files and the env files and the rc files.] $ git add -A $ git commit -m "Installed Rust and Cargo with rustup." $ git push offsite-backup $ popd # I have `cd` aliased to `pushd`, so every `cd` is just a `pushd`. I like it.
Next, I add
cargo to my system path.
Next, I move
.cargo to where I track my dotfiles, then
This requires committing new changes to my dotfiles.
$ cd $DOTFILES_PROJECT_ROOT $ git add -n . [I see lots of stuff that probably shouldn't be in git, because I can download it.] $ cd system76-laptop/cargo/.cargo $ vim .gitignore # In .gitignore # Stuff I can download any time registry bin # A nested git repository that I'm not going to track git $ git status -s add 'system76-laptop/cargo/.cargo/.crates.toml' add 'system76-laptop/cargo/.cargo/.gitignore' add 'system76-laptop/cargo/.cargo/env' [MUCH better. That all looks like pure configuration files.] $ git add -A $ git commit -m "We can now stow Cargo." $ git push offsite-backup $ popd # I have `cd` aliased to `pushdga`, so every `cd` is just a `pushd`. I like it. $ ls -al $HOME | grep cargo lrwxrwxrwx 1 jbrains jbrains 70 Sep 21 14:49 .cargo -> $DOTFILES_PROJECT_ROOT/system76-laptop/cargo/.cargo
Now I can try to do something with
Let’s Do Something With
In principle, I should now be able to install
cargo. Let’s see.
$ cargo install --git https://github.com/jmacdonald/amp [...] Compiling gag v0.1.10 Compiling num-traits v0.1.43 Compiling thread-id v2.0.0 error: failed to run custom build command for `onig_sys v68.0.1` process didn't exit successfully: `/tmp/cargo-installES1HqJ/release/build/onig_sys-4b9d7f80a3b9005f/build-script-build` (exit code: 101) --- stdout running: "cmake" "/mnt/extra-space/Workspaces/dotfiles/system76-laptop/cargo/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-68.0.1/oniguruma" "-DBUILD_SHARED_LIBS=OFF" "-DCMAKE_INSTALL_PREFIX=/tmp/cargo-installES1HqJ/release/build/onig_sys-849a1e77a747337f/out" "-DCMAKE_C_FLAGS= -ffunction-sections -fdata-sections -fPIC -m64" "-DCMAKE_C_COMPILER=/usr/bin/cc" "-DCMAKE_CXX_FLAGS= -ffunction-sections -fdata-sections -fPIC -m64" "-DCMAKE_CXX_COMPILER=/usr/bin/c++" "-DCMAKE_BUILD_TYPE=Release" --- stderr thread 'main' panicked at ' failed to execute command: No such file or directory (os error 2) is `cmake` not installed? build script failed, must exit now', /home/jbrains/.cargo/registry/src/github.com-1ecc6299db9ec823/cmake-0.1.31/src/lib.rs:643:5 note: Run with `RUST_BACKTRACE=1` for a backtrace. warning: build failed, waiting for other jobs to finish... error: failed to compile `amp v0.5.0 (https://github.com/jmacdonald/amp#07e6c192)`, intermediate artifacts can be found at `/tmp/cargo-installES1HqJ` Caused by: build failed
cmake not installed?” Let’s see.
Fine. How do I install it, then?
Oh, boy. According to https://www.pyimagesearch.com/2018/05/28/ubuntu-18-04-how-to-install-opencv/, this will take some work.
$ python3 --version Python 3.6.5 [OK.] $ sudo apt-get update $ sudo apt-get upgrade [Installing a handful of libraries, including something related to python. Maybe that's good news?] $ sudo apt-get install build-essential cmake unzip pkg-config [Indeed, cmake was not installed. Now it is installing.]
That wasn’t so bad! Let’s see whether that fixes the entire problem.
This runs for a few minutes. And then it stops. And it appears to work!
All right! Now… how exactly does one use