LoginSignup
3
1

More than 1 year has passed since last update.

snapでインストールされたcurlに気をつけて(ubuntu)

Last updated at Posted at 2021-07-25

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

Ubuntuには、curlコマンドが標準では入っていません。
なので、インストールすることになります。
しかし、その時にsnapでインストールしたcurlを使ったら
/tmp/以下にファイルをダウンロードできなかった。

というお話です。

1. curlをsnapでインストール

$ sudo snap install curl

2. GitHubからファイルを/tmpへダウンロード

ダウンロードしているファイルは問題ではありません。
保存先が問題です。

$ curl -sSLJ https://github.com/alexellis/arkade/releases/download/0.7.23/arkade --output /tmp/arkade

以下のようなエラーがでます。

curl: (23) Failure writing output to destination

3. GitHubからファイルを/home/$user/へダウンロード

次は、ログインユーザーのホームディレクトリへファイルを保存します。

$ /snap/bin/curl -sSLJ https://github.com/alexellis/arkade/releases/download/0.7.23/arkade --output /home/$USER/arkade

以下のようにエラーもなく保存できました。

$ ls -la /home/$USER/arkade
-rw-rw-r-- 1 user user 7811072  7月 25 12:12 /home/$USER/arkade

4. /tmp/へ保存できない理由

snapは独自のsandbox機構を持っています。
書き込める場所が制限されていてどこにでも書き込めるわけではありません。
該当のsnapパッケージ(ここではcurl)で書き込める/tmpは、/tmp/snap.curl/tmp/というディレクトリになります。

5. 問題になるケース

以下のようなケースです。

最近増えているcurlでインストールするスクリプトをダウンロードしてコマンドをインストールする場合
curl -sLS https://get.arkade.dev | sudo sh

上記のcurlコマンドはsudo shにリダイレクトされるので問題ありませんが、ダウンロードされたシェルスクリプト内でcurlが実行されており、ファイルが/tmp/配下にダウンロードされるように書かれている場合、/tmp/配下にはファイルをダウンロードできないので、エラーになります。

6. 対処方法

snapでインストールされたcurlをremoveしてaptでインストールし直しましょう。

$ sudo snap remove curl
$ sudo apt install curl

以下のIssueで報告があがっていますが、
Curl can't write files in dot-leading directories on 21.04 · Issue #2 · woutervb/snap-curl
https://github.com/woutervb/snap-curl/issues/2

Ubuntu社としては、--classicオプション(sandbox制限のないインストール)を認める気はないようです。
Classic confinement request for curl - store-requests - snapcraft.io
https://forum.snapcraft.io/t/classic-confinement-request-for-curl/24611

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1