カテゴリーアーカイブ Linux

takahashi 著者:takahashi

【Linux CUI Tips】screenコマンドを使用時の入力や実行結果をログファイルに保存する方法

CUI上で長時間かかる処理を行わせて放置したい時や複数のターミナルを使い分けたいとき、SSHなどの接続が切れて処理が中断してしまうのが怖いときなどにscreenコマンドを使用すると非常に便利です。

このscreenコマンドですが、実はscreen内で出力された内容をファイルに保存する方法があるのをご存知でしょうか。

しかも、screenを使っていれば前準備無しでログの保存ができます。

ターミナル上で

screen

と入力し、screenに入ったら、

Ctrlキ+Aキー

を押したあと、すぐに

Shift+Hキー

を押します。
すると左下にメッセージが表示されます。

この状態になれば、ログが記録されるようになります。

停止する場合はもう一度

Ctrlキ+Aキー

を押した後に

Shift+Hキー

とすればログの記録は停止されます。

なお、ロギング中のscreenでログファイルを開いてしまうと無限ループしてログファイルの容量が一気に膨れ上がってしまうそうなので注意してください。

参考サイト:
ターミナルのログを自動保存したい – まちゅダイアリー

  • この記事いいね! (0)
takahashi 著者:takahashi

CentOS 7 でepelリポジトリのnpmでアップデートを行うとnpmが消されてしまう問題の回避方法

CentOS 7 の新環境を作り、epelリポジトリからyumでnpmをインストール。

sudo yum -y install epel-release
sudo yum -y install npm

npmのバージョンを確認すると
3.10.10
と古かったため

sudo npm -g update npm

としたところ

- fstream-npm@1.2.0 node_modules/npm/node_modules/fstream-npm
- normalize-git-url@3.0.2 node_modules/npm/node_modules/normalize-git-url
- realize-package-specifier@3.0.3 node_modules/npm/node_modules/realize-package-specifier
/usr/lib
└── (empty)

npm ERR! Linux 3.10.0-862.el7.x86_64
npm ERR! argv "/usr/bin/node" "/bin/npm" "-g" "update" "npm"
npm ERR! node v6.14.3
npm ERR! npm  v3.10.10
npm ERR! path /usr/lib/node_modules/npm/node_modules/fs-write-stream-atomic
npm ERR! code EEXIST
npm ERR! errno -17
npm ERR! syscall mkdir

npm ERR! EEXIST: file already exists, mkdir '/usr/lib/node_modules/npm/node_modules/fs-write-stream-atomic'
npm ERR! File exists: /usr/lib/node_modules/npm/node_modules/fs-write-stream-atomic
npm ERR! Move it away, and try again.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/username/npm-debug.log
npm ERR! code 1

のようなエラーが出てしまい、更新に失敗します。
そればかりか…

$ npm -v
-bash: npm: コマンドが見つかりません

$ which npm
/usr/bin/which: no npm in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/username/.local/bin:/home/username/bin)

なんとnpm本体が消えてしまいました。
そんな馬鹿な…

流石にちょっと困ってしまったので、いろいろ調べたところ、npm公式のGitHubページのIssueでも同様の報告が上がっていました。

Try to update the npm cli and got an error #15821 – GitHub

内容を見ていくと、epelではなくnodejs公式のnodesourceというリポジトリを使用したら成功したという記述が。
半信半疑ながらも、nodesourceを使うことにしました。

とりあえず、一旦npmをアンインストールします。

sudo yum -y remove npm
$ sudo yum -y remove npm
読み込んだプラグイン:fastestmirror
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ npm.x86_64 1:3.10.10-1.6.14.3.1.el7 を 削除
--> 依存性の処理をしています: npm = 1:3.10.10-1.6.14.3.1.el7 のパッケージ: 1:nodejs-6.14.3-1.el7.x86_64
--> 依存性の処理をしています: npm = 1:3.10.10-1.6.14.3.1.el7 のパッケージ: 1:nodejs-6.14.3-1.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ nodejs.x86_64 1:6.14.3-1.el7 を 削除
--> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================================
 Package                 アーキテクチャー        バージョン                                リポジトリー            容量
========================================================================================================================
削除中:
 npm                     x86_64                  1:3.10.10-1.6.14.3.1.el7                  @epel                  9.8 M
依存性関連での削除をします:
 nodejs                  x86_64                  1:6.14.3-1.el7                            @epel                   16 M

トランザクションの要約
========================================================================================================================
削除  1 パッケージ (+1 個の依存関係のパッケージ)

インストール容量: 26 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  削除中                  : 1:npm-3.10.10-1.6.14.3.1.el7.x86_64                                                     1/2
警告: ファイル /usr/lib/node_modules/npm/scripts/update-authors.sh: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/scripts/relocate.sh: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/scripts/release.sh: 削除に失敗しました: そのようなファイルやディレクトリはあり ません
警告: ファイル /usr/lib/node_modules/npm/scripts/publish-tag.js: 削除に失敗しました: そのようなファイルやディレクトリは ありません
警告: ファイル /usr/lib/node_modules/npm/scripts/maketest: 削除に失敗しました: そのようなファイルやディレクトリはありま せん
警告: ファイル /usr/lib/node_modules/npm/scripts/install.sh: 削除に失敗しました: そのようなファイルやディレクトリはあり ません
警告: ファイル /usr/lib/node_modules/npm/scripts/index-build.js: 削除に失敗しました: そのようなファイルやディレクトリは ありません
警告: ファイル /usr/lib/node_modules/npm/scripts/gen-changelog: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/scripts/doc-build.sh: 削除に失敗しました: そのようなファイルやディレクトリはあ りません
警告: ファイル /usr/lib/node_modules/npm/scripts/dev-dep-update: 削除に失敗しました: そのようなファイルやディレクトリは ありません
警告: ファイル /usr/lib/node_modules/npm/scripts/dep-update: 削除に失敗しました: そのようなファイルやディレクトリはあり ません
警告: ファイル /usr/lib/node_modules/npm/scripts/clean-old.sh: 削除に失敗しました: そのようなファイルやディレクトリはあ りません
警告: ファイル /usr/lib/node_modules/npm/scripts/changelog.js: 削除に失敗しました: そのようなファイルやディレクトリはあ りません
警告: ファイル /usr/lib/node_modules/npm/scripts: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/package.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules/realize-package-specifier: 削除に失敗しました: そのようなファイル やディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules/normalize-git-url: 削除に失敗しました: そのようなファイルやディレ クトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules/fstream-npm: 削除に失敗しました: そのようなファイルやディレクトリ はありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/write-file-atomic/package.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/write-file-atomic/index.js: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/write-file-atomic/README.md: 削除に失敗しました: そのよう なファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/write-file-atomic/LICENSE: 削除に失敗しました: そのような ファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/write-file-atomic: 削除に失敗しました: そのようなファイル やディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/wrappy/wrappy.js: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/wrappy/package.json: 削除に失敗しました: そのようなファイ ルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/wrappy/README.md: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/wrappy/LICENSE: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/wrappy: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/which.js: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/package.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/windows.js: 削除に失敗しました:  そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/package.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/mode.js: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/index.js: 削除に失敗しました: そ のようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/access.js: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/README.md: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/LICENSE: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe/.npmignore: 削除に失敗しました:  そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules/isexe: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/node_modules: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/bin/which: 削除に失敗しました: そのようなファイルや ディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/bin: 削除に失敗しました: そのようなファイルやディレ クトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/README.md: 削除に失敗しました: そのようなファイルや ディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/LICENSE: 削除に失敗しました: そのようなファイルやデ ィレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which/CHANGELOG.md: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/which: 削除に失敗しました: そのようなファイルやディレクト リはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/package.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules/builtins/package.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules/builtins/builtins.json: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules/builtins/Readme.md: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules/builtins/History.md: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules/builtins/.travis.yml: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules/builtins: 削除に失 敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/node_modules: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/index.js: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/README.md: 削除に失敗しました:  そのようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/LICENSE: 削除に失敗しました: そ のようなファイルやディレクトリはありません
警告: ファイル /usr/lib/node_modules/npm/node_modules.bundled/validate-npm-package-name/.npmignore: 削除に失敗しました: そのようなファイルやディレクトリはありません
(省略)

大量の”ファイルが見つかりません”エラーが。
やっぱり本当に消えてしまってるようです…

アンインストールが完了したらnodesourceリポジトリをインストールします。

curl -sL https://rpm.nodesource.com/setup_8.x | sudo bash -

処理が完了したら、”npm”ではなく”nodejs”パッケージをインストールします。

sudo yum install -y nodejs

パッケージ名はnodejsですが、実際には同時にnpmもインストールされているため、インストールが完了すればnpmも使えます。

$ npm -v
6.4.1

バージョンも新しくなっています。

$ sudo npm -g update npm
$ which npm
/usr/bin/npm

アップデートも問題なく動作するようになったようです。

しかし、安定性の高いはずのepelリポジトリのnpmが致命的なバグを抱えたままになっているというのは…大丈夫なんでしょうか…

  • この記事いいね! (0)
takahashi 著者:takahashi

CentOS 7 にPHP7.1をインストールする方法

最近、徐々にPHP 7系を要求するアプリケーションやフレームワークが多くなってきました。
一方で、CentOS 7はデフォルトでは古めのパッケージのみを提供しているので

sudo yum -y install php 

としてもphp5.6系しかインストールできません。

しかし、CentOSで利用できる外部のリポジトリ”epel”と”remi”を用いることでphp7系をCentOS 7へインストールすることが可能になっています。
今回は、その方法をご紹介したいと思います。

まず、現時点で古いバージョンのPHPが入っている場合は、一度アンインストールが必要になります。
もし古いバージョンのPHPも必要な場合は複数のバージョンのPHPを共存させる必要となり、今回の手順ではセットアップできませんのでご注意ください。

PHPが既にインストールされているか確認します。

php -v

として

PHP 5.4.16 (cli) (built: Apr 12 2018 19:02:01) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

のようになっていれば、既に古いバージョンがインストールされているので、一旦アンインストールします。

sudo yum -y  remove  php-cli php-common

epelリポジトリをインストールします。

sudo yum -y install epel-release

remiリポジトリをインストールします。

sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

ここまで行えば、php7.1のインストールが可能になっています。
次のコマンドでphp7.1をインストールしてみます。

sudo yum install --enablerepo=remi,remi-php71 php php-devel 

インストール完了後、再度php -vをして

php -v
PHP 7.1.24 (cli) (built: Nov  7 2018 18:45:17) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

となっていれば成功です。

なお、remiリポジトリからphpに入れた際、PHPモジュールの参照先が別の場所になってしまうことがあるようです。
その場合は、php.iniに次の記述を追加してください。

extension_dir = "/opt/remi/php71/root/usr/lib64/php/modules" 

※PHPバージョンによって異なります。”sudo rpm -ql インストールしたphpのパッケージ名”を実行してインストール先を確認してください。

  • この記事いいね! (0)
takahashi 著者:takahashi

他のデバイスのWindowsのサブディスプレイ化が簡単にできるアプリ”spacedesk”

Windows 10 から、Windowsには標準機能で”このPCへのプロジェクション”機能がついています。
この機能を使うと、Miracast対応デバイスをWindows PCのサブディスプレイとして使うことができます。
標準機能なので手間もかからず、安心して使えるのはとてもいいところなのですが、まだ粗削りな部分が多く、解像度の相性が悪かったりすると画面のサイズが合わなかったり、うまく動作しなかったりという部分がまだあります。
また、Miracast対応デバイスでないと接続できないため、mac OS/iOSやLinux等では通常利用できません。

そんなこともあって代替えになりそうなアプリをいろいろ探していたところ、こちらのアプリを見つけました。

spacedeskというアプリです。

サーバー(仮想ディスプレイを使う側)はWindowsのみ対応になっていますが、クライアント側(仮想ディスプレイになる側)はWindowsの外に、iOSとAndroidのデバイスも使うことができ、さらにHTML5版も用意されているので、macOSやLinux、ChromeOSなどでも利用することができます。

自分の手元のPCで試したところ、アプリ版よりもHTML5版の方がより高速に動作している印象でした。

大きなメニューアイコンが出てくるのが玉に瑕ですが、使っている分にはあまり気になりませんでした。

操作も簡単で使いやすいので、暫く使ってみたいと思います。

  • この記事いいね! (0)
takahashi 著者:takahashi

IBMがRedHatを買収 気になるRedHat系OSへの影響

昨日、衝撃のニュースが発表されました。

IBMがRedHat買収合意を発表。買収額約3.8兆円、クラウド分野でアマゾン・マイクロソフト追撃 – Engadget 日本版

なんとオープンソース界隈で非常に大きな影響力をもつRedHat社がIBMに買収されてしまいました。
しかもその買収額は3兆8000億というとんでもない額。これには世界中のIT界隈の人々が驚いたことだと思います。

RedHat社は商用(有料)Linuxディストリビューションの中でも非常に人気の高いRedHat Enterprise Linux (RHEL)を開発、販売している会社です。
また、Linuxディストリビューションのfedoraや、RHELのオープンソース部分を使用して作られたCentOSなどともかかわりが深く、開発に協力していたり、これらのディストリの成果をRHELにも取り込んでいたりと、かなり密接な関係をもつ、オープンソース界隈でもかなり影響力の高い企業でした。

今回の買収でRedHatが完全にIBM傘下に収められたわけですが、個人的に懸念していることがあります。
RedHatは完全にオープンソースへの協力を積極的に行っている企業なのは目に見えてわかりますが、一方IBMについては、個人的に「…?」という印象でした。
もしかすると実際はいろいろなプロジェクトを支援しているのかもしれませんが、少なくとも最近になってオープンソース支援へとシフトしつつあるMicrosoftよりも地味な印象でした。

買収後もRedHatの動きについては現状のままにしたいとIBMは言っているようですが、IBMのオープンソースへのスタンスがいまいちわからないので、個人的にはちょっと不安です。

CentOSは、もともとRHELのオープンソース部分を利用して、有志のメンバーがRHELと同等の機能を持つことを目指して開発されている、RedHat Linuxから派生したRedHat系のLinuxディストリビュージョンです。CentOS自体はもともとRedHatとは関係がありませんでしたが、2014年にRedHatが正式に派生OSとして承認を出し、RedHatから直に開発支援を受けられる状態になりました。

今更聞けない!CentOSとRed Hatの違いとは? – エンジニアの入り口

そんなわけで、現在CentOSはサーバーOSとして非常に人気が高く、LinuxをサーバーOSとして使用する企業や団体の多くで使用されている上、各IaaSクラウドサービスのほどんどで公式フレーバーが提供されているほどになっています。

今後IBMが介入してくることでこういったCentOSや同じくRedHatが支援するfedoraとの関係が変化してしまうのではないか、と個人的に心配しています。

ただ、買収されたからと言って悪い方に転ぶとは限りませんし、今よりより良くなっていく可能性もあると思います。
今後RedHatの買収によってこの辺りがどうなっていくのか…注目していきたいですね。

  • この記事いいね! (3)
takahashi 著者:takahashi

GoogleChrome 70 がリリース HTTPページの警告の厳格化やPWAの正式対応などが追加

いつの間にかGoogleChrome Ver.70がリリースされていたようですね。

New in Chrome 70 – Google Developers

米国現地時間の10月16日にリリースされたVer.70では、幾つか大きな変更がされているようです。

・非SSLサイトで文字入力を行うと、アドレスバーに赤文字の”保護されていない通信”が表示されるように変更

ついに、SSL通信(アドレスがhttps://から始まるもの)に対応していないサイトで、フォームなどのテキストボックスに文字を入力すると、無効なSSLが設定されたサイトと同様にアドレスバーの”保護されていない通信”の表示が赤文字に変化するように変更されました。

これは以前から予告されていた変更で、Chromeの”常時SSLが基本”という考え方を反映した物にするために、段階的に変更されてきたものです。

Moving towards a more secure web – Google Security Blog

入力フォームのない非SSLサイトでは、黒文字の”保護されていない通信”が表示されるだけですが、入力フォームの存在する非SSLサイトの場合は入力フォームに一文字でも何か文字を入力した時点で、アドレスバーの”保護されていない通信”が無効なSSL証明書を搭載したサイトと同様に赤文字に変わります。

事情を知っているユーザーならまだしも、こういった事情を知らない一般ユーザーからすると、セキュリティ的に問題のあるサイトとして見られてしまう可能性があります。

そもそもChromeがこういった対応をする前から、ユーザーになにか情報を入力させる機能を提供する場合はSSLに対応するのが常識でしたし、最近はLet’s Encryptのような無料のSSL証明書もでていますので、まだSSLに対応されていないサイトをお持ちの方はすぐにSSL対応化していただくことをお勧めします。

・Windows版ChromeがPWAに正式に対応

いままで実験的機能として実装されていたPWA(プログレッシブウェブアプリ)ですが、ついにWindows版Chromeで正式に有効化されたようです。
PWAとはWebアプリとして提供されているインターネット上のWebサイトを、あたかもネイティブ(OSにインストールしたような)アプリとして動いているかのように動作させるできることができる機能です。

通常、Webサイトとして作られたWebアプリは、インターネットにつないでいないと起動できないうえ、ユーザーがWebサイトを開かないと何もできない受動的な仕組みでした。
PWAが有効になることで、こういったWebサイトをPWAに対応させることで、対応ブラウザを通してOSのアプリの一つとしてインストールできたり、インターネットに接続していなくても起動できたり、Webサイトを閉じていても通知が受け取れたり、といった恩恵が受けられるようになります。
またPWAの本質はWebサイトなので、各OS用にプログラムを書き直したり、ビルドし直したり、といった作業をほとんどすることなくクロスプラットフォームアプリを作れるのも大きな利点です。

有名どころでは、現時点でTwitter LiteGoogle PhotoなどのサービスがPWAに対応していますので、早速体験してみたい!という方は是非試してみてはいかがでしょうか。

Twitterにアクセスできなくなった「Twitter for Mac」の代わりはChromeのPWAで「Twitter Lite」を使うのが最適? – AAPL.Ch

なお、公式ブログによると、macOS版ChromeではVer.72で正式対応予定とのことですが、早く試したいという方は従来通り実験機能を有効にすることで現時点でも利用できるようになります。(有効化の方法は上記記事をご覧ください。)

・WebWorkerで実装した各処理に名前を付けることが可能に。

WebWorkerとは、javascriptの処理をバックグラウンドで行わせることができる仕組みです。

Javascriptは少し特殊で、基本的にすべての処理をメインスレッド(メインのプロセス)だけで行います。
そのため、Javascriptで書いたプログラムのどこかで重い処理を行ってしまうと、その処理が終わるまでほかの処理を行うことができないため、結果的にWebアプリがフリーズしたような状態になってしまうことがありました。

こういった処理にWebWorkerを使用することで、その部分の処理はメインスレッドとは別のスレッド(プロセス)で行わせることができるため、重い処理を行わせてもWebアプリがフリーズしにくくなり、快適な動作をさせることができます。

今回のアップデートで、WebWorkerで書かれた各処理ごとに名前が付けられるようになったようで、これにより複数のWebWorkerを使用した場合のデバッグがしやすくなるようです。

ほかにも多くの修正が行われたChrome Ver.70。
今回は魅力的な機能もいくつか正式実装されているようですので、Chrome使いの皆さんは変更点を是非チェックしてみてください。

  • この記事いいね! (0)
takahashi 著者:takahashi

SystemdでNode.jsのサーバープログラムをお手軽にデーモン化する方法

以前SoftEtherVPNを手軽にSystemdでデーモン化する方法をご紹介しましたが、実は、最近よく使われるNode.jsで書いたサーバープログラムも、Systemdを使うと簡単にデーモン化できるようです。

centos7で標準のsystemdを使いnode.js製サーバーをデーモン化する – Qiita

Node.jsはjavascriptのサーバーサイド版の言語・実行環境で、ほぼjavascriptと同じ言語を使ってサーバー側の処理を書くことができます。
Node.jsのライブラリにも”forever”というプログラムをデーモン化してくれるライブラリがあるのですが、OS起動時と同時に実行させたりする際はちょっと不安が残ります。

起動時にうまくNode.js製のサーバーをデーモンとして動作させる方法がないか探したところ、なんとSystemdのみで実現できるとのことだったので、実際に試してみました。
nodeのプログラムをsystemdを使ってデーモン化するには、

/etc/systemd/system/デーモン名.service

のような名前でファイルを作り、下記のように設定を書き込みます。

[Unit]
Description=node server #任意の説明
After=syslog.target network.target

[Service]
Type=simple
ExecStart=/usr/bin/node /path/to/Node.jsProgramPath #記法:ExecStart=node.js本体のパス node.js向けに書いたサーバープログラムのパス
WorkingDirectory=/path/to/ #作業ディレクトリの場所(スクリプト実行時にカレントディレクトリになっていて欲しい場所)
KillMode=process
Restart=always
User=centos #node.jsプログラム実行ユーザー
Group=centos #node.jsプログラム実行ユーザー

[Install]
WantedBy=multi-user.target

上記のような内容でファイルを保存したら後はお決まりの

systemctl enable デーモン名
systemctl start デーモン名

これだけでnode.jsのプログラムがデーモン化され、OS起動時の自動起動にも登録されます。

Systemdはファイルの記法がわかりづらくて嫌煙されがちな印象でしたが、いろんなプログラムをいとも簡単にデーモン化できてしまうあたり、もしかするとかなり優秀なのかもしれません…

  • この記事いいね! (0)
takahashi 著者:takahashi

Ubuntuのアップグレード機能を使って、16.04から18.04へアップグレードしてみる。

久々に、UbuntuのOSアップグレードを試してみました。
今回は16.04から18.04へのアップグレードです。

インターネットにつながっていて、かつ最新のパッケージリストを取得できていれば、上のようなダイアログが出現するかと思います。
出現しない場合は、

sudo apt update

を実行してみてください。

(※アップグレードは失敗するとOSが壊れる可能性のある結構リスキーな操作です。PCの強制シャットダウンなどの不正操作を行わない限り基本的に壊れることはないとは思いますが、念のためアップグレード前にバックアップを取っておくことをお勧めします。)

Ubuntuのバージョンをアップグレードする場合は”いますぐアップグレードする”をクリックします。

管理者権限が必要となるので、sudoが使えるユーザーの認証情報を入力します。

リリースノート(英文)が表示されるので、内容を確認して”アップグレード”をクリックすると、アップグレード処理が開始されます。

サードパーティのリポジトリはすべて無効化されます。
自分でリポジトリを追加した場合は、アップグレード後に再度追加する必要があります。

最終確認が出てきます。
“アップグレードを開始”をクリックすると、新しいバージョンへの上書きが実行されます。

暫く待ちます。

アップグレード後に使用するディスプレイマネージャー(GUIの動作を管理するアプリケーション)を、従来のLightDMを使うかGDM(Gnome標準)に変更するか聞かれます。
18.04でのデフォルトはGDMですが、自分の場合LightDMを選択しました。
現時点では特に不具合は出ていないようですので、ここはお好みで選択しても大丈夫かと思います。(後から切り替えることもできます。詳しくは検索してみてください。)

18.04ではサポートされない古いパッケージ(アプリやライブラリなど)を削除するか聞かれます。
対象のパッケージが一覧で確認できるので、削除されても問題ないか確認して問題なければ”削除”を選択します。

すべて完了すると、再起動を促されるので必ず再起動をクリックします。

この時点で壁紙がすでに新しいバージョンのものに差し変わってますね。
気付きましたか?

再起動してログインすると、初期画面が表示されます。
画面に従って初期設定を進めていきます。

これで更新作業は完了です。

昔のUbuntuはアップグレードすると不具合が結構出ることもあったのですが、今回はアップグレードによって発生したと思われる目立った不具合は見つけていません。
CUIでの使用がメインというのもあるかもですが、安定性はどんどん上がっている気がしますね。

興味のある方は是非お試しください。

  • この記事いいね! (0)
takahashi 著者:takahashi

SystemctlでSoftEtherVPNをデーモン化する

SoftEtherVPNはたくさんの接続オプションを持っていて、無料のVPNサーバーソフトの中ではおそらく”最もつなげやすい”ソフトではないかなと思います。

そんなSoftEtherVPNですが、Linux版の場合はソースの状態で配布されており、各マシンにダウンロードしてからmakeでビルドする形になっています。
なのでmakeに必要なライブラリさえOS側で用意されていれば、ディストリビューションやアーキテクチャ関係なく使用することができるようになっています。

その関係か、パッケージにはデーモン化のスクリプトは含まれておらず、自力でデーモン化する必要があります。

といっても、作業自体は起動スクリプトを/etc/init.dに置いてchkconfigやsystemctlで有効化すだけです。
起動スクリプトはSoftEtherVPNの公式ドキュメントに記載されています。

#!/bin/sh
# chkconfig: 2345 99 01
# description: SoftEther VPN Server
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
touch $LOCK
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

ところが、今回Ubuntu 18.04のサーバーに組み込んだ所、うまく動作せず。
いろいろ調べたところ、SystemdのUnitファイルで動作させる方法があったのでこちらを試してみました。
(※管理者権限が必要です。)

Ubuntu上でSoftEther VPN Server構築 – Qiita

[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target

[Service]
ExecStart=vpnserverがインストールされているパス/vpnserver start
ExecStop=vpnserverがインストールされているパス/vpnserver stop
Type=forking
RestartSec=3s

[Install]
WantedBy=multi-user.target

上記の内容でUnitファイルを作り、下記の場所に保存します。
/etc/systemd/system/vpnserver.service

保存したら次のコマンドを実行します。

systemctl daemon-reload

これで準備は完了いつも通りに起動します。

systemctl start vpnserver

これで起動したかと思います。
自動起動する場合は

systemctl enable vpnserver

も実行しておきます。

Systemdがいまいちわかりづらいのでinit.dを使っていましたが、これならsystemdネイティブでも使えそうです。
init.dスクリプトでうまく起動できない、という方はぜひ試してみてください。

  • この記事いいね! (0)
takahashi 著者:takahashi

Ubuntu 16.04 でLivePatch を有効化してみた。

Ubuntu 18.04 でGUI操作が可能になったCaconical LivePatchですが、コマンドラインであればUbuntu 16.04でも適用が可能になっています。
結構手間がかかるかなーという印象だったのですが、やってみたところとても簡単でした。

コマンドラインでLivePatchを有効化するには、UbuntuOneで発行できる専用のトークンが必要になります。

まず、Canonical Livepatch Serviceサイトにアクセスして、トークンを取得します。

サイトにアクセスしたら、無料ユーザーの場合は”Ubuntu User”を選択し、”Get Your LivePatch token”をクリックします。

ログイン画面が出てくるので、自分のUbuntuOneアカウント情報を入力してログイン。
UbuntuOneアカウントを持っていない場合は
”I don’t have an Ubuntu One account”
からアカウントを作成できます。

LivePatchは1アカウントにつき、3台のマシンまで無料利用可能となっているため、注意してください。

LivePatchのページでログインすると、こんな表示が出てきます。

一つ目の欄にあるランダムな文字列がトークンになります。

まず、LivePatchパッケージをインストールします。
端末(Terminal)で次のコマンドを入力します。

sudo snap install canonical-livepatch

LivePatchパッケージのインストールが始まるので、暫く待ちます。
完了したら次のようにコマンドを入力します。

sudo canonical-livepatch enable 先程のトークン

これでLivePatchが有効になるはずです。
念のため、ちゃんと動作しているか確認します。

出力された情報の中に

running: true

と表示されていれば有効になっています。

Ubuntu 16.04でもLivePatchを使用したいという方は、是非参考にしてみてください。

  • この記事いいね! (0)