カテゴリー
その他 社内SE

PRIMERGY TX150 S7の分解、CPU換装/メモリ換装/HDD->SSD換装

会社に古い富士通製のサーバ「PRIMERGY TX150 S7」がある。

スペックは以下。

CPU : XEON X3430(4コア 4スレッド)
メモリ : 4GB
ストレージ : HDD RAID1 500GB

これを以下にする。

CPU : XEON X3470(4コア 8スレッド)
メモリ : 16GB
ストレージ : SSD RAID1 1TB

下の画像がサーバのサイドパネルを開いたところである。ネジ外しも不要で緑の箇所を動かせば、各ユニットが外れる設計となっており、作業はとてもやりやすい。

開いたとこ

CPUファンとクーラー。CPUファンはメモリやRaidカードまで冷やすようになっている。外すときはファンの電源ケーブルに注意するくらいでこれも簡単。

写真がぼけてるがCPUファン
そこそこでかいCPUクーラー

CPUクーラーを外すときにRaidカードが邪魔なので外す。

CPUクーラーの横についてたRAIDカード

CPUクーラーを外したところ。

CPUが出てきた!

ヤフオクで買ったXEON X3470。X3480にしたかったのだが、自腹なのでヤフオクで2000円と安かったX3470。アルミホイルに包まれて送られてきた。

CPU換装。とりあえず、CPUだけ変えて動作確認。問題なし。

CPU換装

次はメモリ。メモリは結局16GBではなく8GBとなった。スペック表には「4GB DDR3 1333 UDIMM」対応と書いている。UDIMMが何なのかわからないが、サーバ用のRDIMMじゃないから、多分PC用のメモリでも動くのね!と喜んで、PC用の4GB DDR3 1333の新品4枚を5000円ぐらいで購入。動かず。今更DDR3の4GB 1333なんてPCでも使わないので、動かなかった時点でゴミ決定。まさに無駄。

新品を買うお金がなくなったので、ヤフオクで「4GB × 4 ECC Registered DDR3 1066」を2000円ぐらいで買う。写真を撮らなかったがこれも動かず、またもゴミ確定。メモリが悪いのか、相性なのかわからないが、とりあえず出品者は最高評価にしておいた。

ちなみにこのメモリを1枚づつ挿して、動作確認していた際に電源を落とさずにメモリを引っこ抜く失態。突然電源が落ち、何かショートしたかと思ったが起動して一安心。

困ったので、今ついているメモリと同じ型番のメモリをヤフオクで探し「2GB × 2 ECC Registered DDR3 1066」を送料込みの500円で買う。ネコポスで届くが、出品者は利益あるのかなど色々不安。問題なく動く。当然出品者は最高評価。

このメモリ

2スロット余っているので、できればもう2枚つけて12GBにしたいが、仕様書に「UDIMM×4、1066 RDIMM×4もしくは1333 RDIMM×6まで搭載可能」とあるので、4枚しか刺さらないと思い諦めた。この時点でヤフオクの到着待ち2回発生で4回ぐらいサーバを開いて汗だくで自腹切りまくりなので「もういいや」状態。

ここから先は写真を撮るのを忘れたので文章だけになるが、このサーバー、フロントパネルを外してHDDマウンタの取ってを引っ張ると、HDDを簡単に引っこ抜ける。素晴らしいが、3.5インチのみ対応。なので、今回買った2.5インチSSDはそもそもこのサーバのマウンタが付かない。2.5->3.5インチ変換マウンタをかませてみたが無理。

とりあえず、2.5インチSSDをSATAソケットに差し込む。軽いので宙ぶらりんだが何とかいけそう。なので、今回ゴミになったメモリの入っていたケースをSSDの下にテープで貼って高さを出すと宙ぶらりんも解消した。とりあえずこれで良いや。

誤算はハードウェアRaid1にしたかったのだが、どうもWindowsかRedhatからしかRaidカードが制御できないっぽい。仕方ないのでUbuntuのインストール時にソフトウェアRaidにした。10年選手のHDD500GBはハードウェアRaidが動いているっぽいので、バックアップ用としてマウント。

サーバは、Ubuntu + samba 4でADサーバに生まれ変わり。オフィスに30人しかいない小売の中小企業が使うには充分でしょう。Ubuntuに感謝。Redhatはもうシラネ。

カテゴリー
その他 社内SE

システム改修:インボイス制度対応のまとめ

現在、2023年10月1日から始まるインボイス制度対応に向けて、当社でも絶賛システム改修中である。当社ではPOSから出すレシートと営業部が取引先に出す請求書が社内システムの修正対象だ。それ以外は経理が導入しているパッケージシステムで対応可能である。また、今回の修正ではインボイス制度の後にくる、2024年の電子帳簿法対応も合わせて行っている。

修正点はざっと以下だ。

  1. 交付した請求書(レシート)は保存して検索できるようにする。
  2. 登録番号や日付など法律の記載事項を請求書(レシート)に載せる。
  3. 返品などがあった場合は、返還適格請求書を発行する。
  4. 交付した請求書を修正した場合は、「修正した適格請求書」を発行する。

2と3は正直、たいした問題はない。現行のレシートや請求書のフォーマットを少し変えるだけの話だ。

問題は4の「修正した適格請求書」である。システム的なポイントは以下2点である。

  • 修正前と修正後の適格請求書は両方保存しなければならない。
  • 法律要件の記載事項以外の箇所、たとえば、単純な誤字修正(請求書の「請」の字を「正」と間違えたなど)であっても「修正した適格請求書」扱いとなる。

つまり、今後は、何か間違いを修正する場合は、元の請求書のレコードはそのまま保管しつつ、新しいレコードを修正データとして追加する必要がある。

これが当社のシステム上、非常に厄介であるし、恐らく多くの企業システムでも厄介になっていると思う。

これまでは何か間違っていたら、システム内のレコードを修正し、請求書やレシートを出し直せば、訂正された請求書が出てきていた。ものすごくシンプルで、誰もがわかりやすかった。

今後は、元のレコードと修正したレコードとに分かれるので、肌感的に分かりにくくなってしまうし、例えば、「今月の請求額」などの統計を取る際も、これまでのシンプルに全レコードを合計という形ではなく、修正前のレコードか修正後のレコードか、などを分けて考える必要が出てくる。

始めはもっとシンプルに考えていたのだが、インボイスコールセンターや国税局電話相談センターなど国税局に問い合わせをしていく中で上記が明らかになった。

この修正の何が最悪というと、この複雑な仕組みを作っても、誰も得しないことである。国税局も「修正後の適格請求書」があれば徴税は充分であり、企業側も「修正後の適格請求書」以外は使うことがない。要は、「修正前の適格請求書」を苦労して保存しておくようにしても、誰もそんなもの見ないし必要もないのである。

必要のないもののために、ものすごい労力を要することになる。特に小売りのレシートで「修正された適格請求書」なんて誰が必要とするのだろうか。元データを修正し「適格請求書」を再発行するのでも、国も企業も個人も誰も困らないのである。

恐らく、法律要件違反だとしても、「修正された適格請求書」の発行をしない、もしくは、要件には従わないと割り切る会社も多い気がする。

ただ、当社の場合、誰もコンプライアンス違反のリスクを負いたくないので、国税局の回答に従うことにした。

輪をかけて最悪なのは、営業部である。営業部は(意味不明だが)システムで生成した請求書をコピーし、エクセルや手書きで請求書を書き直している。(なぜかは不明だが)社印を押す必要がある、(なぜかは不明だが)お客様のフォーマットに合わせる必要がある、などの理由を述べられ、「お客様がそう言っている。」との伝家の宝刀に誰も逆らえず、(完全に不合理で意味不明だが)社内の力関係の都合もあり、営業部の要望は飲まざるを得ない。

これらの手作りの請求書もシステム上に保存することになり、改修箇所が当初の想定より大幅に膨らむこととなった。

せめて法令で修正前の請求書は保存しなくて良いとしてくれたら、みんな幸せになれたのにと思う。

カテゴリー
その他 社内SE

OCI:無料枠 2台目VM (VM.Standard.E2.1.Micro)をローカルネットワークに接続する

開発用にさくらインターネットの一番安いVPSプラン(512M)を使っていたのだが、メモリが少なすぎてubuntu 22.04にアップグレードできない。仕方ないのでOracle cloudの無料枠でVM.Standard.E2.1.Microを立ち上げてそちらに移行することにした。が、実際に移行してみるととても重い。

■ UnixBenchの結果 
 さくら 512M => 1674.1
 OCI VM.Standard.E2.1.Micro => 504

1/3の性能しかない・・・。さくらは1CPU/メモリ512MB、OCIは2CPU/メモリ1GBなのに、1/3の性能しかない・・・。CPUの処理速度、メモリアクセス速度、ディスクアクセス速度、全てがさくらより遅い。

しかたないので、無料枠で2台目を立ち上げ、そこにDBを移動することにした。各VMに2枚目のNICを追加して、そこにローカルネットワークを構築するイメージでいたのだが、どうもOCIは違うらしい。

考えても仕方ないので、1台目と同じようにインスタンスを作成し、 Networkingの設定の場所で
 => 1台目で使ったものと同じVNICを選択
 => Assign a public IPv4 addressをチェック
 => Show advanced optionsを選択
 => Private IP addressに適当なIPアドレスを指定(10.0.0.20など)
としたところ、1台目のVMから10.0.0.20宛てで接続可能であった。(ちょっと不思議だが、割り当てたpublic IPからも接続可能である。)

ただし、2台間で特定の通信をするにはIngress ruleにルールを追加する必要があった。今回はmariaDB(mysql)だったので、sorceに10.0.0.0/16を指定して、宛先Port3306で登録したところ通信できるようになった。

ちなみに、それでも重かったため、1台目のサーバで以下を行ったところ、大分使える範囲まで落ち着いた。

・swapの追加 (OCIのubuntuのイメージにはswapがない。)
・nginxやopnelitespeedのワーカー数を増やす。(処理が遅いので少ないワーカーではさばけなくなる。)
・ 使ってないサービスの停止

残念ながら、無料は無料です・・・。

カテゴリー
OS 社内SE

SSHでload key invalid format エラー

開発環境が複数あり、ssh keyは使いまわしている。今回もWindowsで使っていたssh keyをたまに使うLinux環境(ChromeOS)にコピーして、SSHしたところ「load key “/home/xxxxxx/.ssh/test03/id_rsa” : invalid format」で”Permission denied (publickey).”となった。

結論から言うと、keyファイルの改行コードがCRLFとなっていて、LFに直したら動作した。

vimで修正するには

:e ++ff=unix
:%s/^M//g # ^Mは[Ctrl] + [V] キーを押してから、[Ctrl] + [M] キーを押せば入力可能

何年かに1回同じミスで時間を使うので備忘録。

カテゴリー
その他 社内SE

ActSecureクラウドメールセキュリティサービスを使ってみた話

少し古い話で恐縮だが、2020年3月から翌2021年9月にかけて、NECが提供する「ActSecureクラウドメールセキュリティサービス」を会社のメールのセキュリティとして使っていたので、その時の話をしたい。

もともとシマンテックのクラウドメールセキュリティを使っていたのだが、シマンテックが買収され、シマンテックの日本法人(と本社)が混乱、システムの年契約が更新できない事態が続いていた。

システム自体は未契約の状態のまま使えていたが、会社としては「サービス突然停止によるメールセキュリティ対策がされなくなる事態」を重視し、別のクラウドメールセキュリティサービスとして、上記のNECのサービスを利用することを決めた。

費用はシマンテックが年間25万ぐらいだったのに対し、NECは年間30万+初期費用5万と少し高いぐらいである。

実際に切り替えてわかったことは、日本のITの酷さだった。

シマンテックのサービスはWEB上でかゆいところ以上にいろいろ手が届く。メールの総量、スパムの率、誰が誰にメールをしたか、誰から誰にメールが来たか、メールサーバのログを調べる必要ほぼなくなり、しかもきれいなグラフィックで表示してくれる。誤検知で隔離されたメールも管理者のクリック一つで再配送できる。検索機能も豊富だ。

対してNECのサービスは、ログインして表示される画面は80年代かという酷さで、ログインしても対象のメールアドレスの追加ができるくらいで、ほとんど何もできない。誤検知だった場合の配慮もない。

このメールサービスを使う会社は、メールサーバを自前で持っていると思われるし、当社も自前でメールサーバを構築している。NECのサービスでやってくれることは、自前のメールサーバにセキュリティ機能を組み込めばほぼ同じことが出来る。

結局、1年ほど使って「この程度のサービスなら自前で組み込むから良い」となり、契約を打ち切った。社内からの問い合わせに対し、シマンテックのサービスならすぐ回答できたり対応できるものが、NECのサービスでは出来ない、もしくは、自分でメールサーバの大量のログと格闘しなければいけなくなったのが痛く、費用対効果が非常に薄いとの結論に至った。

それと関連は不明だが、このNECのサービスに切り替えた直後から大量のスパムが社内のいろいろなメールアドレスに届くようになった。関係ないかもしれないが、タイミングがあまりに近いため、それも契約解除の判断の遠因になった。

社内に英語ができる人間が多いため、海外のIT系サービスも検討の遡上に上がる。その際、国内のIT系のサービスのあまりの酷さに気が付き、うんざりすることがある。本件もその1つであった。

カテゴリー
その他 社内SE

“curl : リモート名を解決できませんでした。”が出た

WindowsでCURLが使えると知り、早速dos窓で「curl –version」とコマンドを打ったところ、”curl : リモート名を解決できませんでした。・・・”のエラーが出た。

curlが認識できなく、curl.exeなら認識できるらしい。「curl.exe –version」とコマンドを打ったところ素直にバージョンが表示された。

環境依存かもしれないが参考まで。

カテゴリー
OS 社内SE

Windows 7のシステムドライブをパーティションだけコピーしてHDDを入れ替えた話

家で2つほどサーバ的なものを建てている。1つはUbuntu22だが、1つはWindows 7である。Windows 7なんかやめたいのだが、録画サーバとして設置してあり、諸事情で10にもできずそのままになっている。もうほとんど録画もしていないが、稀に録画することがあり、手仕舞いできない。

そんなWin7の録画サーバの調子が悪い。HDDが古くディスクエラーが頻発しているので、SSDに乗り換えることにした。

Win7の現在のHDDの構成は300GBでCドライブに80GBを充てていて、これをWindowsの「バックアップと復元」で新しい128GBのSSDに載せ替えるつもりだったが、「ディスク容量不足」でどうしてもできない。Cドライブだけではなく、HDD全容量以上のディスクが必要らしい。あれやこれややってみたがうまく行かない。

仕方ないので、Ubuntu 22をUSBから起動(インストールディスクから「try ubuntu」)して対応した。手順としては、SSD側でfdiskでパーティション作成、HDDからSSDにパーティション単位でddコピー、SSDでWindows7起動確認後、ついでにgpartedで容量を80GBから128GBまで拡張した。

以下、備忘録として手順を示す。HDDは/dev/sda、SDDは/dev/sdbとする。

下準備

# ルートで作業
sudo su -
# なんとインストールできる!次回起動しても有効!
apt install ntfs-3g

手順1:/dev/sdaの現在のパーティション容量確認コマンド

#このコマンドの結果出てくる、/dev/sda1と/dev/sda2をコピーすることになる。
#そのため、コピー先に同じパーティション容量の/dev/sdb1と/dev/sdb2を作成する必要があるため、ここで/dev/sda1と/dev/sda2の容量を控えておく。
fdisk -l /dev/sda
# あまり覚えていないが以下のような感じで出てくる。
# 2048から9602のパーティションと96043から999999のパーティションを/dev/sdbに作成する。
/dev/sda1   *      2048      96042  123456   7  NTFS
/dev/sda2          96043     999999   123456    7  NTFS

手順2:/dev/sdbにパーティション作成。(NTFSではなく、sdb1はFAT32 (LBA))で作成する。)最後のwコマンドをするまで、実際には書き込まれないので安心して作業する。

fdisk /dev/sdb

コマンド (m でヘルプ): n 
コマンドアクション
    e   拡張
    p   基本領域 (1-4)
p # 基本pらしい

領域番号 (1-4): 1 #sda1のコピー先なので1

最初 シリンダ (1-652, default 1): 2048 # 上で控えた開始
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-652, default 652): 96042 # 上で控えた終了

# 2つ目を作成
コマンド (m でヘルプ): n
コマンドアクション
    e   拡張
    p   基本領域 (1-4)
p

領域番号 (1-4): 2 #sda2のコピー先なので2

# 上で控えた開始と終了の位置
最初 シリンダ (1-652, default 1): 96043
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-652, default 652): 9999999

コマンド (m でヘルプ): t
選択した領域 1
16進数コード (L コマンドでコードリスト表示): c # FAT32 (LBA)

コマンド (m でヘルプ): t
選択した領域 2
16進数コード (L コマンドでコードリスト表示): 7 # NTFS

# 起動パーティション指定
コマンド (m でヘルプ): a
Partition number (1-4): 1

# 現在の状況確認
コマンド (m でヘルプ): p
# なんか色々出る。

# 書き込み
コマンド (m でヘルプ): w

手順3:パーティションコピー bsオプションは値を上げればコピーが早くなるわけではないらしい。32Mとか64Mあたりでやる。

# sda1はすぐ終わる
dd bs=32M if=/dev/sda1 of=/dev/sdb1
# こっちは長い・・・
dd bs=32M if=/dev/sda2 of=/dev/sdb2

これでSSDから起動してみて起動できればOKである。NGだった場合は、fdisk -l /dev/sdbをよく見てみる。MBRの調整などは基本不要である。コピーが失敗していないか、ファイルシステムが違わないか、起動(boot)パーティションが指定されているかを確認する。

このあとはやらなくても良い(起動しなくなるリスク有り)のだが、gpartedを起動してパーティションサイズを拡張した。gpartedは必ずsudoコマンドで起動すること。

sudo gparted

GUIなので説明は割愛。対象のディスクを選んで、リサイズを選択してからドラッグしてリサイズする。

ローカルネットの中だけのサーバだが、そのうちセキュリティの問題でsambaが他のデバイスから繋がらなくなりそう。そうなったら破棄するか何かで対応しよう。。。

カテゴリー
その他 社内SE

iPhone SE から Pixel 6a に乗り換えた話

Pixel 6aがgoogle storeで42,900円まで下がっていたので購入し、今まで使っていたiPhone SE 2から乗り換えた。

乗り換えてまだ1週間程度だが、概ね快適である。iPhoneの廉価版からPixelの廉価版へ乗り換えた貧乏人だが、5万前後の端末なら、iPhoneより圧倒的にPixelを勧めたい。迷っている人の参考に、個人的な主観で良い点、悪い点を以下に少しまとめたい。

Pixel 6aの良いところ (iPhone SE2比較)

  • 写真がきれい。とても自然な写真が取れる。SE2を使っていたときは全く気が付かなかったが、Pixelを使ってからはSE2の写真の不自然感が気になるようになった。家族写真を撮ることが多いので、その時のその瞬間の本当に自然の姿をとれるほうが個人的には良く、買い替えて良かったと最初に思った点である。
  • 画面が大きい。pixel 6aとiPhone SE 2を並べておくと大きさはあまり変わらないが、pixelはホームボタンがない分、画面を広く使えるので、表示できる情報量が多い。スクロールしている時間が減るし、減ってみるとちょこちょこスクロールするのがストレスだったと気が付いた。もっと大画面ならもっと楽なのかもしれない。
  • 電池が長持ち。Androidの中ではPixelのバッテリー持ちはそんなに良くないらしいが、使っていたiPhone SE 2に比べたら雲泥の差で良い。私の使い方でPixelは余裕で2日は電池が持つが、SE2は夕方には電池が無くなりそうになっていた。SE2は最初から充電が1日終わりには必要だったので、バッテリーのへたり具合を勘案してもPixelのほうが良い。
  • アプリの量が多い。アプリをだいぶ断捨離して移行したが、私が必要なiOSのアプリはAndroidにもあり困ることはなかった。また「Androidしかないアプリ」や「Android版のほうが良いアプリ」も多かった。例えば、NextCloudのアプリはAndroid版のほうがかなり機能性が高いし、iOSでは有料なのにAndroidでは無料となっているVoIPアプリもあった。
  • 置きっぱなしのスマホに「OK、グーグル」と話すと答えてくれる。今日もカップラーメンにお湯を入れたときに「OK、グーグル、タイマー3分」と言ったら3分後に教えてくれて便利であった。Siriでもできたのかもしれないが、使っていなかったので気が付かなかった。
  • AI系が便利そう(推定)。まだほとんど使っていないが、少し「OK、グーグル、XXXXを英語に翻訳して」で日ー>英の翻訳をやってみたところ、すぐに翻訳してくれ、会議で英単語に困った際に使えそうであった。その他、自動文字起こしやら消しゴムマジックやらも、使いこなせれば便利に使えそうである。

Pixel 6aの悪いところ (iPhone SE2比較)

  • 指紋認証の精度が悪い。iPhoneに慣れていると泣きたくなるレベルである。フィルムガラスを張った後で、登録できる4種類の指紋を全部同じ指でやってやっとなんとか使えるかどうかという感じである。
    特に家事をやって手荒れがひどくなると全く認識しなくなる。左手の人差し指の手荒れが少ないので、4つ登録できる指の一つを左手の人差し指にした。ちなみにアプリの生体認証は手荒れしてても瞬時に認証してくれるので、ロック解除時のみ指紋チェックが厳しくなっているのだと思われる。
  • マナーモードの物理ボタンがない。何かの際に「カチリ」とマナーモードに切り替えられるのは便利だった。Pixelでマナーモードにするには、ロック解除して、音量ボタン押して、マナーモード選択と手順が多い。

今のところこんなところであろうか。移行は大変だったが、いつも使っている10~20のアプリだけなら、1時間ぐらいで移行が終わり、後は必要なときに都度入れている。移行でLINEの過去のやり取りが消え多少痛かったが、そもそも読み返すこともないし、すぐに諦めがついた。

もう数ヶ月使ったところでさらに良い点/悪い点を追記してみたい。

カテゴリー
プログラム 社内SE

NextCloudに外部からファイルをアップし内部リンクを取得する方法

別システムからバッチなどでファイルを作成、そのファイルをNextCloudにアップし、NextCloudの内部リンクを取得したいケースがあった。参考までに方法を示す。

CURLでNextCloudのAPIコマンドをたたき、アップしてFileIDを取得する。

PHPのプログラムで書くと以下の感じとなる。

/**
 * ローカルのファイルをNextCloudにアップロードし、内部リンクを取得する。
 *
 * @param string $upFileFullPath アップしたいファイルのフルパス
 * @param string $dstFolder NextClodu上のアップしたいフォルダー(ファイル名は$upFileFullPathのファイル名を使用)
 * @param string $nextCloudURL NextCloudのURL
 * @param string $userName NextCloudのログインユーザー
 * @param string $password NextCloudのログインユーザーのパスワード(アプリパスワード)
 * @return string|bool ファイルアップ後の内部リンクを返す。falseの場合はエラー
 */
function upFileAndGetInternalLink($upFileFullPath, $dstFolder, $nextCloudURL, $userName, $password){

	if (!is_file($upFileFullPath)){ return false; }
	$fileName = basename($upFileFullPath);
	if (substr($nextCloudURL, -1) != '/'){ $nextCloudURL .= '/'; }
	if (substr($dstFolder, -1) != '/'){ $dstFolder .= '/'; }

	$apiOfTheUpFile = $nextCloudURL . 'remote.php/dav/files/' . $dstFolder . $fileName;

	//libxml_use_internal_errors(true);

	$cmd = "curl -T '" . $upFileFullPath . "' -u '" . $userName . ":" . $password . "' '" . $apiOfTheUpFile . "'";
	echo $cmd;
	$ret = exec($cmd, $aryOutput, $resultCode);
	if ($ret === false || $resultCode != 0){ return false; }

	$cmd = "curl -u '" . $userName . ":" . $password . "' '" . $apiOfTheUpFile . "' -X PROPFIND --data '<?xml version=\"1.0\" encoding=\"UTF-8\"?>
		<d:propfind xmlns:d=\"DAV:\">
		<d:prop xmlns:oc=\"http://owncloud.org/ns\">
				<oc:fileid />
		</d:prop>
		</d:propfind>'";

	$ret = exec($cmd, $aryOutput, $resultCode);
	if ($ret === false || $resultCode != 0){ return false; }

	$ret = str_replace(':','',$ret);
	$xml = simplexml_load_string($ret);
	$fileId = (string)$xml->dresponse->dpropstat->dprop->ocfileid;

	return $nextCloudURL . "index.php/f/" . $fileId;

}

使用する感じは以下。

$upFileFullPath = '/td/dl/hogehoge.xlsx'; 
$nextCloudURL = 'https://yourNextCloud.com/'; 
$dstFolder = '/yourName/All/'; // NextCloudの"data"フォルダ以下を指定。ユーザ名が最初のフォルダ階層になるはず。
$userName = 'YourName';
$password = 'xH6Jk-Hkdje-OPalkd-J4PCn-mqxMW';

echo upFileAndGetInternalLink($upFileFullPath, $dstFolder, $nextCloudURL, $userName, $password);
カテゴリー
その他 社内SE

Collabora Onlineで接続エラー “Failed to add session to XXXX” を解決

Collabora Onlineをアップデートしたら、NextCloudで”ドキュメントの読み込みに失敗 NextCloud Officeが読み込めませんでした – しばらく後でもう一度試してください”というエラーが表示され、Office系のファイルが開けなくなった。

エラーの内容としては以下の感じである。

WRN  Waking up dead poll thread [HttpSynReqPoll], started: false, fin
ished: false| net/Socket.hpp:725
ERR  #30: Read failed, have 0 buffered bytes (EPIPE: Broken pipe)
ERR  #30: Socket write returned -1 (EPIPE: Broken pipe)
ERR  loading document exception: WOPI::CheckFileInfo failed:
ERR  Failed to add session to [https://hogehoge.com:443/index.
php/apps/richdocuments/wopi/files/52797_ocic20zydkap] with URI [https://hogehoge.com/index.php/apps/richdocuments/wopi/files/52797_ocic20zydkap?access_token=dcy91ZZq9mSvxv1XsGrW2ucmp8CmFcu4&access_tok
en_ttl=0]: WOPI::CheckFileInfo failed:

この「Failed to add session to」はCollaboraがNextCloudに接続できないときに出力されるエラーで、例えば上なら、「hogehoge.com」の名前解決が出来ていないケースが多く、/etc/hostsやらDNSやらで名前解決すれば動くことが多い。だが、今回はアップデート前は動いていたため、名前解決のエラーではない。

結論から言うとIPv6を無効にすると無事動作した。

諸事情で、このサーバの設定では、ポートをLISTENするプログラムは徹底してIPv4のみ有効として設定した。Collaboraも設定ファイルのnet.protにIPv4を設定しIPv4のみ有効とした。

通常のサーバならIPv6も有効にするところだが、本サーバはさくらの専用サーバで、さくらの専用サーバはIPv6の提供をやめてしまっており、IPv4でしか接続できない。なのでIPv6をLISTENするソケットは可能な限り削除した。

1日いろいろ設定をいじりまわって、Collaboraを別サーバで動かすことまで考えて、最後のあがきでIPv6を無効にしたところするっと動作した。理由はわからないが、CollaboraがIPv6でNextCloudに接続しようとしていて、接続エラーとなっていたと思われる。

同じような人がいるかもしれないので、ご参考まで。

Ubuntu 22でIPv6を仮で無効にするには以下のコマンド。

sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1
sysctl -w net.ipv6.conf.lo.disable_ipv6=1

これで動くようになればIPv6が原因である。原因がIPv6であれば以下のコマンドで恒久的にIPv6を無効にする。(ubuntu 20以下だと以下のコマンドはバグで動作しないので注意。)

vi /etc/sysctl.d/60-custom.conf
---
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
--

sysctl -p
systemctl restart procps