tabimoba.net

とあるエンジニアの雑記帳

デザインをリニューアルしました。

10年くらい運用していたデザインも古さを感じてきたことと、最近のデバイスの解像度に合わせて、デザインをリニューアルしました。 色々やらなければならないことは山積ですが、細々と更新を続けていきます。

既存メールサーバとOffice365のExchange Onlineを共存利用する方法(独自ドメインによるメール利用)

Office365を導入する際、ライセンスコストや互換性の問題により、Exchange Onlineで直接メールの送受信を行うのではなく、既存のメールサーバ(SMTP)を利用してメールの送受信を行いたいというケースが、少数かもしれませんがあるかと思います。 そのような場…

Ubuntu 20.04LTSでAWS EC2のNATインスタンスを構築する

前提条件(事前準備) 基本的には、やることは以下の内容(Ubuntu 18.04LTS)と変わりません。 www.tabimoba.net Ubuntu 20.04LTS がインストールされたEC2インスタンスを用意します。 インスタンスタイプは最初はt2.nanoやt2.micro(あるいはt3,t3a系の同等タ…

Wired日本語版の記事を読みやすくするChrome機能拡張「Wired Nomalizer」

Wired日本語版の記事は、編集部のポリシーなのか、編集者が意識高い系なのかわかりませんが、カタカナの単語が独特で読みにくい問題があります。サーヴィスとか、プライヴァシーとか、イノヴェイションとか。この読みにくさは何とかしたい。 そんなこと思っ…

現在進行系で世の中で起こっている事柄から思い浮かんだ映画作品

復活の日 www.youtube.com amzn.to 56年前の小説(映画化は1980年)ですが、新型コロナウイルスが流行し始めた際にまず最初に思いついたのがこの作品です。復活の日に出てくる殺人ウイルスや、殺人ウイルスの全世界への流行は、現代のコロナウイルスを想起さ…

Qiitaから記事を移行しました。

手作業で移行を行おうとしましたが、途中で断念して先人たちの知恵を利用しました。 qiita.com github.com github.com 画像とカテゴリ対応、Qiita→Blogへの移行先案内は、これからぼちぼち行います。

Qiitaの記事を順次移行します。

タイトルの通り、徐々にQiitaから本Blogへ記事を移行していきます。最近Qiitaでは、以下の問題が話題となりました。www.itmedia.co.jp最近のQiitaは「俺の作った最強のシステム」的な危うさや、「こんな機能作った俺すごい、どや」的な意識高い系エンジニア…

ようやくAOSSL対応完了

久しぶりのBlog投稿となります。 はてなブログのAOSSL(サイトの常時SSL化)対応がものすごく面倒で放置していました。(あとは公私ともに多忙を極めていたというのも)APIを利用して、はてなブログのMixed Content対応や文字列置換を簡単に行えるツールがあ…

jQuery+Colorboxでaタグ無しで画像のモーダル表示を実現する簡単な方法

※Qiitaからの移行記事となります 画像のモーダル表示のためにLightbox系のライブラリの使い方を検索してみると、モーダル表示したい画像のimgタグをaタグで囲むようなものばかりが検索結果として出てきます。 しかし、CMS等の環境の制約によりaタグでimgタグ…

PHPでmkdir時に4桁のパーミッションを文字列型の変数の値より指定するには

PHP

※Qiitaからの移行記事となります PHPのmkdir関数でディレクトリを作成する際に8進数4桁のパーミッションを指定する場合、mkdir関数の第2引数へ mkdir('/var/dat/hogefuga', 0755, true); のような形で指定することで、0755(rwxr-xr-x)というパーミッションの…

ApacheでFilesやFilesMatchが反映されない問題とその原因

※Qiitaからの移行記事となります Apacheのconfにはデフォルトで次のような記述があり、通常は.htaccessなどが見えてしまうことはありませんが、設定によっては.htaccessファイルが丸見えになってしまう(FilesやFilesMatchの設定が無視される)場合がありま…

RHEL7でyum update 時にPHP5.4がアップデート出来ない場合の対応

RedHat Enterprise Linux 7(RHEL7)で、yum updateしようとした際に次のようなメッセージが表示され、php5.4のアップデートに失敗する場合があります。 # yum update 読み込んだプラグイン:langpacks, product-id, search-disabled-repos, subscription-manag…

MODx Evolutionのエレメントをファイル出力する

MODx Evolutionは、CMSとしても、ライトなWebアプリケーションフレームワークとしても使い勝手が良いのですが、エレメントの管理に常に悩まされます。エレメント(テンプレート、テンプレート変数、チャンク、スニペット、プラグイン)は管理画面上から手軽…

Python3とSeleniumとGoogle ChromeでWebページのスクリーンショットはSelenium-Screenshotが便利です

Python 3とSeleniumとGoogle ChromeでWebページのスクリーンショットを取得する方法の1つとして、Selenium標準の save_screenshot メソッドを使う方法がありますが、この方法の場合、指定されたサイズ(ウインドウサイズ)のスクリーンショットを取得するこ…

2019/12/30にGeoIP(GeoLite2)の変更が発生したので、その影響と対応方法

MaxMind社が無料で提供しているGeoIPデータベース(GeoLite2)について、2019/12/30より変更が行われました。 https://blog.maxmind.com/2019/12/18/significant-changes-to-accessing-and-using-geolite2-databases/ 理由 [CCPA(カリフォルニア州 消費者プラ…

LXDでコンテナの環境変数をセットする方法

以下のコマンドを入力して、コンテナをリスタートします。 # lxc config set <コンテナ名> environment.<環境変数名> <値>

特定のS3バケットのみ一覧表示と読み書きを許可するIAMポリシーの例

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation", "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::<バケット名>", "arn:aws:s3:::<バケット名>/…

cURLを利用して、MovableTypeのアクセストークンを取得する

MovableTypeのData APIを利用する際に必要となるアクセストークンは以下の方法で取得することが出来ます。 パスワードは、「Webサービスパスワード」を指定します。(管理画面ログイン時のパスワードではないので注意) クライアントIDは、決まったものは無…

Guzzleでリクエスト先から返されたエラーメッセージをtruncateさせずに取得する

Guzzleでリクエスト先からエラーが返された際、そのメッセージがtruncateされてしまい、不都合な場合があります。今回は、このメッセージをtruncateされない状態で取得してみます。 PHP Fatal error: Uncaught GuzzleHttp\Exception\ServerException: Server…

cURLを利用して、Movable TypeのData API経由でファイルをアップロードする

以下の方法で、cURLを利用してMovableTypeへファイルをアップロードすることができます。 curl -X POST \ https://<サイトのURL>/mt/mt-data-api.cgi/v4/assets/upload \ -H "X-MT-Authorization:MTAuth accessToken=<アクセストークン>" \ -F site_id=<サイ…

lxdコンテナをイメージファイル化して、そのままS3バケットへアップロードするスクリプト

環境 Ubuntu 18.04 LTS 前提条件 LXDが利用できる awscliがインストールされている aws configureが完了している IAMロール または IAMユーザーの認証情報が設定済み 実行方法 スクリプトのファイル名が、lxd_publish_image_to_s3.shの場合 # ./lxd_publish_…

OpenVPNの接続・切断をSlackに通知する

はじめに OpenVPNに接続あるいは切断された際に、以下のようにSlackへ通知する仕組みを追加してみます。 手順 1. SlackのIncoming Webhooksを用意する 下記URLの手順に従い、Incoming Webhooksを用意します。あわせて、投稿先のワークスペースとチャンネルも…

CentOS7のeasy-rsaが3.0.6にバージョンアップされてからbuild-client-fullができなくなった場合の対応方法

はじめに OpenVPNのために、久しぶりにeasy-rsaでクライアント証明書を作成しようとしたら、次のエラーが出ました。 # ./easyrsa --ns-cert=YES build-client-full hoge.fuga nopass Easy-RSA error: EASYRSA_PKI does not exist (perhaps you need to run i…

さくらのクラウドでアーカイブのゾーン間転送を低コストかつ高速に行う方法(APIを利用)

はじめに さくらのクラウドは、アーカイブ(スナップショット)のゾーン間転送に対応していますが、現時点(2019年10月5日時点)における公式な手順としては、コントロールパネル上から行う方法しかなく、APIのみでゾーン間転送を行う方法がありません。 代…

GCPのCloud Text-to-Speech APIを利用する簡単な方法(cURLを利用)

はじめに GCP(Google Cloud Platform)には、Cloud Text-to-Speechというテキストから音声に変換するサービスがあります。 今回は、cURLを利用し、とりあえず難しいことを考えずにサクッと使ってみます。 事前準備 Cloud Text-to-Speech APIドキュメントの「…

certbot-dns-sakuracloudを利用したLet's Encrypt証明書更新に失敗する場合の原因と対応方法

はじめに DNSサーバとしてさくらのクラウドDNSを利用している場合、certbot-dns-sakuracloudを利用することで、DNS認証によるLet's Encryptの証明書追加および更新を自動化することができますが、更新時に以下のようなメッセージが表示され、証明書の更新に…

Ubuntu18.04LTSにNode-REDをインストールして立ち上げる

SnapでNode-REDをインストールする # snap install node-red Node-REDを起動する # snap start node-red 以降は、 http://<IPアドレス または FQDN>:1880/ へWebブラウザからアクセスすることでNode-REDが利用可能です。</ipアドレス>

Systemdで作業ディレクトリを指定する方法

docker-composeを実行する際など、カレントディレクトリ(作業ディレクトリ)指定したい場合があります。 このような場合は、実行するserviceファイルに対して、WorkingDirectoryを[service]に記述します。 例 [Unit] Description=hoge After=fuga.service R…

LXDコンテナやイメージを一括削除する方法

コンテナ lxc delete --force $(lxc list --format csv -c "n") イメージ lxc image delete $(lxc image list --format csv -c "l")

LXDストレージプールのbtrfsボリュームの透過圧縮を有効化する方法

まず、透過圧縮を行いたいボリュームを特定します。 # lxc storage list +---------+-------------+--------+--------------------------------+---------+ | NAME | DESCRIPTION | DRIVER | SOURCE | USED BY | +---------+-------------+--------+--------…