Windowsでexaを使う

最近メインPCをWindows11にしました。ナナオです。 cargoなどの初期セットアップがだいぶ終わって作業しやすくなってきましたが、lsの高速版であるexaを入れようとしたら詰まったので備忘録を残しておこうと思います。 exaのインストール Windows以外であれば以下のコマンドでインストールは終わります。 cargo install exa ただし、exaはまだ正式にWindows版をリリースしていないため、同じ事をwindowsでやるとエラーになります。 (以下は実際のエラー) > cargo install exa Updating crates.io index Downloaded exa v0.10.1 Downloaded 1 crate (136.6 KB) in 1.23s Installing exa v0.10.1 Updating crates.io index Downloaded number_prefix v0.4.0 Downloaded users v0.11.0 Downloaded term_size v0.3.2 Downloaded byteorder v1.5.0 Downloaded ansi_term v0.12.1 Downloaded scoped_threadpool v0.1.9 Downloaded jobserver v0.1.27 Downloaded libgit2-sys v0.12.26+1.3.0 Downloaded natord v1.0.9 Downloaded term_grid v0.1.7 Downloaded zoneinfo_compiled v0.5.1 Downloaded locale v0.2.2 Downloaded pad v0.1.6 Downloaded datetime v0.5.2 Downloaded git2 v0.13.25 Downloaded 15 crates (1.9 MB) in 1.29s (largest was `libgit2-sys` at 1.5 MB) Compiling libc v0.2.149 Compiling winapi v0.3.9 Compiling jobserver v0.1.27 Compiling pkg-config v0.3.27 Compiling vcpkg v0.2.15 Compiling tinyvec_macros v0.1.1 Compiling unicode-width v0.1.11 Compiling unicode-bidi v0.3.13 Compiling percent-encoding v2.3.0 Compiling log v0.4.20 Compiling bitflags v1.3.2 Compiling byteorder v1.5.0 Compiling glob v0.3.1 Compiling num_cpus v1.16.0 Compiling number_prefix v0.4.0 Compiling natord v1.0.9 Compiling scoped_threadpool v0.1.9 Compiling lazy_static v1.4.0 Compiling tinyvec v1.6.0 Compiling pad v0.1.6 Compiling term_grid v0.1.7 Compiling form_urlencoded v1.2.0 Compiling cc v1.0.83 Compiling locale v0.2.2 Compiling users v0.11.0 error[E0433]: failed to resolve: could not find `unix` in `os` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:36:14 | 36 | use std::os::unix::ffi::OsStrExt; | ^^^^ could not find `unix` in `os` error[E0432]: unresolved imports `libc::uid_t`, `libc::gid_t` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\lib.rs:128:16 | 128 | pub use libc::{uid_t, gid_t}; | ^^^^^ ^^^^^ no `gid_t` in the root | | | no `uid_t` in the root error[E0432]: unresolved imports `libc::uid_t`, `libc::gid_t` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:45:20 | 45 | use libc::{c_char, uid_t, gid_t, c_int}; | ^^^^^ ^^^^^ no `gid_t` in the root | | | no `uid_t` in the root | = help: consider importing this unresolved item through its public re-export instead: uid_t = help: consider importing this unresolved item through its public re-export instead: gid_t error[E0432]: unresolved import `libc::passwd` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:46:5 | 46 | use libc::passwd as c_passwd; | ^^^^^^^^^^^^^^^^^^^^^^^^ no `passwd` in the root error[E0432]: unresolved import `libc::group` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:47:5 | 47 | use libc::group as c_group; | ^^^^^^^^^^^^^^^^^^^^^^ no `group` in the root error[E0432]: unresolved imports `libc::uid_t`, `libc::gid_t` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\cache.rs:87:12 | 87 | use libc::{uid_t, gid_t}; | ^^^^^ ^^^^^ no `gid_t` in the root | | | no `uid_t` in the root | = help: consider importing this unresolved item through its public re-export instead: uid_t = help: consider importing this unresolved item through its public re-export instead: gid_t error[E0432]: unresolved imports `libc::uid_t`, `libc::gid_t` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\mock.rs:63:16 | 63 | pub use libc::{uid_t, gid_t}; | ^^^^^ ^^^^^ no `gid_t` in the root | | | no `uid_t` in the root | = help: consider importing this unresolved item through its public re-export instead: uid_t = help: consider importing this unresolved item through its public re-export instead: gid_t error[E0432]: unresolved imports `libc::uid_t`, `libc::gid_t` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\switch.rs:4:12 | 4 | use libc::{uid_t, gid_t, c_int}; | ^^^^^ ^^^^^ no `gid_t` in the root | | | no `uid_t` in the root | = help: consider importing this unresolved item through its public re-export instead: uid_t = help: consider importing this unresolved item through its public re-export instead: gid_t error[E0432]: unresolved imports `libc::uid_t`, `libc::gid_t` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\traits.rs:4:12 | 4 | use libc::{uid_t, gid_t}; | ^^^^^ ^^^^^ no `gid_t` in the root | | | no `uid_t` in the root | = help: consider importing this unresolved item through its public re-export instead: uid_t = help: consider importing this unresolved item through its public re-export instead: gid_t error[E0433]: failed to resolve: could not find `UserExtras` in `os` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:78:26 | 78 | let extras = os::UserExtras::default(); | ^^^^^^^^^^ could not find `UserExtras` in `os` error[E0433]: failed to resolve: could not find `GroupExtras` in `os` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:192:26 | 192 | let extras = os::GroupExtras::default(); | ^^^^^^^^^^^ could not find `GroupExtras` in `os` error[E0433]: failed to resolve: could not find `UserExtras` in `os` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:266:28 | 266 | extras: os::UserExtras::from_passwd(passwd), | ^^^^^^^^^^ could not find `UserExtras` in `os` error[E0433]: failed to resolve: could not find `GroupExtras` in `os` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:280:23 | 280 | extras: os::GroupExtras::from_struct(group), | ^^^^^^^^^^^ could not find `GroupExtras` in `os` error[E0412]: cannot find type `UserExtras` in module `os` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:57:17 | 57 | extras: os::UserExtras, | ^^^^^^^^^^ not found in `os` | note: found an item that was configured out --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:1176:14 | 1176 | pub type UserExtras = bsd::UserExtras; | ^^^^^^^^^^ note: found an item that was configured out --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:1180:14 | 1180 | pub type UserExtras = unix::UserExtras; | ^^^^^^^^^^ error[E0412]: cannot find type `GroupExtras` in module `os` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:171:17 | 171 | extras: os::GroupExtras, | ^^^^^^^^^^^ not found in `os` | note: found an item that was configured out --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:1184:14 | 1184 | pub type GroupExtras = unix::GroupExtras; | ^^^^^^^^^^^ error[E0425]: cannot find function `getpwuid_r` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:336:19 | 336 | libc::getpwuid_r(uid, &mut passwd, buf.as_mut_ptr(), buf.len(), &mut result) | ^^^^^^^^^^ not found in `libc` error[E0425]: cannot find function `getpwnam_r` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:398:19 | 398 | libc::getpwnam_r(username.as_ptr(), &mut passwd, buf.as_mut_ptr(), buf.len(), &mut result) | ^^^^^^^^^^ not found in `libc` error[E0425]: cannot find function `getgrgid_r` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:451:19 | 451 | libc::getgrgid_r(gid, &mut passwd, buf.as_mut_ptr(), buf.len(), &mut result) | ^^^^^^^^^^ not found in `libc` error[E0425]: cannot find function `getgrnam_r` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:513:19 | 513 | libc::getgrnam_r(groupname.as_ptr(), &mut group, buf.as_mut_ptr(), buf.len(), &mut result) | ^^^^^^^^^^ not found in `libc` error[E0425]: cannot find function `getuid` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:556:20 | 556 | unsafe { libc::getuid() } | ^^^^^^ help: a function with a similar name exists: `getpid` | ::: C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\libc-0.2.149\src\windows\mod.rs:491:5 | 491 | pub fn getpid() -> ::c_int; | -------------------------- similarly named function `getpid` defined here error[E0425]: cannot find function `geteuid` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:603:20 | 603 | unsafe { libc::geteuid() } | ^^^^^^^ help: a function with a similar name exists: `getpid` | ::: C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\libc-0.2.149\src\windows\mod.rs:491:5 | 491 | pub fn getpid() -> ::c_int; | -------------------------- similarly named function `getpid` defined here error[E0425]: cannot find function `getgid` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:647:20 | 647 | unsafe { libc::getgid() } | ^^^^^^ help: a function with a similar name exists: `getpid` | ::: C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\libc-0.2.149\src\windows\mod.rs:491:5 | 491 | pub fn getpid() -> ::c_int; | -------------------------- similarly named function `getpid` defined here error[E0425]: cannot find function `getegid` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:691:20 | 691 | unsafe { libc::getegid() } | ^^^^^^^ help: a function with a similar name exists: `getpid` | ::: C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\libc-0.2.149\src\windows\mod.rs:491:5 | 491 | pub fn getpid() -> ::c_int; | -------------------------- similarly named function `getpid` defined here error[E0425]: cannot find function `getgroups` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:745:15 | 745 | libc::getgroups(1024, buff.as_mut_ptr()) | ^^^^^^^^^ not found in `libc` error[E0425]: cannot find value `buff` in this scope --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:783:21 | 783 | let mut count = buff.len() as c_int; | ^^^^ not found in this scope error[E0425]: cannot find value `res` in this scope --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:799:8 | 799 | if res < 0 { | ^^^ not found in this scope error[E0425]: cannot find value `buff` in this scope --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:803:9 | 803 | buff.dedup(); | ^^^^ not found in this scope error[E0425]: cannot find value `buff` in this scope --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:804:9 | 804 | buff.into_iter() | ^^^^ not found in this scope error[E0425]: cannot find function `setpwent` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:858:11 | 858 | libc::setpwent(); | ^^^^^^^^ not found in `libc` error[E0425]: cannot find function `endpwent` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:873:24 | 873 | unsafe { libc::endpwent() }; | ^^^^^^^^ not found in `libc` error[E0425]: cannot find function `getpwent` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:890:37 | 890 | let result = unsafe { libc::getpwent() }; | ^^^^^^^^ not found in `libc` error[E0425]: cannot find function `setuid` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\switch.rs:41:26 | 41 | match unsafe { libc::setuid(uid) } { | ^^^^^^ help: a function with a similar name exists: `getpid` | ::: C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\libc-0.2.149\src\windows\mod.rs:491:5 | 491 | pub fn getpid() -> ::c_int; | -------------------------- similarly named function `getpid` defined here error[E0425]: cannot find function `setgid` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\switch.rs:72:26 | 72 | match unsafe { libc::setgid(gid) } { | ^^^^^^ help: a function with a similar name exists: `getpid` | ::: C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\libc-0.2.149\src\windows\mod.rs:491:5 | 491 | pub fn getpid() -> ::c_int; | -------------------------- similarly named function `getpid` defined here error[E0425]: cannot find function `seteuid` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\switch.rs:103:26 | 103 | match unsafe { libc::seteuid(uid) } { | ^^^^^^^ not found in `libc` error[E0425]: cannot find function `setegid` in crate `libc` --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\switch.rs:134:26 | 134 | match unsafe { libc::setegid(gid) } { | ^^^^^^^ not found in `libc` error[E0599]: no function or associated item named `from_bytes` found for struct `OsStr` in the current scope --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:252:20 | 252 | T::from(OsStr::from_bytes(CStr::from_ptr(p).to_bytes())) | ^^^^^^^^^^ function or associated item not found in `OsStr` error[E0599]: no method named `as_bytes` found for reference `&OsStr` in the current scope --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:380:57 | 380 | let username = match CString::new(username.as_ref().as_bytes()) { | ^^^^^^^^ method not found in `&OsStr` Compiling unicode-normalization v0.1.22 error[E0599]: no method named `as_bytes` found for reference `&OsStr` in the current scope --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:495:59 | 495 | let groupname = match CString::new(groupname.as_ref().as_bytes()) { | ^^^^^^^^ method not found in `&OsStr` error[E0599]: no method named `as_bytes` found for reference `&OsStr` in the current scope --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\base.rs:782:47 | 782 | let name = CString::new(username.as_ref().as_bytes()).unwrap(); | ^^^^^^^^ method not found in `&OsStr` error[E0282]: type annotations needed --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\cache.rs:207:43 | 207 | Occupied(e) => return e.get().as_ref().map(Arc::clone), | ^^^^^^ cannot infer type for type parameter `V` error[E0282]: type annotations needed --> C:\Users\Nanao\.cargo\registry\src\index.crates.io-6f17d22bba15001f\users-0.11.0\src\cache.rs:288:43 | 288 | Occupied(e) => return e.get().as_ref().map(Arc::clone), | ^^^^^^ cannot infer type for type parameter `V` Some errors have detailed explanations: E0282, E0412, E0425, E0432, E0433, E0599. For more information about an error, try `rustc --explain E0282`. error: could not compile `users` (lib) due to 41 previous errors warning: build failed, waiting for other jobs to finish... error: failed to compile `exa v0.10.1`, intermediate artifacts can be found at `C:\Users\Nanao\AppData\Local\Temp\cargo-installiJkMjV`. To reuse those artifacts with a future compilation, set the environment variable `CARGO_TARGET_DIR` to that path. C:\Users\Nanao\Project\study\proc-macro-workshop\builder>cargo install libc Updating crates.io index error: there is nothing to install in `libc v0.2.149`, because it has no binaries `cargo install` is only for installing programs, and can't be used with libraries. To use a library crate, add it as a dependency to a Cargo project with `cargo add`. とまあこんな感じなので、バックドア的な方法でインストールしてあげる必要があります。 ...

October 29, 2023 · にあえん

一般的なエンジニアがやるであろうWindowsインストール後のセットアップについて

最近、デスクトップPCのUbuntuがめちゃくちゃ調子が悪くなってしまったのと、確定申告を行うにあたって電子申告にLinuxが対応していないようなので、「ええい!もうUbuntuなんてこりごりでい!」ということでWindowsに載せ替えました。 まっさらな状態からセットアップを行っていくにあたって、備忘録も兼ねて文章に残しておこうと思います。 Braveのインストール Edgeがいくら使いやすくなったとて、今まで使っていたブラウザがBraveで同期などもしたかったのでインストールしました。 標準ブラウザじゃ話にならんので 開発環境周りの整備 ここら辺はパッケージマネージャーを活用しようと思い、Windows用のパッケージマネージャーならChocolateyとかかな…と思ってたんですが、いつの間にやら標準でパッケージマネージャーが搭載されるようになっていたようです。 Windowsのパッケージマネージャー「winget」を使ってみた | DevelopersIO これがまーーーーー素晴らしい。 例えば、VSCodeなら以下のコマンドで一発で導入できます。 winget install "Microsoft Visual Studio Code" ね?簡単でしょう? Rustのインストールも楽々できます。 winget install "Rustlang.Rustup" あまりにも素晴らしすぎる。 ちなみに、wingetからChocolateyのインストールもできます。 winget install Chocolatey Chocolateyのインストール後は再起動が必要なため、すぐには使用できません。 再起動後、コマンドが有効になっているか確認します。 > choco Chocolatey v2.2.2 Please run 'choco -?' or 'choco <command> -?' for help menu. うーん、なんかここまで楽だと逆に手ごたえがないですね。もちろんいい意味で。 そしてDockerもインストールしておきます。何でもできるなこれ。 winget install Docker.DockerDesktop こちらもインストール後は再起動が必要です。 WSLのセットアップ WSLはMicrosoft StoreからUbuntuをダウンロードしました。 wingetからでもダウンロードできます。 Ubuntu 22.04をインストールしたければ以下のコマンドで可能です。 (ほんとなんでもできるなこいつ) winget install Canonical.Ubuntu.2204 このインストールには結構時間がかかりますが、のんびり行きましょう。 あとターミナルですが、これもWindowsが提供してるやつがあるので使いましょう。 前にも使ったことがありますが、WSL、CMD、PowerShellを横断的に使えるので便利ですよ。(あと一応オフィシャルだから安心感ある) ほんでこれもwingetが使えます。 winget install Microsoft.WindowsTerminal ターミナルからWSLの軌道ができたら普段zshを使っているので、ここを参考にしてzshの環境構築を行いました。 WSL2でWeb開発環境の構築メモ (zsh, node, dockerなど) ...

September 25, 2023 · にあえん