20200320のLinuxに関する記事は8件です。

Elastic Beanstalkの.ebextensionsでApacheのDocument Rootを変更する方法

Elastic BeanstalkでEC2を立ち上げる際、ApacheのDocument Rootは

httpd.conf
      DocumentRoot "/var/www/html/"

となっています。
これを変更しようとしたのですが、ちょっとトリッキーなことをしたので、残しておきます。

環境

64bit Amazon Linux/2.9.3
Apache/2.4.41

やり方

.ebextensionsのフォルダ内に以下のファイルを入れます。

apache.config
files:
  /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.confhttpd.confに置き換える
④Apacheを再起動する
という手順を踏んでいます。

この手順を踏んでいる理由

元々は最初のApacheの立ち上げの前からhttpd.confを上書きしようとしたのですが、そうするとなぜかDocument Rootがデフォルトに書き換わってしまいました。
なので、ちょっとトリッキーな手順を踏みました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

知っておきたいキー操作

Ctrl + A

行頭へカーソル移動

Ctrl + E

行末へカーソル移動

Ctrl + U

カーソル位置から行頭まで削除

Ctrl + K

カーソル位置から行末まで削除

Ctrl + L

ターミナル画面をクリアにしてカーソルを一番上に持っていく

date

現在の時刻を表示

cal

カレンダーを表示

pwd

カウントディレクトリの表示

cd

ホームディレクトリへ移動

sudo -s

rootユーザーに切り替える

参考

Linuxコマンド入門教室

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux概要

Linux概要

  • 広義のLinux:Linuxディストリビューション
    • Linuxを利用できるようにまとめ上げた配布形態
  • 狭義のLinux:Linuxカーネル
    • ハードウェアとソフトウェアの中立

Linux自体はOSのカーネルに過ぎない。
実際に使用するには以下のような機能レイヤーを追加する必要がある

  • デバイスドライバ
  • シェル
  • デーモン
  • コマンド

Linuxカーネル機能

基本機能

  • アプリケーションが動作するための基本環境を提供している
    • メモリのどの場所にデータを保存するか
    • CPUのリソースをどの程度どのアプリケーションに割り振ればイイか
  • 役割は大別して2つ
    • アプリケーションからの要求に応えること
    • ハードウェアからの応答をアプリケーションに伝えること

プロセス管理

  • プロセスとは
    • メモリやCPUなどのリソースを割り当てる管理単位
    • 実行中のプログラムが利用するデータは、メモリに書き出してから使用する事になる
      • 演算の結果のデータ
      • コマンドラインで入力された値
      • 通信して取得したデータ
    • CPUがプログラムに従って、あるメモリのデータに対して演算を行なっている状態
    • 割り振られたリソースの上でプログラムはOS上のプロセスとして稼働する。
    • プロセスは基本的に役目を果たすと終了して、メモリなどの資源を解放する。
  • ゾンビプロセス
    • 役目を終えているのにメモリを解放しない状態のプロセスのこと。
    • ユーザからkillコマンドを発行しプロセスを強制的に終了させることになる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【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はジョブ番号だし。
プロセスとジョブの違いってなによ、、、、

【Linux】プロセスとジョブの終了、どっちがベター?

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Linux】プロセスとジョブの終了、どっちがベター?

プロセスとジョブの違いって何

同じ意味で使いがちだけど、、、と思って調べてみました。

ジョブは処理全体の流れ

牛を育てるところから、食べる人に届くまでがジョブ。
job.jpg

プロセスはひとつひとつの作業

牛を育てる:1プロセス
運送:1プロセス

process.jpg

ps コマンド:process status 実行中プロセスの表示
jobs コマンド:実行中ジョブ表示

たとえばkillコマンドさんはプロセスの終了に使う。

killコマンドさん
kill [PID]
#プロセスID[PID]を渡す

ということは、たくさんのプロセスを実行しているジョブさんでは、
終了したいなー→一つのプロセスを終了→ジョブ自体は終了していない可能性あり

ということで、ジョブの終了はジョブごと終了するほうがベターかも。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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したら、やっぱり壊れた^^;
原因がわからないため保留とする!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 ~]#

01.png

02.png

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です。

03.png

10. 管理画面の設定

以下のURLでブラウザから管理画面に接続します。

http://<サーバのIPアドレス>:4848/

04.png

エラーが表示される場合、以下を設定します。

管理ユーザーのパスワードを設定します。

/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/

05.png

設定した管理ユーザー/パスワード(admin/admin)でログインします。

06.png

管理画面にログインできました。

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

参考

Eclipse GlassFish | projects.eclipse.org

エラー情報

今回は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 ~]$

以上

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

オフライン環境へ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のバージョンを確認してダウンロードします。(後述)

必要に応じて入れるもの

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.18362

4. vscode-server-linux-x64.tar.gz のダウンロード

Commitを入れたURLから vscode-server-linux-x64.tar.gz をダウンロードします。

https://update.code.visualstudio.com/commit:fe22a9645b44368865c0ba92e2fb881ff1afce94/server-linux-x64/stable

5. 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:/tmp

7. 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_URL
extention.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とか出たのにエラーが出る

Refs

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む