プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

ノートPCを新調しました

伊勢IT交流会 とかでLTしようとして、古い、重たいノートPCを持ち歩くのが、最近特に苦になってきました。

ということで、もう去年(2019年)のことになりますが、年末に合わせてノートPCを新調したときの顛末をメモっておきます。

ご注意

選定時(2019年12月頃)の考えを思い出しながら書いています。これ書いている今(2020年4月)は新型コロナウィルスの騒ぎがあるので、もし今のタイミングだといろいろと中身が変わってると思いますので、その点はご了承ください。

機種選定

ノートPCの機種選定はいつになっても迷いますね。

まずは、最近の仕事の仕方を振り返ると、家で開発の仕事をするというのはほとんどありません。

なので、ノートPCの用途としては LT とか、外で集まるときに持ち出せるものであればいいかなと考えました。ハンズオンとかに参加するならそれなりに関発環境も動かしたいところなんですが、もともと昔からたいして参加していなかったのに加えて、ここしばらくは時間が取れずにこの手のイベントに参加できてないので、その点も割り切ろうかと思っています。

あと、いままでLT用ということで、昔々のノートPC( Lenove 3000 V100 )に Lbuntu を入れて使ってたんですが、これ重量が2kg弱あるので、重いなー、と思うようになってきました。

ということで、今回は、

  • 持ち運びに便利:1kg を切りたい
  • 自宅では仕事に使わない:若干のブラウジングとメールなどのチェックぐらいのつもり
  • お値段がお手頃:可能であれば10万円以下

をベースに考えました。

いろいろなサイトを回って、13インチ前後のノートPCをいくつか見ながら、どれも帯に短したすきに長し、って感じで決めきれずにいました。 あと、Chromebook のほうが、軽く使う用途にはいいかなと思って調べた見たのですが、こちらもピンとくるものがありませんでした。

そんな感じで今回は決めきれずに流れるかな?と思っていたところ、ONE-NETBOOK から出ている 7インチ前後の UMPC ( Ultra Mobile PC ) ってのがあることを知りました。 これだ!って感じでしたね。普段、衝動買いはしないたちなんですが、この時ばかりは、もうこれしかない!って思いました。

選んだもの

といういうことで、最終的に選んだものは、 ONE-NETBOOK の Onemix 1s (SSD 256GBモデル)になりました。

www.one-netbook.jp

これ、重量が約0.5kg!衝撃的です。

こまかいスペックはリンク先を見てもらうとわかると思いますが、一通りのものはそろってます。なにより軽くて小さいのがいいですね。

使ってみる

注文から数日待つと本体が届きましたので、試してみます。

外観はこんな感じ

f:id:junichim:20200416171652j:plain

と思いきや、さらに箱がありました。

f:id:junichim:20200416171504j:plain

開封してみます。

f:id:junichim:20200416171531j:plain

中身を取り出してみます。

f:id:junichim:20200416171549j:plain

f:id:junichim:20200416171819j:plain

実際に持ってみると、重量は軽いんですが、本体も小さいので、結構ずっしり感があります。

電源を入れてみます。

キーボードが小さいのと、小さい筐体に詰め込んでいるためキー配列が変則的なのと、キーアサインが英語になっているため、なかなかなれません。 マウス代わりにキーボードのスペースキー中央にあるポインティングデバイスで操作できるのですが、感度が高いのか慣れないだけなのが、反応が良すぎて少し戸惑います。

とはいえ、MS Office や必要なソフトをインストールしたり、ブラウジング、Office 系のアプリ、などを動かしてる分には、特にストレスも感じません。

まったく問題なしです。

と言いたいところだったのですが、老眼の身には画面(ひいては文字)が小さすぎます・・・ まさかこんなところで引っかかるとは。

この点だけは正直失敗しました。皆さん、特に老眼の方は画面サイズにはお気を付けください。

まあ、そのほかの点は満足なので、気を取り直して使っていきたいと思います。

小物を揃えます

小さくて一通りそろっているとはいえ、普段は家で使うので、周辺機器もいろいろとそろえてみました。

マウス

前に、こちらの記事で触れたマウス難民していた時に見つけたロジクールの M705 (の後継の M705m)にしてもよかったのですが、この機種は Bluetooth 接続ができないんです。ノートPCで使うことを考えて、 Bluetooth 接続のできる M720r を選びました。

キーボード

持ち運びすることも考えて、Bluetooth の折り畳み式にしました。

USBハブ

本体にもUSBポートが1つあるとはいえ、家で使うときは有線LANで使いたいときもあるので、USBハブを購入しました。 外観はこんな感じ

f:id:junichim:20200416172333j:plain

おまけでケースが付いているのが何気にうれしいです。

f:id:junichim:20200416172425j:plain

ケースにいれるとこんな感じです。

f:id:junichim:20200416172444j:plain

USBハブを接続して、LANやその他のUSB機器をつないでも使ってみましたが、特に問題もなく使えました。

楽しく使っていきたいと思います。

Let's Encrypt の更新エラー

こちらの記事で書いたサーバーの Let's Encrypt の証明書の更新ですが、cron で自動実行されているので安心と思い込んでいたら、あと20日で有効期限が切れるよ、というメールが先日やってきました。

慌てて、サーバーを確認すると。syslogに更新失敗の記録が載っていました。

Dec 19 06:19:10 ip-xxx-xxx-xxx-xxx systemd[1]: Starting Certbot...
Dec 19 06:19:15 ip-xxx-xxx-xxx-xxx certbot[8506]: Attempting to renew cert (サーバーのドメイン名) from /etc/letsencrypt/renewal/サーバーのドメイン名.conf produced an unexpected error: Failed authorization procedure. サーバーのドメイン名 (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from https://サーバーのドメイン名/.well-known/acme-challenge/JDoMfpSsox4bWhzrsYgGLIVN4OUEx0NJHFcdWgL0Wwg [52.199.225.177]: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>404 Not Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p". Skipping.
Dec 19 06:19:15 ip-xxx-xxx-xxx-xxx certbot[8506]: All renewal attempts failed. The following certs could not be renewed:
Dec 19 06:19:15 ip-xxx-xxx-xxx-xxx certbot[8506]:   /etc/letsencrypt/live/サーバーのドメイン名/fullchain.pem (failure)
Dec 19 06:19:15 ip-xxx-xxx-xxx-xxx certbot[8506]: 1 renew failure(s), 0 parse failure(s)
Dec 19 06:19:15 ip-xxx-xxx-xxx-xxx systemd[1]: certbot.service: Main process exited, code=exited, status=1/FAILURE
Dec 19 06:19:15 ip-xxx-xxx-xxx-xxx systemd[1]: certbot.service: Failed with result 'exit-code'.
Dec 19 06:19:15 ip-xxx-xxx-xxx-xxx systemd[1]: Failed to start Certbot.

このエラーを解決しようとした際にやったことをメモっておきます。

改めてテスト

下記の記事などを参考にもう一度テストしました。

Let&#39;sEncryptの取得&amp;自動更新設定してみた(CentOS7.1&amp;Apache2.4.6) - Qiita

最初は --dry-run つけて試してました。

ubuntu@ip-xxx-xxx-xxx-xxx:/etc/cron.d$ sudo certbot renew --force-renew --dry-run --webroot-path /var/www/html/ドキュメントルート
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/サーバーのドメイン名.conf
-------------------------------------------------------------------------------
Plugins selected: Authenticator webroot, Installer None
Renewing an existing certificate
Attempting to renew cert (サーバーのドメイン名) from /etc/letsencrypt/renewal/サーバーのドメイン名.conf produced an unexpected error: urn:ietf:params:acme:error:malformed :: The request message was malformed :: Method not allowed. Skipping.
All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/live/サーバーのドメイン名/fullchain.pem (failure)

-------------------------------------------------------------------------------
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/live/サーバーのドメイン名/fullchain.pem (failure)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)
-------------------------------------------------------------------------------
1 renew failure(s), 0 parse failure(s)
ubuntu@ip-xxx-xxx-xxx-xxx:/etc/cron.d$ 

エラーになっていました。 --force-renew かな?と思い、これをはずしても同じ結果。

でも、深く考えずに --dry-run をはずすと、できてしまった・・・

ubuntu@ip-xxx-xxx-xxx-xxx:/etc/cron.d$ sudo certbot renew --webroot-path /var/www/html/ドキュメントルート
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/サーバーのドメイン名.conf
-------------------------------------------------------------------------------
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator webroot, Installer None
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for サーバーのドメイン名
Using the webroot path /var/www/html/ドキュメントルート for all unmatched domains.
Waiting for verification...
Cleaning up challenges

-------------------------------------------------------------------------------
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/サーバーのドメイン名/fullchain.pem
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/サーバーのドメイン名/fullchain.pem (success)
-------------------------------------------------------------------------------
ubuntu@ip-xxx-xxx-xxx-xxx:/etc/cron.d$ 

cron.d でエラーになっていた理由

あとから、考えるとLet's Encrypt の設定ファイル(/etc/letsencrypt/renewal/サーバーのドメイン名.conf)内のwebrootの指定が 実際のフォルダよりも一つ上のフォルダを指していました。

webroot_path = /var/www/html,

どうもこのため、エラーが起きていたようです(ただ、 renew に成功するとこの.confファイルが書き換えられるため、記憶をたどって書いています)。

で、上のコマンドラインで実行時には、正しいwebrootを指定していたので、成功になったようです。

--dry-run でエラーになっていた理由

下記の記事などによると、 --dry-run をつけた場合、0.32 以前の certbot だと、エラーが起きるようなこと書いています。

Problem with renew certificates - The request message was malformed :: Method not allowed - Help - Let's Encrypt Community Support

今の環境だと、0.23 だったようです。多分これですね。

ubuntu@ip-xxx-xxx-xxx-xxx:/var/log$ certbot --version
certbot 0.23.0
ubuntu@ip-xxx-xxx-xxx-xxx:/var/log$ 

まあ、とりあえず更新が動くようになったので、今日のところはこれでOKとします。

Cognito AdminCreateUser で作成したユーザーの仮パスワードのリセット

cognito の小ネタです。

cognito ユーザープールのユーザーを管理者が作成する際に、仮パスワードを発行することができます。

管理者としてのユーザーアカウントの作成 - Amazon Cognito

その仮パスワードの有効期間が切れた場合の再発行方法は、

aws --profile プロファイル名 cognito-idp  admin-create-user
--user-pool-id ユーザープールID --username ユーザー名(メールアドレス)
-user-attributes "[{\"Name\":\"email\",\"Value\":\メールアドレス\"},{\"Name\":\"email_verified\",\"Value\":\"true\"}]"
--desired-delivery-mediums "EMAIL" --message-action RESEND

(適宜改行を入れています)

のように admin-create-user を同じユーザー名を指定して --message-action RESEND を追加して呼ぶだけのようです(CLIでの例になります)。

知らなかったなー。

元ネタはこちら。

How do I reset a Cognito user's password that has expired? - Stack Overflow

リファレンスにもちゃんと書いてありました。

admin-create-user — AWS CLI 1.16.299 Command Reference