カテゴリーアーカイブ オープンソース

著者:ym

UTF-8からUTF-8の4バイト

かなーり古いバージョンから引きずってバージョンアップしてきた為、データベースのキャラセット変更です。きっかけとしては NextCloud のワーニング表示。Windowsのファイル名に関連するのかわからないが、毎度出てくるので変更です。

mysql>  show variables like 'innodb_file_format';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| innodb_file_format | Antelope |
+--------------------+----------+
mysql> SET GLOBAL innodb_file_format=Barracuda;
Query OK, 0 rows affected (0.01 sec)

まずは、データベースの InnoDB のフォーマットを Anteloope から Barracuda にオンライン変更。当然事前バックアップ済み。

mysql> show variables like 'innodb_file_format';
+--------------------+-----------+
| Variable_name      | Value     |
+--------------------+-----------+
| innodb_file_format | Barracuda |
+--------------------+-----------+
1 row in set (0.00 sec)

my.cnf の [mysqld] へ innodb_file_per_table=1とinnodb_file_format = Barracudaを追加して再起動。って、先のオンライン変更の意味があったかは不明だが。

その後は、単一データベース nextcloud のキャラセットを utf8mb4 へ変更。

mysql> ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Query OK, 1 row affected (0.02 sec)

NextCloud の occ で変換実行。エラーがでてビビりました。

$ sudo -u apache php ./occ config:system:set mysql.utf8mb4 --type boolean --value="true"

System config value mysql.utf8mb4 set to boolean true



$ sudo -u apache php ./occ maintenance:repair

 - Repair MySQL collation
     - Change row format for oc_accounts ...
     - Change collation for oc_accounts ...
     - Change row format for oc_activity ...
     - Change collation for oc_activity ...
     - Change row format for oc_activity_mq ...
     - Change collation for oc_activity_mq ...
     - Change row format for oc_addressbookchanges ...
     - Change collation for oc_addressbookchanges ...
     - Change row format for oc_addressbooks ...
     - Change collation for oc_addressbooks ...

In AbstractMySQLDriver.php line 106:

  An exception occurred while executing 'ALTER TABLE `oc_addressbooks` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;':

  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes


In PDOStatement.php line 119:

  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes


In PDOStatement.php line 117:

  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes


maintenance:repair [--include-expensive]

my.cnf の [mysqld] へ innodb_large_prefix=true を追加して再実行。


Nextcloud is in maintenance mode - no apps have been loaded

 - Repair MySQL collation
     - Change row format for oc_addressbooks ...
     - Change collation for oc_addressbooks ...
     - Change row format for oc_appconfig ...
     - Change collation for oc_appconfig ...
     - Change row format for oc_authtoken ...
     - Change collation for oc_authtoken ...
     - Change row format for oc_bruteforce_attempts ...
     - Change collation for oc_bruteforce_attempts ...
     - Change row format for oc_calendar_invitations ...
     - Change collation for oc_calendar_invitations ...
     - Change row format for oc_calendar_reminders ...
     - Change collation for oc_calendar_reminders ...
     - Change row format for oc_calendar_resources ...
     - Change collation for oc_calendar_resources ...
     - Change row format for oc_calendar_resources_md ...
     - Change collation for oc_calendar_resources_md ...
     - Change row format for oc_calendar_rooms ...
     - Change collation for oc_calendar_rooms ...
     - Change row format for oc_calendar_rooms_md ...
     - Change collation for oc_calendar_rooms_md ...
     - Change row format for oc_calendarchanges ...
     - Change collation for oc_calendarchanges ...
     - Change row format for oc_calendarobjects ...
     - Change collation for oc_calendarobjects ...
     - Change row format for oc_calendarobjects_props ...
     - Change collation for oc_calendarobjects_props ...
     - Change row format for oc_calendars ...
     - Change collation for oc_calendars ...
     - Change row format for oc_calendarsubscriptions ...
     - Change collation for oc_calendarsubscriptions ...
     - Change row format for oc_cards ...
     - Change collation for oc_cards ...
     - Change row format for oc_cards_properties ...
     - Change collation for oc_cards_properties ...
     - Change row format for oc_collres_accesscache ...
     - Change collation for oc_collres_accesscache ...
     - Change row format for oc_collres_collections ...
     - Change collation for oc_collres_collections ...
     - Change row format for oc_collres_resources ...
     - Change collation for oc_collres_resources ...
     - Change row format for oc_comments ...
     - Change collation for oc_comments ...
     - Change row format for oc_comments_read_markers ...
     - Change collation for oc_comments_read_markers ...
     - Change row format for oc_credentials ...
     - Change collation for oc_credentials ...
     - Change row format for oc_dav_cal_proxy ...
     - Change collation for oc_dav_cal_proxy ...
     - Change row format for oc_dav_shares ...
     - Change collation for oc_dav_shares ...
     - Change row format for oc_directlink ...
     - Change collation for oc_directlink ...
     - Change row format for oc_external_applicable ...
     - Change collation for oc_external_applicable ...
     - Change row format for oc_external_config ...
     - Change collation for oc_external_config ...
     - Change row format for oc_external_mounts ...
     - Change collation for oc_external_mounts ...
     - Change row format for oc_external_options ...
     - Change collation for oc_external_options ...
     - Change row format for oc_file_locks ...
     - Change collation for oc_file_locks ...
     - Change row format for oc_filecache ...
     - Change collation for oc_filecache ...
     - Change row format for oc_filecache_extended ...
     - Change collation for oc_filecache_extended ...
     - Change row format for oc_files_trash ...
     - Change collation for oc_files_trash ...
     - Change row format for oc_flow_checks ...
     - Change collation for oc_flow_checks ...
     - Change row format for oc_flow_operations ...
     - Change collation for oc_flow_operations ...
     - Change row format for oc_group_admin ...
     - Change collation for oc_group_admin ...
     - Change row format for oc_group_user ...
     - Change collation for oc_group_user ...
     - Change row format for oc_groups ...
     - Change collation for oc_groups ...
     - Change row format for oc_jobs ...
     - Change collation for oc_jobs ...
     - Change row format for oc_login_flow_v2 ...
     - Change collation for oc_login_flow_v2 ...
     - Change row format for oc_migrations ...
     - Change collation for oc_migrations ...
     - Change row format for oc_mimetypes ...
     - Change collation for oc_mimetypes ...
     - Change row format for oc_mounts ...
     - Change collation for oc_mounts ...
     - Change row format for oc_notifications ...
     - Change collation for oc_notifications ...
     - Change row format for oc_notifications_pushtokens ...
     - Change collation for oc_notifications_pushtokens ...
     - Change row format for oc_oauth2_access_tokens ...
     - Change collation for oc_oauth2_access_tokens ...
     - Change row format for oc_oauth2_clients ...
     - Change collation for oc_oauth2_clients ...
     - Change row format for oc_preferences ...
     - Change collation for oc_preferences ...
     - Change row format for oc_preview_generation ...
     - Change collation for oc_preview_generation ...
     - Change row format for oc_privacy_admins ...
     - Change collation for oc_privacy_admins ...
     - Change row format for oc_privatedata ...
     - Change collation for oc_privatedata ...
     - Change row format for oc_properties ...
     - Change collation for oc_properties ...
     - Change row format for oc_schedulingobjects ...
     - Change collation for oc_schedulingobjects ...
     - Change row format for oc_share ...
     - Change collation for oc_share ...
     - Change row format for oc_share_external ...
     - Change collation for oc_share_external ...
     - Change row format for oc_storages ...
     - Change collation for oc_storages ...
     - Change row format for oc_systemtag ...
     - Change collation for oc_systemtag ...
     - Change row format for oc_systemtag_group ...
     - Change collation for oc_systemtag_group ...
     - Change row format for oc_systemtag_object_mapping ...
     - Change collation for oc_systemtag_object_mapping ...
     - Change row format for oc_text_documents ...
     - Change collation for oc_text_documents ...
     - Change row format for oc_text_sessions ...
     - Change collation for oc_text_sessions ...
     - Change row format for oc_text_steps ...
     - Change collation for oc_text_steps ...
     - Change row format for oc_trusted_servers ...
     - Change collation for oc_trusted_servers ...
     - Change row format for oc_twofactor_backupcodes ...
     - Change collation for oc_twofactor_backupcodes ...
     - Change row format for oc_twofactor_providers ...
     - Change collation for oc_twofactor_providers ...
     - Change row format for oc_twofactor_totp_secrets ...
     - Change collation for oc_twofactor_totp_secrets ...
     - Change row format for oc_users ...
     - Change collation for oc_users ...
     - Change row format for oc_vcategory ...
     - Change collation for oc_vcategory ...
     - Change row format for oc_vcategory_to_object ...
     - Change collation for oc_vcategory_to_object ...
     - Change row format for oc_whats_new ...
     - Change collation for oc_whats_new ...
     - Change row format for oc_federated_reshares ...
     - Change collation for oc_federated_reshares ...
 - Repair mime types
 - Clean tags and favorites
     - 0 tags of deleted users have been removed.
     - 0 tags for delete files have been removed.
     - 0 tag entries for deleted tags have been removed.
     - 0 tags with no entries have been removed.
 - Repair invalid shares
 - Move .step file of updater to backup location
 - Fix potential broken mount points
     - No mounts updated
 - Add log rotate job
 - Clear frontend caches
     - Image cache cleared
     - SCSS cache cleared
     - JS cache cleared
 - Clear every generated avatar on major updates
 - Add preview background cleanup job
 - Queue a one-time job to cleanup old backups of the updater
 - Cleanup invalid photocache files for carddav
 - Add background job to cleanup login flow v2 tokens
 - Remove potentially over exposing share links
     - No need to remove link shares.
 - Clear access cache of projects
 - Cleanup cypress files from viewer app
 - Switches from deprecated "production" to "stable" update channel
 - Sets the enterprise logo
     - Repair step already executed
 - Fix component of birthday calendars
     - 2 birthday calendars updated.
 - Regenerating birthday calendars to use new icons and fix old birthday events without year
     - Repair step already executed
 - Fix broken values of calendar objects
    0 [>---------------------------]
 - Registering building of calendar search index as background job
     - Repair step already executed
 - Registering background jobs to update cache for webcal calendars
     - Added 0 background jobs to update webcal calendars
 - Registering building of calendar reminder index as background job
     - Repair step already executed
 - Clean up orphan event and contact data
     - 0 events without a calendar have been cleaned up
     - 0 properties without an events have been cleaned up
     - 0 changes without a calendar have been cleaned up
     - 0 cached events without a calendar subscription have been cleaned up
     - 0 changes without a calendar subscription have been cleaned up
     - 0 contacts without an addressbook have been cleaned up
     - 0 properties without a contact have been cleaned up
     - 0 changes without an addressbook have been cleaned up
 - Remove activity entries of private events
     - Removed 0 activity entries
 - Fix the share type of guest shares when migrating from ownCloud
 - Copy the share password into the dedicated column
 - Update OAuth token expiration times
 - Add background job to check for backup codes

無事完了です。これでメンテナンスモードをOFFにして完了。

$ sudo -u apache php ./occ maintenance:mode --off

代わり映えしませんが、メッセージ表示は消えました。

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

Kali Linuxの言語を日本語化する方法

ペネトレーションテストツールを多数収録している、セキュリティ系ハッカー御用達(クラッカーではない(←重要))のLinuxディストリビュージョンとして有名なKali Linuxですが、実はWindowsのWSLでも利用可能になっています。

このWSL版Kali Linuxですが、以前ご紹介したWSL版Ubuntuと同様、デフォルトでは言語が英語になっていますが、日本語化を行うこともできます。

ただし、同じDebian系とはいえUbuntuと手順が異なっているので注意です。

Kali Linuxで日本語化を行うには”locales”というパッケージが必要です。

入っていない場合はまずインストールをします。

sudo apt update
sudo apt install locales

locales のインストールが完了したら、下記のコマンドを実行します。

sudo dpkg-reconfigure locales

下記のような画面が出てくるので、ja_JP.UTF-8 UTF-8 を選択します。(スペースキーで選択できます。)

選択したらTABキーを押して<OK>の部分が赤くなったらEnterキーを押します。

次にシステムの標準言語を選択する画面が表示されますので、

こちらでも”ja_JP.UTF-8″を選択し、Tabキー->OKでエンターキーを押します。

これで設定完了です。

あとは一度ターミナルを開きなおし、何かコマンドを実行すると…

日本語に対応しているコマンドであればバッチリ日本語に切り替わっています。

Kali Linuxを日本語で使いたい方はぜひ試してみてください。

Change language of installed Kali

Docker debian系のlocaleを日本語化する – Qiita

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

音楽聞き放題Webサービス”PlayMusic”をデスクトップアプリ化してくれるアプリ”Google PlayMusicDesktopPlayer”

僕はGoogleのサービスを結構愛用しているのですが、それらのサービスの一つに、”GooglePlayMusic”があります。

これはGoogleが運営している所謂”音楽聞き放題サービス”なのですが、他のサービスと違う特徴として、自分が既にファイルとして所持している音楽ファイルもアップロードすることで再生リストに追加できる点があります。

元々はCDからコピーして自宅HDDに保存してシャッフル再生…という使い方をしていたので、PlayMusicはそんな僕のようなユーザーにもピッタリな音楽サービスとなっています。

そんなPlayMusicですが、欠点の一つとして”PC向けのプレイヤーアプリがない”点があります。

AndroidやiOS向けのアプリは他のサービス同様にあるのですが、PC向けの公式ネイティブアプリは同期専用のアプリ以外存在しません。

なのでPCからPlayMusicにアクセスするにはブラウザからアクセスする方法のみになります。

ただ音楽を聴くだけならいいのですが、ヘビィユーザーになってくると、ちょっと不便に感じる瞬間が出てきます。

システムとの相性が悪くてキーボートのホットキーで再生停止ができなかったり、ウインドウを開いていないと再生が止まってしまったり、OS統合機能の一部が利用できなかったりなどです。

やっぱりPlayMusicもネイティブアプリのような機能が使いたい…!という贅沢な悩みを解決してくれるアプリが、実はオープンソースで作られていました。

Google Play Music Desktop Player

というアプリです。

TweetDeckベースアプリのTweetenのような所謂”専用ブラウザ”系アプリで、 元々のPlayMusicの機能をアプリがオーバーライドすることで機能追加を実現しています。

Google Play Music Desktop Playerの場合も、立ち上げ直後は本家Webアプリと一見変わらなそうに見えますが、本家にはない便利な機能がいくつか追加されています。

例えば…

サイドメニューに、”Alarm”という機能が追加されています。
これをクリックすると…

こんな感じで、時間指定で音楽を流すことができる機能になっています。

他にも、

ミニプレイヤー機能や

ウインドウを閉じても再生を継続してくれる常駐機能もついています。

また、メニューのデスクトップ設定からアクセスできる

Playback APIを有効化すれば、Windowsのプレイヤー連係機能を利用して、再生中の曲をロック画面などに表示したり、他の機能と連携したりもできます。

また、PlayMusicに対してキーボードの”再生/停止”ホットキーが効かないPCも、このAPIを有効にすることで効くようになる場合もあるようです。

※Playback APIは一部セキュリティソフトを利用中の場合にブロックされてしまう場合があるようなので、注意してください。

こんな感じで Google Play Music Desktop Player にはネイティブプレーヤーアプリさながらの機能が利用できるので、ヘビィユーザーにとってはなかなかうれしい内容になっています。

何より、 Google Play Music Desktop Player はネイティブアプリとして扱われるので、

OS標準のランチャーにもちゃんとアプリのアイコン付きで追加できるのがうれしいですね。

Google Play MusicをPCで使われている皆さん、是非一度試してみてはいかがでしょうか。

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

IPFSにファイルをアップロードしてみた!

前回の記事で、IPFSのインストール方法についてご紹介しました。
今回は実際にIPFSに対してファイルをアップロードしてみたいと思います。

前回までの操作で、ipfsコマンドがどのユーザー・どのディレクトリからでも叩ける状態になっているはずです。
今回は、自分が撮影した画像で、IPFSに上げても問題なさそうなものを使用してみました。
IPFSに一度アップロードしたファイルは基本的に二度と削除することは出来ませんので、アップロードする際は十分注意してください。

まず、IPFSにアップロードしたいファイル(形式はなんでも大丈夫ですが、あまり大きくない方がよさそうです。)をipfsコマンドを動かす環境上に用意します。

ファイルを準備したら、実際にアップロードを行ってみます。

ipfs add ファイル名

するとファイルに紐づく一意のID(ハッシュ値)が生成されます。

$ ipfs add hoge.txt

added Qm678e851755589c2ed8905b10e0e8302a694af7e40ee86abacfa4bddfba859bb1 hoge.txt

IPFSでは、このハッシュ値こそがHTTPでいうURLのような、絶対的なパスとなります。

なぜハッシュ値が使われるのかというと、もしIPFS上に全く同じファイルが存在した場合、重複したファイルを同じファイルとして扱うことができる(IPFS上では単に目的のファイルを閲覧できればいいので、何処で上げたか、誰が上げたかは区別されない)上、内容が少しでも異なっていれば違うハッシュ値になるという特性からコンテンツの内容とハッシュ値が1:1で対応するからです。

ipfsではアップロードしただけではファイルの永続性が保証されないので、ipfsコマンドで”pin”をしてファイルを永続化させます。

ipfs pin add コンテンツのハッシュ値

あとは
https://gateway.ipfs.io/ipfs/コンテンツのハッシュ値
のようにIPFSゲートウェイから参照すると、自分が先程アップロードしたコンテンツの内容がブラウザ上で表示されるはずです。

なお、実際にIPFSでWebサイトなどを公開しようとした場合を考えた時、コンテンツの更新時に毎回異なるハッシュ値が生成されることになるので、毎回リンク先が変わってしまうことになります。

これでは不便なので、IPFSには”IPNS”という仕組みが備えられています。
IPNSはIPFS上にアップロードしたコンテンツに対してランダムな名前(エイリアス)を付けることができる仕組みです。

IPNSを利用することで、元のコンテンツを更新しても、IPNS名を使えば同じ名前で更新後のコンテンツへアクセスすることができるようになります。

コンテンツをIPNSと紐づけるには

ipfs name publish コンテンツのハッシュ値

のようにコマンドを実行します。

紐づけたコンテンツは

https://gateway.ipfs.io/ipns/上のコマンドで出力されたipns名

のように各IPFSゲートウェイから参照できます。

実際にIPFSを触ってみた感想として、IPFSのアイデアはとても面白いと感じました。

特に、一度IPFS上にアップロードしてしまえば、どのIPFSゲートウェイノードからでも同じコンテンツが参照できてしまうのはなかなか面白い仕組みだと思います。

一方で、IPFS自体にはまだ認証システムが備わっておらず、アップロードしたファイルはハッシュ値さえ知られてしまえばだれでも閲覧可能であったり、
IPFS上にアップロードしたファイルはアップロードした本人ですら削除できないため、誤って重要なファイルをIPFSにアップロードしても取り消せなかったり、また使用されなくなったファイルがゴミとしてIPFS上に残り続けてしまう、などといった弱点も見えてきました。

完全に一般公開するようなコンテンツであれば現状でも問題ありませんが、HTTPをIPFSで置き換える為には、やはり認証の問題は避けては通れないと思います。

この辺りがもう少し解決されれば、いよいよ実用的に利用できる段階になっていくのではないかな、と思いました。

是非今後の展開に注目したいですね。

参考:

IPFSを触ってみた

IPFSを使って無料で静的サイトをホスティング(公開)してみる

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

CentOS7にIPFSをセットアップしてみる

以前記事でご紹介したIPFSですが、今回は実際に自分の持っているCentOSの環境にIPFS環境一式をインストールしてみました。

今回はそのやり方についてご紹介したいと思います。

まず、IPFSの動作にはgo言語の動作環境が必要になりますのでインストールします。

sudo yum -y install go
または
sudo yum -y install golang

次にIPFSをインストールするために必要な環境を整えます。
/usr/local/
ディレクトリにgo言語周りのパッケージをインストールする場所を作成します。

sudo mkdir -p /usr/local/go

次にパスを通します。

sudo vi /etc/profile

を実行し、一番下の行に次の記述を追記します。

PATH=$PATH:/usr/local/go/bin
export GOPATH=/usr/local/go
export GOBIN=$GOPATH/bin

一度ログイン中の端末からログアウトし、再度ログインします。

次に下記のコマンドを実行します。

go get -u -d github.com/ipfs/go-ipfs #ipfsソースを入手
cd $GOPATH/src/github.com/ipfs/go-ipfs #ipfsソースダウンロード先へ移動
sudo su - #"sudo  -s"でやると/etc/profileでexportした環境変数が消失するため
make install #ipfsをビルド
exit #rootユーザーからログアウト

するとIPFSパッケージがビルドされ、$GOPATH/binへインストールされます。

ビルドが完了したら、ipfsコマンドが利用できるか確認します。

ipfs --help

下記のような表示がされたらインストールは成功しています。

USAGE
  ipfs - Global p2p merkle-dag filesystem.

SYNOPSIS
  ipfs [--config=<config> | -c] [--debug=<debug> | -D] [--help=<help>] [-h=<h>] [--local=<local> | -L] [--api=<api>] <command> ...

OPTIONS

  -c,              --config   string - Path to the configuration file to use.
  -D,              --debug    bool   - Operate in debug mode.
  --help                      bool   - Show the full command help text.
  -h                          bool   - Show a short version of the command help text.
  -L,              --local    bool   - Run the command locally, instead of using the daemon. DEPRECATED: use --offline.
  --offline                   bool   - Run the command offline.
  --api                       string - Use a specific API instance (defaults to /ip4/127.0.0.1/tcp/5001).
  --enc,           --encoding string - The encoding type the output should be encoded with (json, xml, or text). Default: text.
  --stream-channels           bool   - Stream channel output.
  --timeout                   string - Set a global timeout on the command.

SUBCOMMANDS
  BASIC COMMANDS
    init          Initialize ipfs local configuration
    add <path>    Add a file to IPFS
    cat <ref>     Show IPFS object data
    get <ref>     Download IPFS objects
    ls <ref>      List links from an object
    refs <ref>    List hashes of links from an object
  
  DATA STRUCTURE COMMANDS
    block         Interact with raw blocks in the datastore
    object        Interact with raw dag nodes
    files         Interact with objects as if they were a unix filesystem
    dag           Interact with IPLD documents (experimental)
  
  ADVANCED COMMANDS
    daemon        Start a long-running daemon process
    mount         Mount an IPFS read-only mountpoint
    resolve       Resolve any type of name
    name          Publish and resolve IPNS names
    key           Create and list IPNS name keypairs
    dns           Resolve DNS links
    pin           Pin objects to local storage
    repo          Manipulate the IPFS repository
    stats         Various operational stats
    p2p           Libp2p stream mounting
    filestore     Manage the filestore (experimental)
  
  NETWORK COMMANDS
    id            Show info about IPFS peers
    bootstrap     Add or remove bootstrap peers
    swarm         Manage connections to the p2p network
    dht           Query the DHT for values or peers
    ping          Measure the latency of a connection
    diag          Print diagnostics
  
  TOOL COMMANDS
    config        Manage configuration
    version       Show ipfs version information
    update        Download and apply go-ipfs updates
    commands      List all available commands
    cid           Convert and discover properties of CIDs
  
  Use 'ipfs <command> --help' to learn more about each command.
  
  ipfs uses a repository in the local file system. By default, the repo is
  located at ~/.ipfs. To change the repo location, set the $IPFS_PATH
  environment variable:
  
    export IPFS_PATH=/path/to/ipfsrepo
  
  EXIT STATUS
  
  The CLI will exit with one of the following values:
  
  0     Successful execution.
  1     Failed executions.

  Use 'ipfs <subcmd> --help' for more information about each command.

最後に、ipfsを使用するユーザー(ipfsへファイルをアップロード・ダウンロードするユーザー)で下記のコマンドを実行します。

ipfs init

するとipfs上での自ノード専用のキーが発行・保存され、セットアップ完了です。

initializing IPFS node at /ユーザーディレクトリのパス/.ipfs
generating 2048-bit RSA keypair...done
peer identity: 自分のipfsノードのキー
to get started, enter:

        ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

ファイルのアップロードやアップロードしたファイルを閲覧する方法などはまた後日解説したいと思います。

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

ntpd が起動できなくなりログも吐かない

ntpd で時刻同期をしているのですが、OS を再起動したタイミングで ntpd が起動できなくなってしまいました。

ntpd が起動できなくなった原因と、ntptime が ERROR になる原因は違いそうですが、ntpd を起動しておかないとズレが生じる為、ntpd が起動を起動するところまでは復旧する必要があります。

disable monitor

脆弱性対策で ntp.conf に設定を入れていたのですが、原因不明のため、ntpd を最新版へアップグレードして起動の確認を行いました。

ntpdc と ntpq

古い人間なので ntpdc を使っていましたが、今どきの ntpd は ntpq を使う様です。ntp.conf を新バージョンに合わせた設定に変更し、ntpq -p で同期確認。

無事同期ができるようになりました。でも、相変わらず、ntptime で ERROR は吐く。

IPMI 経由で BIOS の時刻を見ると、ものすごいズレがあるので、ntpdate -b で同期を行いたいのですが root で実行しても permission denied 。困りました。

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

WordPressの次期メジャーアップデートで実装される記事エディタ”Gutenberg”を使ってみた

WordPressの次回メジャーバージョンアップ WordPress 5.0から新しい記事エディタ”Gurenberg(グーテンベルク)”が実装されるようです。

Gutenberg – WordPress

WordPress 5.0はまだリリースされていませんが、Gurenbergは既にプラグインとして公開されており、既存の4.x系のWordpressでも先行して試すことができます。

ということで、早速、自分の所有するWordpressサイトにインストールしてみました。

インストール後は、管理画面から
投稿->新規追加
をクリックしたときに表示されるエディタが従来のTinyMCEからGutenbergに差し替えられます。
ただし、ダッシュボードや記事一覧の”新規投稿”ボタンに変更が加えられ、ドロップダウンから旧エディタを選択することが可能です。

早速Gutenbergを呼び出してみます。

まず見てわかるのは、入力欄がとても大きくなりました。
トップにタイトルの入力欄、そしてその下には本文入力欄があり、ここまでは従来と変わりませんが、入力してみると…

改行するごとにブロックが分けられ、そのブロックを組み合わせてコンテンツを作っていく編集方式になっていました。
ブロックは自由に入れ替えることができ、別のブロックにしておけばコピペなして内容の順番を入れ替えることができます。

ブロックには文章の外にも画像や動画などを含めることもできます。

ブログのUIを見るとどうしても長文を書かないといけない気になって続かない…なんてこともありますが、GutenbergのようなUIなら、短文を気軽に書いてもいいようなUIになっていて、ミニブログ感覚で無理なく書けるのではないかなと思いました。

なお、Wordpress 5.0以降も従来のエディタを使いたい!という方は、公式でClassic Editorという名前のプラグインで提供されるので、これをインストールすれば引き続き旧エディタが利用できるようです。

ブログは書きたいけどなかなか筆が進まない…という方は一度試してみてはいかがでしょうか?

  • この記事いいね! (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

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の買収によってこの辺りがどうなっていくのか…注目していきたいですね。

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

GoogleがGoogle Chrome 69をリリース。テスト中だった新UIがついに正式版に。

GoogleがGoogle Chrome 69をリリースしました。

New in Chrome 69 – Google

新バージョンに更新してまず最初に目につくのがツールバー部分のデザインの変更でしょう。

以前
Google Chrome Ver.68でChromeの新しいデザインが利用可能に。
でご紹介したテスト中の新UIが、正式版として実装されたものと思われます。

Chrome68で実装されていたテスト版のUIはこんな感じでした。

正式版ではタブの追加ボタンが再び右端のタブの右側に戻り、直感性が上がりました。
また、今までアプリモードでは右クリックメニュー以外からは一切メニューにアクセスできませんでしたが、

タイトルバーから一部メニューにアクセスできるようになりました。
アプリ上から拡張機能の設定も行えるため、さらに便利になりそうです。

そして今回の最も多きな変更はやはりSSL関連。

SSLが有効となっているサイトの表示が、ついに灰色の鍵マークとなり、Chromeの”SSLは適用されていて当たり前”という考え方がより色濃く感じられるようになりました。

なお、次バージョンのChrome 70 では、ついにhttpサイトへつないだ際に文字入力をすると、赤文字の”保護されていません”表示が行われるように変更されるとのことです。

Google Chrome、HTTPSサイトの「保護された通信」を非表示に 「デフォルトで安全が前提」 – ITMedia エンタープライズ

Chrome 69からHTTPSの表記が変化!Chrome 70以降も要チェック! – 常時SSL Lab.

まだSSL対応をしていない皆さんはお早めに。

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