20210427のLinuxに関する記事は2件です。

Mac VirtualBox上のWindows 10 ProをUbuntu 20.04に移動してヘッドレス起動+RDP

Mac OSX VirtualBox上のWindows 10がなんだか邪魔になってきた 長年Windowsで開発をしてきたにも関わらず、メインの仕事がWindows EXEからiOSアプリに変わってきたこともあり、最近はもっぱらMacを使っております。 Windowsが必要なシーンもあるにはあるのですが、時間とともに減少の一途を辿っております。 そんなこともあり、すっかり日陰の存在なってしまったWindows 10をMacの外に追い出したい!と思い、今回Ubuntuサーバのほうに移動させ、必要な時にRDPで接続して利用することといたしました。 私の所有しているWindowsのライセンスはWindows XPからWindows 7を経て、バージョンアップで引き継がれてきたもので、今主流となっている64bitではなく32bitです。 移動元・移動先マシン 移動元 Mac Book Pro 13-inch, 2018, Four Thunderbolt 3 Ports CPU Core i7 2.7GHz クアッドコア メモリ 16GB 2133MHz LPDDR3 ストレージ 1TB SSD OS Mac OSX 10.15 Catalina 移動先 BOXNUC6CAYH インテル® NUC キット NUC6CAYH CPU Celeron® J3455 1.50 GHz クアッドコア メモリ 8GB 1600MHz DDR3L ストレージ 1TB SSD OS Ubuntu 20.04.2 LTS ディスク容量は同じですが、CPUがかなり遅いですね。 元々Linuxサーバ用途で購入したので、まぁ良い方ではないかと思います。 動作速度は大幅に落ちると思いますが、使用頻度がさがっていく一方のWindows 10なのでまぁいいでしょう。 UbuntuにVirtualBoxをインストール UbuntuにVirtualBoxをインストールします。 色々とググってみたところ、以下のサイトに親切な説明がありましたので、参考にさせていただきました。ありがとうございます。 Ubuntu 20.04にVirtualBox 6.1をインストールする方法 - Tutorial Crawler rootユーザにsuして、コマンドを以下の順番で打ちました。 $ apt update && apt upgrade $ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add - $ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add - $ add-apt-repository "deb http://download.virtualbox.org/virtualbox/debian focal contrib" $ apt update $ apt install virtualbox-6.1 aptリポジトリの構成でVirtualBoxがインストールできるようにして、インストールするという流れです。 無事にインストールができたら動作状況を確認します。 $ systemctl status vboxdrv ● vboxdrv.service - VirtualBox Linux kernel module Loaded: loaded (/usr/lib/virtualbox/vboxdrv.sh; enabled; vendor preset: enabled) Active: active (exited) since Thu 2021-04-22 17:38:07 JST; 15min ago Tasks: 0 (limit: 9268) Memory: 0B CGroup: /system.slice/vboxdrv.service Apr 22 17:38:07 home systemd[1]: Starting VirtualBox Linux kernel module... Apr 22 17:38:07 home vboxdrv.sh[3051450]: vboxdrv.sh: Starting VirtualBox services. Apr 22 17:38:07 home vboxdrv.sh[3051483]: VirtualBox services started. Apr 22 17:38:07 home systemd[1]: Started VirtualBox Linux kernel module. 無事にインストールされ動作しているようです。 VirtualBoxのバージョンを確認します。 $ VBoxManage --version 6.1.20r143896 バージョンは6.1.20でした。 この時点でのMac版VirtualBoxのバージョンが6.1.18だったので、Linux版のほうが進んでいるんですね。 Extension Packをインストールしておきましょう。 $ wget https://download.virtualbox.org/virtualbox/6.1.20/Oracle_VM_VirtualBox_Extension_Pack-6.1.20.vbox-extpack $ VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-6.1.20.vbox-extpack ゲストマシンを動作させるユーザをVirtualBoxのグループに追加します。 $ usermod -aG vboxusers Linuxユーザ名 これでUbuntu側のインストール作業は完了です。 Mac OSX VirtualMachine上のWindowsでの作業 MacのVirtualBoxでの作業に入ります。 Mac OSX VirtualBox上のWindowsのネットワーク設定はNATになっていることを前提に話を進めます。 最近のMac Book ProはEtherポートが付いていないので、ご家庭でのご使用でもEtherではなくオンボードのwifiをご利用されている方が圧倒的に多いと思いますが、VirtualBoxはいつのまにか、wifiアダプタへのBridge設定がうまく動かなくなってしまっています。そういうこともあるので、NAT前提で話をさせていただきます。 実は私のLinuxサーバもwifiでネットに接続されているので、移行先もNATのままで話を進めます。 まずはWindows 10を起動してRDP接続を有効にします。やり方はググれば出てきます。 ちなみにWindows 10 HomeはデフォルトではRDPを使えません。使うために特別なソフトウェアをインストールするみたいですが、私はやったことがありません。 続いてMacのターミナルで以下のコマンドを打ってください。 $ VBoxManage controlvm "VM名またはVM-UUID" natpf1 "rdp,tcp,,33389,,3389" これは"Windows 10"というゲストOSの3389ポートへのプロキシとして、ホストOSの33389番を利用しますよ、という意味です。 この段階でMac OSX用のMicrosift Remote Desktopでローカルホストの33389番に接続を試してみてください。 ‎「Microsoft Remote Desktop」をMac App Storeで Windowsのリモートデスクトップが表示されればOKです。 Windowsをシャットダウンしてください。 Windows 10をエクスポートする いよいよWindows 10をエクスポートします。 エクスポートする前に一つだけ確認してください。 それはVirtualBoxの3Dアクセラレーションをオフにすることです。 これをやり忘れると、ウインドウシステムの無いマシンにインポートされ、ヘッドレス起動をされたWindows 10にRDPで接続しても画面が真っ黒になってしまいます。 3DアクセラレーションをオフにしたらWindows 10をエクスポートします。 仮想アプライアンスのエクスポート というメニューを選んでエクスポートしてください。 最初に出てきた画面はだいたいこうなると思うのですが、そのままのオプション選択でOKです。 そのまま続きボタンを押していけばエクスポートが始まります。 時間がかかるのでのんびり待ちましょう。 UbuntuでWindows 10をインポート UbuntuにWindows 10を移動させます。 まずは先程エクスポートしたovaファイルをUbuntuにコピーしてください。 コピーが完了したら、VirtualBoxでWIndows 10を動作させるユーザとしてSSHやtelnet等でログインしてください。 先程rootの作業でusermodしたあのユーザです。 $ VBoxManage import エクスポートファイルのパス --dry-run で表示される値を一通りチェックしてください。 よろしければ、 $ VBoxManage import エクスポートファイルのパス としてインポートしてください。 これも時間がかかりますので、のんびりお待ち下さい。 Windows 10を起動してRDP接続 無事にインポートが済んだらWindows 10のVM起動してみましょう。 $ VBoxManage startvm "VM名またはVM-UUID" --type headless これでMac OSのMicorsoft Remote Desktopから UbuntuサーバのIPアドレス:33389 で接続ができると思います。 Micorsoft Remote DesktopのDisplayのColor quality設定はHigh(32-bit)からMedium(16-bit)に変更することをお勧めします。 無事に接続ができたら、このままLinuxサーバのターミナルからGuest Additionを当ててやってください。 $ VBoxManage guestcontrol "VM名またはVM-UUID" updateguestadditions --source /usr/share/virtualbox/VBoxGuestAdditions.iso --verbose Guest Additionが無事に当たったら、RDPの画面からシャットダウンを選んでください。 VMパラメータの変更 Mac Book Pro 13-inchとBOXNUC6CAYHのパフォーマンスの差、さらにRDP接続もあって動作がかなり遅いです。 少々遅いのは覚悟していましたが、それでも少しは早くしたいです。 CPU数変更 $ VBoxManage modifyvm "VM名またはVM-UUID" --cpus 2 CPU数を2つにしました。Mac Book Pro上では1つで十分に速かったのですが、BOXNUC6CAYHでは遅いので2つにしました。 グラフィックスドライバ変更 $ VBoxManage modifyvm "VM名またはVM-UUID" --graphicscontroller vboxvga Mac上ではVBoxSVGAを使っていたのですが、LinuxではVBoxVGAに変更しました。VBoxVGAのほうが良いということがググって出てきましたので、個人的感想としては変化は感じられませんでした。 H/Wアクセラレータoff $ VBoxManage modifyvm "VM名またはVM-UUID" --hwvirtex off $ VBoxManage modifyvm "VM名またはVM-UUID" --vtxvpid off これもネット上での情報でH/Wアクセラレータもオフにしたほうが速くなる、とあったので設定してみました。 若干速くなった気もしますが、気のせいかもしれません。 ドラッグ&ドロップとクリップボードの無効化 $ VBoxManage modifyvm "VM名またはVM-UUID" --clipboard-mode disabled $ VBoxManage modifyvm "VM名またはVM-UUID" --draganddrop disabled RDP接続なので、VirtualBoxを介したドラッグ&ドロップやクリップボードは使いません。 メモリ 32-bit Windowsは実メモリを3.5GBまでしか認識できません。 従いまして、RAMサイズはMacで使用していた時の3584MBままにしています。 Windows Updateの問題 Windows Updateの中にはシステム更新を完了させるために、OSのリブートをするものがあります。 VirtualBoxはOSが勝手にシャットダウンをしたものはエラーが発生したとみなして、Windows Updateの更新が失敗してしまいます。 解決策として、そのようなタイプのWindows Updateはユーザが必ず再起動やシャットダウンを行えば良いのですが、こちらはWindows側の設定で自動再起動を止めないとなりません。 Windows 10 Proの場合はローカルグループポリシーエディターで設定を行います。 「ここに入力して検索」入力ボックスに"gpedit.msc"と打てば出てきます。 ローカルグループポリシーエディターで「ローカルコンピューターポリシー」→「管理用テンプレート」→「Windowsコンポーネント」→「Windows Update」を開いてください。 その中の以下の2つを編集にしてください。 「自動更新を構成する」 で、有効ラジオボタンをチェックし、自動更新の構成は「自動ダウンロードしインストールを通知」を選択 「スケジュールされた自動更新のインストールで、ログオンしているユーザーがいる場合には自動的に再起動しない」 で、有効ラジオボタンをチェックする おそらくこれで、ユーザがログインしていない時にWindowsが勝手に再起動するのは防止できると思います。 最後に そんなに使わなくなったWindows 10ですが、90GB以上の領域をMacのSSDから奪っていました。これが自分がいつも使うマシンのSSDから消えたのが、ほんの僅かですが心地よいです。 Ubuntuサーバに移したWindows 10のVMはVBoxManageのexportコマンドを使って、月に1度のバックアップをとるようにしました。現在のWindowsの使用状況でしたら、それで十分な気がします。 バックアップが取られたら、通知する仕組みをつくって、USB HDDにエクスポートファイルをコピーするようにしています。 月1度の作業なので、そんなに苦痛にはならないと思っております。 分かりづらい点や、間違っている部分などがありましたら、コメントでお寄せくださいませ。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

curlコマンドは、出来ることがたくさんなのですね!

はじめに たまに見かける「curl」コマンド。 名前からも、何をするものか想像も出来ず、特に使うこともなく今現在まで至っていました。 しかし、とうとうcurlの壁にぶち当たりました!笑 そこで、どういったことが出来るかを調べたので、備忘録も兼ねて自分と同じ状況の人の手助けになれたらと思います! curlコマンドとは? curlコマンドとはサーバから、もしくはサーバへデータ転送を行うコマンドのことです。 httpリクエストができるコマンドなイメージではありますが、APIを叩いたりすることができるというだけで、HTTPのGETやPOSTはもちろん、HTTPSやFTP, Telnet, SMTP, IMAP, POP3など様々な通信プロトコルをサポートしています。 ※ちなみにcURLとは、【client for URL】という意味らしいです! jqコマンドについて jqコマンドは入力を受け取り、出力を生成するフィルタの役割を果たします。 特定のデータを抽出したり整形したりできるのですが、今回は整形して見やすくするためだけに使用します。 ※JSON形式のみ対応可能です。 インストールはhomebrewで出来ます。 $ brew install jq 基本的な使い方 curlコマンドの基本形は下記の通りです。 curl [options] [URL] GETリクエスト GETリクエストの場合は、特に何も指定せずURLを打ち込むだけで大丈夫です。 $ curl localhost:3000/api/json | jq . GET以外のリクエストの場合 明示的にリクエストメソッドを指定したい場合は-X リクエストメソッド "URL"で変更することができます。 $ curl -X POST "localhost:3000/api/json" | jq . ファイルに出力したい場合 -o オプションを指定することでファイルに出力できます。 # $ curl URL -o 出力したいファイル名 $ curl localhost:3000/api/json -o response コンソールの出力をカスタマイズしたい場合 -# オプションを使うと、プログレスバーのような表記に変更できます。 $ curl localhost:3000/api/json -o response -# ######################################################################## 100.0% -sオプションで、プログレス情報を非表示にできる。 # Portを間違えているが、-sはエラーメッセージもでない $ curl -s localhost:3001/api/json | jq . # -Sをつけることで、エラーメッセージが出力される。 $ curl -Ss localhost:3001/api/json | jq . #=> curl: (7) Failed to connect to localhost port 3001: 接続を拒否されました ヘッダーを確認したい場合 -Iオプションで、Headerのみ取得し、出力することができます。 $ curl -I -s 'localhost:3000/api/json?' | jq . HTTP/1.1 200 OK . . . -i ならば、Response Header,Bodyの両方を出力できます。 $ curl -i -s 'localhost:3000/api/json?' | jq . HTTP/1.1 200 OK . . . { ... } ヘッダーを変更したい場合 -H “パラメータ: “値” をつけることで、HTTPヘッダを追加することができます。 $ curl -X POST "localhost:3000/api/json" -H "accept: application/json" | jq . パラメーターを送信したい場合 ‘{“パラメータ”}: {“値”}’でパラメーターを送信できます。 $ curl -X POST -d '{"hoge1":"fuga1", "hoge2":"fuga2"}' "localhost:3000/api/json" パラメータ付きPOSTとURLエンコード --data-urlencode を使うと、curlがURLエンコードしてくれるので、そのまま書いてしまうことができます。 # URLエンコードはcurlに任せてPOST $ curl -w '\n' 'http://localhost:8080/job/sample/configSubmit' --data-urlencode 'json={"properties": {"hudson-model-ParametersDefinitionProperty": {"parameterized": {"parameter": {"name": "FileParameter", "description": "Upload file to Jenkins.", "stapler-class": "hudson.model.FileParameterDefinition", "$class": "hudson.model.FileParameterDefinition"}}}}}' -d 'Submit=Save' -XPOST ファイルをUploadするPOST --form もしくは -Fを使用することで、ファイルをUploadできる。 # Upload用ファイルを用意 $ echo "Sample file" > sample.txt # Fileパラメータにsample.txtを指定してビルド実行 $ curl -sS 'http://localhost:8080/job/sample/build' -X POST -F "file=@sample.txt" -F 'json={"parameter": [{"name":"FileParameter", "file":"file"}]}' HTTP通信の詳細を出力を確認したい場合 -vオプションを付与することで、HTTP通信の詳細を出力することが出来ます。 $ curl -v -X POST -d'{"hoge1":"fuga1", "hoge2":"fuga2"}' "localhost:3000/api/json" エラーコードを確認したい場合 -fオプションを付与することで、異常終了時に、終了コードで終わってくれます。 $ curl -f -X POST "localhost:3000/api/jsonstatus/404" #=> curl: (22) The requested URL returned error: 404 NOT FOUND おわりに curlコマンドはシンプルかと思いきや、出来ることがありすぎて複雑でした。。 しかし、基本的な使い方はシンプルなので、使っていくうちに慣れていくかもしれないですね! 参考 curlコマンドでちょこっとHTTPリクエストを試すだけの記事 curl コマンド 使い方メモ curl コマンド
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む