- 投稿日:2020-03-20T22:17:15+09:00
Elastic Beanstalkの.ebextensionsでApacheのDocument Rootを変更する方法
Elastic BeanstalkでEC2を立ち上げる際、ApacheのDocument Rootは
httpd.confDocumentRoot "/var/www/html/"となっています。
これを変更しようとしたのですが、ちょっとトリッキーなことをしたので、残しておきます。環境
64bit Amazon Linux/2.9.3
Apache/2.4.41やり方
.ebextensionsのフォルダ内に以下のファイルを入れます。
apache.configfiles: /etc/httpd/conf/myhttpd.conf: content: | ##以下にDocment Rootを変更したconfファイルの内容を記載する ##例えば↓↓ DocumentRoot "/var/www/html/public" #### End of AWS Settings #### container_commands: 00-rm-httpd-conf: command: "sudo rm /etc/httpd/conf/httpd.conf" 01-cp-conf-file: command: "sudo cp /etc/httpd/conf/myhttpd.conf /etc/httpd/conf/httpd.conf" 02-httpd-restart: command: "sudo httpd -k restart"このファイルでは
①Document Rootを変更した設定ファイルmyhttpd.conf
をEC2に置く
②元々の設定ファイルhttpd.conf
でApacheを立ち上げた後、httpd.conf
を削除する
③myhttpd.conf
をhttpd.conf
に置き換える
④Apacheを再起動する
という手順を踏んでいます。この手順を踏んでいる理由
元々は最初のApacheの立ち上げの前から
httpd.conf
を上書きしようとしたのですが、そうするとなぜかDocument Rootがデフォルトに書き換わってしまいました。
なので、ちょっとトリッキーな手順を踏みました。
- 投稿日:2020-03-20T21:19:16+09:00
知っておきたいキー操作
- 投稿日:2020-03-20T20:59:00+09:00
Linux概要
Linux概要
- 広義のLinux:Linuxディストリビューション
- Linuxを利用できるようにまとめ上げた配布形態
- 狭義のLinux:Linuxカーネル
- ハードウェアとソフトウェアの中立
Linux自体はOSのカーネルに過ぎない。
実際に使用するには以下のような機能レイヤーを追加する必要がある
- デバイスドライバ
- シェル
- デーモン
- コマンド
Linuxカーネル機能
基本機能
- アプリケーションが動作するための基本環境を提供している
- メモリのどの場所にデータを保存するか
- CPUのリソースをどの程度どのアプリケーションに割り振ればイイか
- 役割は大別して2つ
- アプリケーションからの要求に応えること
- ハードウェアからの応答をアプリケーションに伝えること
プロセス管理
- プロセスとは
- メモリやCPUなどのリソースを割り当てる管理単位
- 実行中のプログラムが利用するデータは、メモリに書き出してから使用する事になる
- 演算の結果のデータ
- コマンドラインで入力された値
- 通信して取得したデータ
- CPUがプログラムに従って、あるメモリのデータに対して演算を行なっている状態
- 割り振られたリソースの上でプログラムはOS上のプロセスとして稼働する。
- プロセスは基本的に役目を果たすと終了して、メモリなどの資源を解放する。
- ゾンビプロセス
- 役目を終えているのにメモリを解放しない状態のプロセスのこと。
- ユーザからkillコマンドを発行しプロセスを強制的に終了させることになる。
- 投稿日:2020-03-20T20:20:25+09:00
【Linux】バックグラウンドジョブって何者!?
Linuxの勉強中、ログアウトしようとしたところ…見えないところで何者かが動いていて、ログアウトできませんでした。そこでバックグラウンドジョブに遭遇したので調べてまとめてみました。
【環境】Cygwinで勉強中
Version 3.1.4-1そもそもバックグラウンドジョブとは
バックグラウンド=人の見えないところ
ジョブ=処理∴人の見えないところで行われている処理
なぜ必要
その前にジョブさんたちの紹介
この魔法のコマンドjobsでアクティブなジョブさんたちがリストで表示されます。
ジョブさんの見方$ jobs #一覧 $ jobs -l #プロセスID[PID]も表示 $ jobs -p #プロセスID[PID]のみ表示 $ jobs -r #実行中(running) プロセスのみ表示 $ jobs -s #停止中(stopped) プロセスのみ表示ジョブさんたちの数え方$ sleep 120 #これ1ジョブさん $ sleep 10 & echo “I’m a job“ #これも1ジョブさん $ echo “I’m a echo” && echo “me too“ #これも1ジョブさんジョブには表舞台と裏舞台
表舞台のフォアグラウンドジョブ
先ほどのジョブさんたち、普通に実行するとフォアグラウンドジョブとして実行されます。つまり前面で見える部分のジョブ。
ジョブが見えている(見守らなきゃいけないジョブさん)=他のジョブはできない∴フォアグラウンドジョブ実行中はシェルが停止状態なので他のジョブはできない
フォアグラウンドジョブ$ sleep 120 #120秒見守るバックグラウンドジョブ
1つのジョブさんをバックグラウンドの裏舞台で実行なら他のジョブさんを実行することができる。
でも裏舞台にいるので、キーボードからのシグナルは受け取ってくれません。∴バックグラウンド実行中はジョブさんとシェルが同時に動いている状態
バックグラウンドジョブ$ sleep 120 & #&をつけてバックグラウンドで実行&がミソですね。
なぜ必要かというと
人間はシングルタスクしかできないので、マルチタスクはパソコンさんにお願いするため。
例えば、食器を洗いながら読書はできません。だから食洗機を使って洗ってもらっている時間に読書ができる。みたいな。実際にやってみる
5つのジョブさんGO!$ sleep 120 #ctrl+zでジョブさんの中止 $ sleep 120 & $ sleep 120 & $ sleep 120 & $ sleep 120 &ジョブさん一覧$ jobs #一覧表示 [1]+ 停止 sleep 120 [2] 実行中 sleep 120 & [3] 実行中 sleep 120 & [4] 実行中 sleep 120 & [5]- 実行中 sleep 120 & # + は現在実行中のジョブさん # - は直前に実行されたジョブさん止め方
実行できたはいいがバックグラウンドで実行中のままログアウトしようとすると足止めを喰らうことになるだろう。
ここで紹介する止め方は2通り
1. killコマンドでプロセスを終了
2. fgコマンドでフォアグラウンドジョブにしてから終了1. killコマンドでプロセスを終了
killコマンドさん$ jobs -l #-lオプションでプロセスID[PID]表示 #終了したいジョブさんのPID確認 [1]+ 1663 Stopped sleep 120 [2] 1674 実行中 sleep 120 & [3] 1675 実行中 sleep 120 & [4] 1676 実行中 sleep 120 & [5] 1677 実行中 sleep 120 & [6] 1678 実行中 sleep 120 & [8] 1680 実行中 sleep 120 & [9] 1681 実行中 sleep 120 & [10] 1682 実行中 sleep 120 & [11]- 1683 実行中 sleep 120 & $ kill 1674 #終了したか確認 $ jobs -l [1]+ 1663 Stopped sleep 120 [2] 1674 Terminated sleep 120 [3] 1675 実行中 sleep 120 & [4] 1676 実行中 sleep 120 & [5] 1677 実行中 sleep 120 & [6] 1678 実行中 sleep 120 & [8] 1680 実行中 sleep 120 & [9] 1681 実行中 sleep 120 & [10] 1682 実行中 sleep 120 & [11]- 1683 実行中 sleep 120 &2. fgコマンドで終了
fgコマンドにジョブ番号を渡してctrl+cでジョブを終了する。
fgコマンドさん$ sleep 120 & [2] 1686 $ jobs [1]+ 停止 sleep 120 [2]- 実行中 sleep 120 & #fgコマンドにジョブ番号を渡す $ fg 2 sleep 120 #ここで ctrl+C でジョブの終了停止中のジョブさんは...
ctrl+zで停止したジョブさんがずっと残っている。
復活→終了で処理。
※fgコマンドもbgコマンドも実行すると、ジョブは再開される。・ fgコマンドでフォアグラウンドジョブとして再開し、終了させる。
fgコマンドさん$ jobs [1]+ 停止 sleep 120 $ fg 1 #fgコマンドにジョブ番号を渡す sleep 120 $ sleep 120 [1]+ 停止 sleep 120 #ctrl+cで終了・ bgコマンドでバックグラウンドジョブとして再開してkill
bgコマンドさん$ bg 1 #bgコマンドにジョブ番号を渡す [1]+ sleep 120 & $ jobs -l #-lオプションでPID確認 [1]+ 1687 実行中 sleep 120 & $ kill 1687 $ jobs [1]+ Terminated sleep 120プロセスとジョブの違い...?
killはプロセスIDだし、fgとbgはジョブ番号だし。
プロセスとジョブの違いってなによ、、、、
- 投稿日:2020-03-20T20:18:38+09:00
【Linux】プロセスとジョブの終了、どっちがベター?
- 投稿日:2020-03-20T15:35:54+09:00
Linuxのパーティションをいろいろいじってみる〜続き〜
前回は失敗したので、以下の順番でやっていく。
作業目標
①パーティション分割→失敗
②マウント
③ユーザーごとの容量の制限
④権限設定
⑤マウントポイントにシンボリックリンク設定①パーティション分割
今回は基本プラン3つ + 論理パーティション2つで分ける。
前々回と同じようにfdiskコマンドでパーティション分割を以下の状態になるまで行う。Command (m for help): p Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x0009ef88 Device Boot Start End Blocks Id System /dev/sda1 2048 10487807 5242880 83 Linux /dev/sda2 10487808 20973567 5242880 83 Linux /dev/sda3 20973568 31459327 5242880 83 Linux /dev/sda4 31459328 83886079 26213376 5 Extended /dev/sda5 31461376 41947135 5242880 83 Linux /dev/sda6 41949184 52434943 5242880 83 Linuxパーティション作成&保存後に以下のエラーメッセージが出るので調べた。
→再起動で反映するとの情報が多く得られた。WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks.一度シャットダウンして、再度vagrant upしたら、やっぱり壊れた^^;
原因がわからないため保留とする!
- 投稿日:2020-03-20T01:23:28+09:00
CentOS7にEclipse GlassFish 5.1.0をインストールする方法
CentOS7にEclipse GlassFish 5.1.0をインストールする手順を紹介します。
1. 環境
- CentOS Linux release 7.7.1908
root@CENTOS7 ~]# cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) [root@CENTOS7 ~]#
- jdk-8u241(jdk-8u241-linux-x64.rpm)(jdk14では動作しませんでした。)
インストール[root@CENTOS7 ~]# rpm -ivh jdk-8u241-linux-x64.rpm 警告: jdk-8u241-linux-x64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID ec551f03: NOKEY 準備しています... ################################# [100%] 更新中 / インストール中... 1:jdk1.8-2000:1.8.0_241-fcs ################################# [100%] Unpacking JAR files... tools.jar... plugin.jar... javaws.jar... deploy.jar... rt.jar... jsse.jar... charsets.jar... localedata.jar... [root@CENTOS7 ~]#2. Eclipse GlassFish 5.1.0のダウンロード
以下のコマンドで
glassfish-5.1.0.zip
をダウンロードします。(もしくはダウンロードサイトからダウンロードします。)
curl -OL http://mirror.kakao.com/eclipse/glassfish/glassfish-5.1.0.zip
実行結果[root@CENTOS7 ~]# curl -OL http://mirror.kakao.com/eclipse/glassfish/glassfish-5.1.0.zip % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 111M 100 111M 0 0 292k 0 0:06:31 0:06:31 --:--:-- 302k [root@CENTOS7 ~]#以下のコマンドでダウンロードしたファイルのハッシュ値がダウンロードサイトの値と同じであることを確認します。
sha512sum glassfish-5.1.0.zip
実行結果[root@CENTOS7 ~]# sha512sum glassfish-5.1.0.zip 10d99061319178d65e8f8604f41caaca2ea561cbdc426d0fdf6163ead549e9c63c154c6ff648133a5b37bec14940a48b7c893544fa19f900a8c62273e445ed14 glassfish-5.1.0.zip [root@CENTOS7 ~]#3. glassfish-5.1.0.zipを解凍
以下のコマンドで
glassfish-5.1.0.zip
を/opt
配下に解凍します。
unzip -d /opt glassfish-5.1.0.zip
実行結果[root@CENTOS7 ~]# unzip -d /opt glassfish-5.1.0.zip Archive: glassfish-5.1.0.zip creating: /opt/glassfish5/ creating: /opt/glassfish5/glassfish/ creating: /opt/glassfish5/glassfish/domains/ creating: /opt/glassfish5/glassfish/domains/domain1/ creating: /opt/glassfish5/glassfish/domains/domain1/config/ inflating: /opt/glassfish5/glassfish/domains/domain1/config/admin-keyfile ~~~ 省略 ~~~ inflating: /opt/glassfish5/mq/lib/props/broker/default.properties inflating: /opt/glassfish5/mq/lib/props/broker/install.properties inflating: /opt/glassfish5/mq/lib/tyrus-standalone-client.jar [root@CENTOS7 ~]# cd /opt [root@CENTOS7 opt]# ls -l 合計 0 drwxr-xr-x. 7 root root 92 1月 28 2019 glassfish5 [root@CENTOS7 opt]#4. glassfishユーザーの作成
以下のコマンドで「glassfish」ユーザーを作成します。(パスワードも「glassfish」)
useradd -p $(perl -e 'print crypt("glassfish", "\$6\$salt03")') glassfish
実行結果[root@CENTOS7 opt]# useradd -p $(perl -e 'print crypt("glassfish", "\$6\$salt03")') glassfish [root@CENTOS7 opt]#5. のオーナー及びグループを変更
以下のコマンドで
glassfish5
ディレクトリのオーナー及びグループをglassfish
に変更します。
chown -R glassfish:glassfish glassfish5
実行結果[root@CENTOS7 opt]# chown -R glassfish:glassfish glassfish5 [root@CENTOS7 opt]# ls -l 合計 0 drwxr-xr-x. 7 glassfish glassfish 92 1月 28 2019 glassfish5 [root@CENTOS7 opt]#6. asenv.confの修正
/opt/glassfish5/glassfish/config/asenv.conf
の最後の行に
AS_JAVA="/usr/java/jdk1.8.0_241-amd64"
を追加します。asenv.conf# # Copyright (c) 2004, 2018 Oracle and/or its affiliates. All rights reserved. # # This program and the accompanying materials are made available under the # terms of the Eclipse Public License v. 2.0, which is available at # http://www.eclipse.org/legal/epl-2.0. # # This Source Code may also be made available under the following Secondary # Licenses when the conditions for such availability set forth in the # Eclipse Public License v. 2.0 are satisfied: GNU General Public License, # version 2 with the GNU Classpath Exception, which is available at # https://www.gnu.org/software/classpath/license.html. # # SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 # # # * * * N O T E * * * # # Although the lines in this file are formatted as environment # variable assignments, this file is NOT typically invoked as a script # from another script to define these variables. Rather, this file is read # and processed by a server as it starts up. That scanning code resolves # the relative paths against the GlassFish installation directory. # # Yet, this file is also where users of earlier versions have sometimes added # a definition of AS_JAVA to control which version of Java GlassFish # should use. As a result, in order to run a user-specified version of Java, # the asadmin and appclient scripts do indeed invoke this file as a # script - but ONLY to define AS_JAVA. Any calling script should not # rely on the other settings because the relative paths will be resolved # against the current directory when the calling script is run, not the # installation directory of GlassFish, and such resolution will not work # correctly unless the script happens to be run from the GlassFish installation # directory. # AS_IMQ_LIB="../../mq/lib" AS_IMQ_BIN="../../mq/bin" AS_CONFIG="../config" AS_INSTALL=".." AS_DEF_DOMAINS_PATH="../domains" AS_DEF_NODES_PATH="../nodes" AS_DERBY_INSTALL="../../javadb" AS_JAVA="/usr/java/jdk1.8.0_241-amd64"7. ファイアウォールの設定
/usr/lib/firewalld/services
配下に以下のglassfish.xml
を作成します。glassfish.xml<?xml version="1.0" encoding="utf-8"?> <service> <short>glassfish</short> <description>GlassFish Server</description> <port protocol="tcp" port="4848"/> <port protocol="tcp" port="8080"/> <port protocol="tcp" port="8181"/> </service>以下のコマンドでglassfish.xmlで設定したポートを通すようにファイアウォールを設定します。
firewall-cmd --permanent --add-service=glassfish
実行結果[root@CENTOS7 services]# firewall-cmd --permanent --add-service=glassfish success [root@CENTOS7 services]#以下のコマンドでfirewalldを再起動します。
systemctl restart firewalld.service
実行結果[root@CENTOS7 services]# systemctl restart firewalld.service [root@CENTOS7 services]#以下のコマンドでservicesにglassfishが追加されていることを確認します。
firewall-cmd --list-all
実行結果[root@CENTOS7 services]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: enp0s3 sources: services: dhcpv6-client glassfish http ssh ports: 8888/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@CENTOS7 services]#8. glassfish起動
以下のコマンドで
glassfish
ユーザーにスイッチします。
su - glassfish
実行結果[root@CENTOS7 services]# su - glassfish 最終ログイン: 2020/03/19 (木) 23:39:44 JST日時 pts/0 [glassfish@CENTOS7 ~]$
glassfish
の起動、停止、再起動コマンドは以下となります。起動:
/opt/glassfish5/glassfish/bin/asadmin start-domain
停止:/opt/glassfish5/glassfish/bin/asadmin stop-domain
再起動:/opt/glassfish5/glassfish/bin/asadmin restart-domain
glassfish
を起動します。実行結果[glassfish@CENTOS7 ~]$ /opt/glassfish5/glassfish/bin/asadmin start-domain Waiting for domain1 to start ....... Successfully started the domain : domain1 domain Location: /opt/glassfish5/glassfish/domains/domain1 Log File: /opt/glassfish5/glassfish/domains/domain1/logs/server.log Admin Port: 4848 Command start-domain executed successfully. [glassfish@CENTOS7 ~]$9. 接続確認
以下のURLでブラウザから接続します。
http://<サーバのIPアドレス>:8080/
以下の画面が開くと接続OKです。
10. 管理画面の設定
以下のURLでブラウザから管理画面に接続します。
http://<サーバのIPアドレス>:4848/
エラーが表示される場合、以下を設定します。
管理ユーザーのパスワードを設定します。
/opt/glassfish5/glassfish/bin/asadmin change-admin-password
実行結果[glassfish@CENTOS7 ~]$ /opt/glassfish5/glassfish/bin/asadmin change-admin-password Enter admin user name [default: admin]>(そのまま) Enter the admin password>(そのまま) Enter the new admin password>admin Enter the new admin password again>admin Command change-admin-password executed successfully. [glassfish@CENTOS7 ~]$以下のコマンドでenable-secure-adminを有効にします。
/opt/glassfish5/glassfish/bin/asadmin --host localhost --port 4848 enable-secure-admin
実行結果[glassfish@CENTOS7 ~]$ /opt/glassfish5/glassfish/bin/asadmin --host localhost --port 4848 enable-secure-admin Enter admin user name> admin Enter admin password for user "admin"> You must restart all running servers for the change in secure admin to take effect. Command enable-secure-admin executed successfully. [glassfish@CENTOS7 ~]$glassfishを再起動します。
/opt/glassfish5/glassfish/bin/asadmin restart-domain
実行結果[glassfish@CENTOS7 ~]$ /opt/glassfish5/glassfish/bin/asadmin restart-domain Successfully restarted the domain Command restart-domain executed successfully. [glassfish@CENTOS7 ~]$再度以下のURLでブラウザから管理画面に接続します。
http://<サーバのIPアドレス>:4848/
設定した管理ユーザー/パスワード(admin/admin)でログインします。
管理画面にログインできました。
11. systemdのserviceファイル作成
/usr/lib/systemd/system
配下に以下のglassfish.service
を作成します。/usr/lib/systemd/system/glassfish.service[Unit] Description=GlassFish Server v5.1 After=syslog.target network.target remote-fs.target [Service] Type=oneshot RemainAfterExit=yes PIDFile=/var/run/glassfish.pid ExecStart=/opt/glassfish5/glassfish/bin/asadmin start-domain ExecStop=/opt/glassfish5/glassfish/bin/asadmin stop-domain ExecReload=/opt/glassfish5/glassfish/bin/asadmin restart-domain TimeoutStartSec=300 TimeoutStopSec=30 User=glassfish Group=glassfish [Install] WantedBy=multi-user.target
systemctl
コマンドでの起動、停止、再起動は以下となります。起動:
systemctl start glassfish
停止:systemctl stop glassfish
再起動:systemctl restart glassfish
参考
エラー情報
今回はjavaとして
jdk-8u241
をインストールして実行しました。しかし、
jdk14
では以下のエラーが発生し実行できませんでした。実行結果[glassfish@CENTOS7 ~]$ /opt/glassfish5/glassfish/bin/asadmin start-domain Exception in thread "main" java.lang.NullPointerException at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.initializeServiceLocator(AbstractModulesRegistryImpl.java:128) at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.newServiceLocator(AbstractModulesRegistryImpl.java:120) at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.createServiceLocator(AbstractModulesRegistryImpl.java:194) at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.createServiceLocator(AbstractModulesRegistryImpl.java:200) at com.sun.enterprise.module.single.StaticModulesRegistry.createServiceLocator(StaticModulesRegistry.java:64) at com.sun.enterprise.admin.cli.CLIContainer.getServiceLocator(CLIContainer.java:193) at com.sun.enterprise.admin.cli.CLIContainer.getLocalCommand(CLIContainer.java:231) at com.sun.enterprise.admin.cli.CLICommand.getCommand(CLICommand.java:207) at com.sun.enterprise.admin.cli.AdminMain.executeCommand(AdminMain.java:347) at com.sun.enterprise.admin.cli.AdminMain.doMain(AdminMain.java:282) at org.glassfish.admin.cli.AsadminMain.main(AsadminMain.java:33) [glassfish@CENTOS7 ~]$
以上
- 投稿日:2020-03-20T01:20:23+09:00
オフライン環境へVSCodeとRemote Developmentを導入してlinux開発を快適にする
状況
- オフラインのWindowsクライアント
- プロキシの中など実質オフラインも可
- OpenSSHなぞ入っていない(こともある)
- 管理者権限もない(こともある)
- ターゲットのlinuxに直接VSCode入れるのも面倒だし重い
解決のポイント
- 必要なプラグインはあらかじめダウンロード
- vscodeのバージョン(コミット)に対応したvscode-serverを手動で取得しておく
- SSH Extentionの中のコケるポイントwgetをcpに変えて回避
手順
1.必要なものをダウンロード
必須
- Visual Studio Code
- ページ下部 .zip 64bit または 32bit より合ったものをダウンロードしましょう。
- 適当な場所に展開しておきます。
- Remote Development
- ページ右の Resources より Download Extentions からダウンロードしましょう。
- Remote - SSH
- ページ右の Resources より Download Extentions からダウンロードしましょう。
- vscode-server-linux-x64.tar.gz
- VSCodeのバージョンを確認してダウンロードします。(後述)
必要に応じて入れるもの
- OpenSSH
- OpenSSH が入ってない人へ。
- 適当な場所に展開しておきます。
- Japanese Language Pack for Visual Studio Code
- Englishは嫌な人へ。
- その他欲しいプラグイン
2. VSCodeへプラグインを入れる
プラグイン一覧の右肩の… から Install from VSIX... を選んでダウンロードしておいた各プラグインを導入します。
3. VSCodeのバージョンを確認
メニューから Help > About で Commit: を確認します。Copyもできます。
Version: 1.43.1 Commit: fe22a9645b44368865c0ba92e2fb881ff1afce94 Date: 2020-03-18T07:01:20.184Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.183624. vscode-server-linux-x64.tar.gz のダウンロード
Commitを入れたURLから vscode-server-linux-x64.tar.gz をダウンロードします。
https://update.code.visualstudio.com/commit:fe22a9645b44368865c0ba92e2fb881ff1afce94/server-linux-x64/stable5. sshの公開鍵認証を設定しておく
このステップはググりましょう。要するに以下です。
1. クライアント: ssh-keygenを実行(OpenSSHのフォルダにssh-keygenは入っています。)。パスフレーズ等の入力は不要。
2. クライアントに生成されたid_rsa.pubの内容をサーバーの~/.ssh/authorized_keysに書き込む
3. .sshやauthorized_keysのパーミッションに気をつけましょう。
4. クライアントの~/.ssh/configにconfigを書いておきましょう。
5. 必要に応じてProxyCommandなど設定しましょう。~/.ssh/configの例Host target HostName targetのIPアドレス User targetのログインユーザー IdentityFile クライアントのid_rsaへのパス6. ダウンロードした vscode-server-linux-x64.tar.gz をターゲットに転送する
クライアントからscpでターゲットの/tmpなどへ送りましょう。(OpenSSHのフォルダにscpは入っています。)
ここで公開鍵認証がうまく設定できているか動作確認しておきましょう。.\scp \path\to\vscode-server-linux-x64.tar.gz target:/tmp7. Remote - SSH の改造
クライアントの ~.vscode\extensions\ms-vscode-remote.remote-ssh-0.50.0\out\extention.js を編集します。
ターゲット上でwgetする筈のコードを/tmpからコピーしてくるコードに変更しています。extention.ja(オリジナル)wget ${function(e){return e?"--tries=1":""}(!!m)} --connect-timeout=7 --dns-timeout=7 -nv -O vscode-server.tar.gz $DOWNLOAD_URLextention.ja(変更後)cp /tmp/vscode-server-linux-x64.tar.gz vscode-server.tar.gz手順は以上です。VSCodeからターゲットに接続できるか確認しましょう。
プラグインをVSCode上からターゲットへ入れることができます。
vsixファイルをターゲットへ転送しておき、Install from VSIX...でインストールすることもできます。トラブルシューティング
Connectionができない
- ssh.exeの公開鍵認証が通るか確認しましょう。
Got Connection 1とか出たのにエラーが出る
- sshd_configを確認しましょう。
- https://code.visualstudio.com/docs/remote/troubleshooting
- AllowTcpForwarding yes
- AllowStreamLocalForwarding yes
- ターゲットのファイアーウォール(OUTPUT)を確認しましょう。
Refs