パスワードを忘れた? アカウント作成
14190917 story
Windows

WindowsのInsider Preview版でパッケージマネージャ「winget」が利用可能に 36

ストーリー by hylom
コマンドライン勢向け? 部門より

Microsoftが開発しているソフトウェアパッケージ管理ツール「winget」のプレビュー版が、WindowsのInsider Preview版で利用可能になった(窓の杜GIGAZINE)。

Windows向けのパッケージ管理ツールはいくつか存在するが、wingetはMicrosoftが公式に提供するという点と、不正なパッケージのインストールを事前に防ぐためのセキュリティ機構が特徴となる。

  • Cygwinのapt-cygの挙動が分かりやすいが、Windowsは現在使用中のファイルの更新ができない。
    つまりaptやbrewと違い、wingetでwingetの更新はできないし、Windows Terminalから呼び出したのならWindows Terminalの更新も失敗し、同様の理由からアンインストールも失敗する。
    いつもの再起動後に云々のメッセージダイアログが表示され、たかがひとつふたつのアプリの更新如きに再起動を要求されることだろう。
    セットアップを自動化したいのならDOS時代のSHARE.exeより続くファイル管理の仕方から修正しないとムリ。

    ここに返信
    • 逆だよ、Windowsでは古くからファイルのmandatoryな排他ロックが完全かつセキュアに実装されているが、
      伝統的なUNIX/Linuxでは実装されていなかったの(最近はいろいろ事情が違うが)。

      ディスク上の実行ファイルや共有ライブラリだけ更新されても、実行中のプロセスが更新されるわけではない。
      実行プロセスを再起動せずに使い続けると、部分的に更新されたディスクファイルを読み取ることで、あらゆる予期しない不整合が発生する可能性がある。
      だからWindowsの方法はセキュアで正しいものだ。UNIX/Linuxの便利さは見せかけだけで、危険で不完全な方法だよ。

      エンジニアとして二流なくせにウェーイ系ITムラ社会の風潮に乗せられて安易にWindows叩きなんかするから、
      こういう恥ずかしい批判をしてしまうのだ。

      • Windowsの場合、デフォルトでは排他ロックあるけど、排他ロックせずに開くことも可能なんだよな。
        EXEやDLLで、排他ロックかけずに動かすとかいう馬鹿なことを普通はしないってだけで。

        一応、今のLinuxでもセキュア/ロバストであることを企図してるディストリビューションでは、プロセスモジュールは排他で開くから実行中のモジュール更新はできない。
        将来的には一般向けに使われうディストリビューションでも Windowsと同様な排他ロックが標準になってくだろうね。

      • by Anonymous Coward

        ファイルをロックするのとファイル名をロックするのは別じゃん。
        「最近」がいつかは知らんけど、UNIXでも実行中のファイルは書き換えられなかったけどな。
        (実行中のファイルの名前で新たなファイルを作ることはできる)
        書き換えられるやつもあったのはたしか。

        • by Anonymous Coward

          起動時に必要なファイル(=inode)をぜんぶ開いて保持してる状態で動いているなら成り立つけど、上にあるように、動作途中で開くやつ、がなくはないのがな...

          # 動的プラグイン系とかだけど、
          # まれーに変なのもいる

          なので、安心でいうとlock madantoryなほうが、いいかなと思ったりする
          # ただ更新の仕方が面倒くさい(下手なのもいる)のはあるので、利用者からは痛し痒し

          • by Anonymous Coward

            IoTとか組み込みでの「全て自分の管理下」の不自由環境でもない限り、排他無しなんて危なっかしくてやってられんですなぁ。

        • by Anonymous Coward

          GNU/Linuxはだいたいrm /bin/rmできる
          それをどう優れてると宣うべきかは知らんが

          • rm /bin/rmができることと#3819560のいう「(実行中のファイルの名前で新たなファイルを作ることはできる)」はだいたい同じこと言っているのではないか。

            rmというかunlink(2)がすぐにやることは親ディレクトリから当該ファイルのエントリを消すこと。その結果、とりあえず削除されたように見える。ただ、元のファイルがオープン中だったら、OSカーネルとディスク上にはまだファイルの実体が存在している。全部クローズされたら削除される。

            なお、Windowsでも「実行中のファイルの名前で新たなファイルを作ることはできる」は一応実現できる。オープン中のファイルの削除はできないがリネームはできるので、リネームすれば元と同じ名前のファイルを新たに作成できる。リネームした古いファイルは後ほど適当なタイミングで削除すればよい。

          • by Anonymous Coward

            だからそれはファイル名を操作しているだけで、ファイルは操作してないんだよ。

            • by Anonymous Coward

              ファイルシステムの実装にも依存するが、ファイル削除でファイル名触る必要なんてないだろ。

              Linuxだろうが差し替えて更新だとopen済みのファイルはreleaseされんし、されても困る。
              システム全体に更新を反映させるには、ファイルを使用していたプロセス全部落とすか、OS再起動しかない。

              使用中のファイルを差し替えられるから再起動不要なんてのは、詭弁としか思えん。

              • システム全体に更新を反映させるには、ファイルを使用していたプロセス全部落とすか、OS再起動しかない。

                実際そのとおり。ついでに言うと、最近のUbuntu Linuxでは(きっとDebian由来だろうけど)、パッケージマネージャでlibcやsystemdやカーネルなどを更新すると、/run/reboot-requiredという空ファイルを作って、再起動が必要なことを伝えてくる。さらに、その引き金になったパッケージを/run/reboot-required.pkgsに追記するので、これを見てもいい。

              • by Anonymous Coward

                だからrmはファイル削除しないんだよ。

              • by Anonymous Coward

                ディレクトリエントリの削除とでも言えば満足か?
                なんにせよファイル名なんて操作しない。

      • by Anonymous Coward

        実行バイナリやライブラリを上書き更新する訳無いでしょ。差し替えが普通。
        > 部分的に更新されたディスクファイルを読み取る
        こんな事言いながら二流とか言っちゃう自信を顧みるべき。

      • by Anonymous Coward

        OSの出自が違うから方針が違うだけだと思いますよ。

        人間がログファイル眺めてたらサーバーのバックアップジョブが失敗するとかいややん。

    • NuGet というパッケージマネージャがございまして
      自分自身の更新もできるんですよ

      This command can also be used to update nuget.exe itself using the -self flag.

      https://docs.microsoft.com/en-us/nuget/reference/cli-reference/cli-ref-update [microsoft.com]

    • なんだかんだWindowsもエンジニアとしてかなり上のランクの人間が作ってる
      そこらのなんちゃってエンジニアが聞きかじりの知識で批判しても返り討ちにあうだけ
      批判するにしても「俺には理解できんが、調べれば相応の理由があって最善を選択した結果そうなっているんだろう」って考え方をベースにした方がいいよ

      • by Anonymous Coward

        > 批判するにしても「俺には理解できんが、調べれば相応の理由があって最善を選択した結果そうなっているんだろう」
        > って考え方をベースにした方がいいよ
         
        まあなんだ。すべての物事関してそう考えたほうがいいよね。
        ちょっとわかるの精神で。

        • by Anonymous Coward

          セキュアなのはわかるが、現実問題として"git checkout"などと絶妙に相性悪いんだよね。
          ディレクトリの場合は絶対に掴んでいないことを保証しないと何もできない。

        • by Anonymous Coward

          それにしたって間抜けなバグとか仕様が多すぎる
          しかしユーザー一斉にこの仕様は無いだろう!
          ってのはあちらも忸怩忸怩なのかもしれないが

    • by Anonymous Coward on 2020年05月22日 16時36分 (#3820177)

      つまりaptやbrewと違い、wingetでwingetの更新はできないし、Windows Terminalから呼び出したのならWindows Terminalの更新も失敗し、同様の理由からアンインストールも失敗する。
      いつもの再起動後に云々のメッセージダイアログが表示され、たかがひとつふたつのアプリの更新如きに再起動を要求されることだろう。

      例えば、Apacheを動かしているLinuxで、"apt-get update" を実行したとします。
      で、httpd が更新されました。これで脆弱性が修正されて安全になったでしょうか?

      答えは、Noです。
      今動いている httpd は脆弱なままで、再起動するまでは安全にはなりません。
      service httpd restart のようなコマンドを実行するか、OSレベルで再起動して初めて安全になります。

      これはシンプルな例ですが、実際には依存関係があって1つのサービスを再起動しただけでは安全にならなかったり、複数のサービスを終了してから再度起動する必要があったりもします。
      安全なアップデート方法を知るには、それぞれのアプリケーションのドキュメントを読まないといけなかったり、ドキュメントにも書かれていなかったりします。

      Linuxでapt-getをして脆弱性が修正されたとき、アップデートされた全てのサービスの挙動を熟知していない限りは、実際にはOSレベルで再起動しないと安全性を保てないのです。

      これを理解すれば、アップデートで再起動を要求するWindowsが安全よりなことが分かるはずです。

      • by Anonymous Coward

        一部の再起動してほしくない人には不評だけどwindowsの方が万人向けにはなってるな

        けど全体のパイの傾向がより一般ユーザーなwindowsの方が自由度低くて安全側に倒すのは正解でしょ
        unix系が分かってる人向けで自由度が高いのも正しいし

        この議論の不毛な部分はどちらかを「より優れてる」として悦に浸ろうとするから発生するんだと思うよ

      • by Anonymous Coward

        言いたいことは分かるし否定しませんが、DebianやUbuntuではapt-getでApacheを更新すると自動で再起動されますよ。おそらく回避できません: server - Prevent Apache restarting automatically after upgrading packages [askubuntu.com]

    • by Anonymous Coward

      まだupdateコマンドもuninstallコマンドも未実装みたいですが何か別の機能のことを言っているんでしょうか?

  • by Anonymous Coward on 2020年05月21日 16時31分 (#3819490)

    なんか適当なオプションをつけたらWindows Updateをやってほしい。
    いい加減control updateで画面だけ出すのは不便なので…

    ここに返信
  • by Anonymous Coward on 2020年05月21日 17時45分 (#3819544)

    WindowsはGNU/Linuxに追従すると使いやすくなる。

    !Windowsは無能

    ここに返信
    • by Anonymous Coward

      ウインドウズでは無いものは無能ですか…
      でもウィンドウズが有能とも言ってないな

      • by Anonymous Coward

        AndroidのGboardで未確定文字が数文字塊で勝手に後ろに回る症状有るんだよね
        多分HPで使ってるhtml/cssライブラリに書字方向狂わすなんかが混入し暴発てるんだろうけど

        • by Anonymous Coward

          Windows 10上の旧Edgeでも起きますのでsradのコードが原因かと。

  • by Anonymous Coward on 2020年05月21日 19時27分 (#3819626)

    Win32 APIとUWP APIを再統合するProject ReunionとかWSL2のGUIサポートとか他にも面白そうな話が目白押し

    ここに返信
    • by Anonymous Coward

      構想の時点では凄そう!ってなるけど、いざ実際モノがリリースされると(´・ω・`)
      ってケースが多いんだよな

      • by Anonymous Coward

        この手の統合だの後継だのは、たいてい不完全で先に逝くわな

      • by Anonymous Coward

        リリースされるだけまだましというものですよ。

typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...