Magnolia Tech

いつもコードのことばかり考えている人のために。

ThinkCentre M75q Tiny Gen2で、Wake On LANを有効にする

UEFIのPOWERの設定を確認する

  • Enhanced Power Saving ModeDisabledになっていること

    現代のPCは、電源がオフになっている時でも多少の電力を消費するようになっているけど、それを最小化するための設定。 ただし、これがEnabledになっているとWake On LANは使えず、Wake On Alarmという日時指定の自動起動しか使えなくなる。

    また、これがEnabledになっていると、特定のポートに繋がったUSBキーボードからAlt+Pで電源をオンにするためのSmart Power Onも使えなくなる。

    Wake On LANを有効にするためには、まず項目がDisabledになっていることが条件。

  • Automatic Power OnWake On LANEnabledになっていること

    そのままの設定値だけど、続いて当然Wake On LANEnabledになっている必要がある。

    これでUEFIメニューの中の設定は終わり。

netplanの設定を確認する

  • netplanのEthernet用の設定に、wakeonlan: trueが含まれていること

    デフォルトがオフなので、明示的にtrueに設定しないと有効にならない。

なお、無線LAN側のインタフェースは設定しても反応しなかったので、残念ながらThinkCentre M75q Tiny Gen2は、無線LANによるWake on LANはサポートしていないようです。

スイッチングハブを買う……TP-Link LS105G

自宅サーバ構築用にPCを購入し。

blog.magnolia.tech

作業している部屋で使えるLANのポートが一つしかなく、有線LANと、無線LANのアクセスポイントが同時に利用できない。無線LANでもいいか……と思って作業を始めたけど、Ubuntuのインストールに異常に時間がかかるし、起動のたびに無線LANの接続に数分余計にかかるし、そもそもクライアントPCからのSSHが気持ち悪い遅延が発生して使い物にならない……

さっさと一番安いスイッチングハブを買ってきて接続。


手元の間に合わせだったので一番安い1Gbp対応のものを選ぶだけかなーと思ったけど、実際に買おうとすると選択肢も多いので、小一時間悩んでしまった。

  • 通信速度(1Gbps、2.5Gbps、10Gbps)……さすがに100Mbpsは無し
  • ポート数(たいてい家庭用は5か、8)
  • 金属筐体か、プラスチック筐体か
  • 電源内蔵か、ACアダプタか
  • POE+対応か
  • 筐体の大きさ
  • 保証

くらいが考慮事項か。このくらいのレベルだと電源内蔵モデルが少ないけど、絶対にACアダプタとの組み合わせが分からなくなるから迷ったけど、ちょっと高めだったので今回は見送り。あとPOE+に対していると今使っているMeraki GoのアクセスポイントのACアダプタが不要になって見栄えが良くなる…とか考えたけど、それはまた別途最終構成を考えてから…ということで、売り場で一番安かったTP-Linkの製品を購入。

物理Linuxサーバ構築用にThinkCentre M75q Tiny Gen2を購入

普段、メインで使っているPCがMacBook Air 2018なので、さすがにDockerでコンテナをたくさん立ち上げたまま、ブラウザで調べ物する、みたいな使い方が辛くなってきた。夏場はファンも凄い回っちゃうし、レスポンスはすごく悪くなるし。

メインPCを買い替えようかとも思ったけど、ブラウザを使うくらいの作業なら特に不満は無い。それにそもそもメインPCでLinuxが動いている必然性も無いし、画面も要らないのでサブPCとしてデスクトップPCを用意して、Linuxをインストールする方に方向に転換。


部屋に大きなデスクトップが有るとサイズ的に圧迫感が有るし、複数のマシンのファンの音が同時に鳴るのは苦手なので(データセンタではないので...)、作業している場所から離れた所の隙間に設置できるような、1リットルサイズの小型PCを探すことにした。

Amazonとかで探すと色々と出てくるけど、それなりのスペックを求めると(当たり前だけど)それなりに高くて、10万円に近づいていく。サブPCにそこまで使うのもなーと思って、中古を見てみると古い世代であればたくさん出回っているけど、決め手に欠けるものばかりで、さっさと買う、というモードにならず。

そういえば一時期「lenovoAMD搭載ThinkCentre Tiny」が安い、みたいな記事がたくさん出回っていたことを思い出して最新の価格を調べてみると...円安のせいか、数ヶ月の間にだいぶ値段が上がっている......そもそも即納モデル以外はどれも納期が3ヶ月後とかで、ちょっと手がでない。待っている間に新製品が出そう。

そこでlenovoのアウトレットストアを見てみると、割と常時開封後返品されたマシンを整備品として、リーズナブルな価格で販売していた。

www.lenovo.com

ただし、1リットルサイズのTinyモデルはほとんどない。普通のデスクトップモデルならいつでも有るけど……と思っていたら、年明けにAMD搭載ThinkCentreのTinyモデルが安く売られていたのですぐに購入。販売数が少ないので、すぐに売り切れていた。タイミングが良かった。

スペック的には即納モデルと同じみたいで、CPUがAMD Ryzen 5 PRO 5650GE、メモリ8GB、SSD256GB。Wi-Fiもある。あとは一応キーボード、マウス、スタンドも付いてきた、使わないけど。

価格は新品より2万円安く、ちょっと前の新品の価格をちょっと下回るくらい。

実際にに届いた物をチェックしたけど、特に使用感も全然無くて普通に新品と見分けがつかなかった。

梱包は簡素で、箱にはlenovoのマークも無し。

紙のマニュアルも一切付属せず、自分でダウンロードする必要がある。

Windows 11の立ち上げ確認

プリインストールされていたOSはWindows 11 Home

立ち上げ確認と、マイクロソフトアカウントの登録、ライセンス認証、インストールメディアの作成まで実施。

マイクロソフトアカウントにデジタルライセンスが登録されたので、再インストールの準備完了。

Ubuntu Server 22.10のインストール

Windows 11をいつでも再インストールできる状態にしたら、早速全部ストレージを初期化して、Ubuntu Serverのインストール。いつでも入れ替えられるので、最新の22.10をインストール。

注意点はインストール前に、セキュアブートをオフにしておくことを忘れない、くらい。SSHの鍵もGitHubから取得してくれて用意してくれるので、macOSからすぐにSSHでログインできたのが良かった。そういえば、Ubuntuインストーラを起動のもずいぶん久しぶりな気がする...

最初、無線LAN経由でインストールしたらめちゃめちゃ時間がかかったので、HUBを買ってきて有線LAN側で接続。レスポンスがかなり快適になった。

インストールが完了した後に、IPアドレスを固定化してから、Wake on LANを試す。macOSだと「WakeOnCommand」というツールで可能。特に設定は変えていないけど、MACアドレスを指定したらすぐに立ち上がった。これで遠隔操作もバッチリ。


考えてみれば物理ハードにUbuntuを自分でインストールしたのが初めてで、ネットワークの設定周りでちょっと戸惑ったけど、それが終わればいつものUbuntuなので、あとは特に困ることも無かった。

最近はLinuxもイメージから起動するようになってOSのインストーラ自体動かさなくなってたなぁ。

Ubuntu Serverでnetplanを使って固定IPアドレスを指定する(あと、Wake on LANを有効にする)

手元のPCにUbuntuをインストールした...よく考えてみると物理PCに直接Ubuntuをインストールしたのが初めてだと気がついた。 特にネットワーク周りの設定は、ネットワークインタフェースに影響を受けるので、今まで意識したことが無いところでの設定が必要になった。


自宅内サーバとしての使い方なのでIPアドレスは固定化したい。 本当はルータ側でMACアドレスを指定してIPアドレス払い出しを固定化する方法も有るはずなのだけど、上手くいかなかったので、まずはUbuntu側で設定することにした。

Ubuntuでは、netplanというコマンドを使ってIPアドレスを固定化する。

詳しい解説は、以下のサイトを参照のこと

netplan.io

公式ドキュメントでも、ネットの情報でも、明示的にrendererを指定している例が多いけど、公式ドキュメントには/etc/netplan/配下にYAMLファイルが置かれていると明示的にrendererNetworkManagerを指定しない限り、networkdが利用されるそうなので、明示的に指定する必要が無かった。

あと、Ubuntu ServerはデフォルトでNetworkManagerをインストールしないので、NetworkManagerのパッケージを追加インストールしない限り、rendererNetworkManagerを指定してもネットワークインタフェースは何も設定されないので、注意。初めてUbuntu Serverをインストールした時、nmcliではネットワークインタフェースが全てunmanagedになっていたので何事?と思ったけど、そもそもNetworkManagerでは管理されていない、というそのままの状態表示だった。


インストールしたPCには有線LANと無線LANの、2つのインタフェースが有るので、有線LAN側を固定IP化することにした。

有線LAN側の設定

network:
  ethernets:
    device_ethernet:
      dhcp4: false
      addresses: [192.168.0.xx/24]
      routes:
        - to: default
          via: 192.168.0.1
          metric: 100
      nameservers:
        addresses: [192.168.0.1]
      wakeonlan: true
  version: 2

バイス名と、IPアドレスはマスクしているけど、それ以外は設定した内容をそのまま載せている。静的にIPを指定する場合は、nameservermetricは明示的に設定する必要がある。

metricの意味は下記のサイトを参考にした。

qiita.com

デフォルトでは無線LANのインタフェースには600、有線LANのインタフェースには100が割り当てられた。同じゲートウェイを向いている時は、有線LANが選択されることになる。IPアドレスを固定化する際は、明示的に指定しないといけないの、デフォルトと同じ100を設定した。

name serverは、利用しているホームゲートウェイがWAN側にDNSサーバのアドレスを保持しているので、ゲートウェイに設定した。パブリックDNS 8.8.8.8でも別によいけど。

Wake on LANも明示的に設定しないと有効にならなかったので設定した......これで遠隔から電源をオンにできる。

無線LAN側の設定

同じ設定方法だとトラブった時に切り分けができないので、無線LAN側はDHCPを使うデフォルト設定のままとした。

network:
  version: 2
  wifis:
    device_wifi:
      access-points:
        name_of_access_point:
          password: xxxxxxxxxxxxxxxxxxx
      dhcp4: true

ip routeコマンドで反映した結果を確認する

なお、ゲートウェイを指定するgateway4記法はUbuntu 22.04より非推奨になっており、routesを使うのだそうだ。

KIOXIA USBフラッシュメモリ 16GBを買った......物理記録メディアを買うのはいったいいつ以来なのだろう

Windowsのインストールメディアと、Ubuntuのインストールメディアを作るために、USBメモリを買った。

もう最後にUSBメモリを買ったのがいつだったのか、まったく思い出せない。

というか買った記憶が無い。

最後に自宅でUSBメモリを使ったのは、まだ「ATOK for Mac」がパッケージ販売されていた頃、インストール用のUSBメモリの空き領域を使って何かのファイルを移動したような、そんな記憶しかない。

SDカードはデジカメのために買った記憶もあるけど、確実に10年以上前のような気がする。

記録メディアの類を、緊急用ですら買わなくなって、久しいけど、ほんと困らないというか、必要性が全くない。


ちなみに作ったインストールメディアは、将来絶対に分からなくなる自信が有ったので、それぞれチャック付きの袋に、ラベルを貼って保管することにした。だけど、きっとこのメディアをどこに保管したのか分からなくなって、同じ物を作るんだろうなぁ…。

そして、もっと先の未来で、うっかり見つかって、「こんな容量じゃ使えねー」って言って捨てるんだろうなぁ…。

すべてのエンジニアは、機関車トーマスの『じこはおこるさ』を聞くべきではないか

大事なことが、全部ここに集まっている!

utaten.com

WEB+DB PRESS Vol.132 『オブジェクト指向神話からの脱出』は、長く生き残った技術テーマを振り返る良い特集

初めて「オブジェクト指向」というキーワードを聞いてからだいぶ長く経っていて、「これはオブジェクト指向らしいコードなのか?」みたいな見方をすることも無くなって久しい今日この頃ですが、WEB+DB PRESS最新号Vol.132 の特集が『オブジェクト指向神話からの脱出』という興味深いテーマだったので読んでみました。


そういえば、20世紀の終わりから21世紀の初めの頃にかけては、オブジェクト指向以外にも色々な開発方法論とそれを支えるツール群が出てきては消えていった時代だった記憶があります。今ではまったく聞くことも無い設計方法論や、ツールがソフトウェア開発の問題への画期的な解決策と宣伝されていました。

で、たいていそのツール費用が高額な上に、更にトレーニングを受けないと使いこなせないし、更にそのトレーニング費用が高額だった...印象。

あ、そういえば4GLと呼ばれる言語群も有りましたね。

個人的には、ソリューションとコンサルテーションを売りたいのかなぁ…本当に顧客が欲しかったものが巨大なツール群を使いこなすことで得られるのか……それよりビジネスロジックを実現する仕組みとコードを考える方に注力した方がいいんじゃないか?UMLを詳細に書いたからって、何にもわからないよなぁ…みたいなことを考えていました。


そんな色々な開発方法論のうち、プログラミング言語と密接に結びついて生き残ったキーワードの一つが「オブジェクト指向」ということでの特集。前半はプログラミング言語におけるオブジェクト指向機能のおさらい…カプセル化や、継承などの基本が解説されます。ここまでは機能の解説なので、良いも悪いも無い話。

第3章「オブジェクト指向の周辺技術」では、オブジェクト指向方法論、分散オブジェクト技術、オブジェクト指向データベースなどに話題が広がっていきます。過去の振り返り、という意味では非常に興味深い内容でした。

で、いよいよ第4章「オブジェクト指向機能の現在の使い方」から最後の第5章「オブジェクト指向言語の変化」と、特集の核心に進んでいきます。ここはぜひ読んでみてください。


と、ここまで読んできて、果たして現代に今からプログラミング言語を学ぶ人は「オブジェクト指向」という言葉にそこまで惑わされる場面があるのかなぁという疑問はちょっとあります。

古代、良い(と考えられる)ソフトウェア開発の概念に何でも「オブジェクト指向」というキーワードがくっついていた時代と違って、現代では一つのプログラミング言語や、開発方法論、ミドルウェアもさまざまな概念が混ざり合って実現されていて、あまり分かりやすいキーワードで説明しようとしても無理がある、というか、何も言ってない、みたいな場面が多くないですかね。

(特集の最後にもそういう話が書かれているんですけどね)

まぁ、とはいえ、完全に忘れ去られて、誰も使わなくなった開発方法論に比べれば現代においても、その概念がダイレクトに導入されているプログラミング言語が実用的に使われていて、こうやってその概念の実践について議論がされるだけでもイイ話だなぁと思った次第です。

というわけで、現代に生きる人は、過去に囚われ過ぎず、「今の課題」を解決するために必要なことを学び、実践していけばいいんじゃないかなーと思った次第です。というわけで、第4章、5章あたりを読んで、がんがんコードを書いていこーぜー!!


追記

そういえば、かつての定番のネタとしては、オブジェクト指向に入門するために、バートランド・メイヤーの「オブジェクト指向入門」を最初に買ってしまい、挫折する、というのがありましたよね。2冊ともずいぶん前に買って、未だに全部読んでない…

原題の「Object‐oriented software construction」を「入門」っていう書名にしちゃいけない気が…