Nextcloud又一個坑,使用onlyoffice造成的

上次提到我又回歸使用 onlyoffice 75.1版,過了一段安穩日子後,沒想到居然遇到有個pdf,裡面小圖片不見的靈異現象,我還罵同事眼睛業障重,叫同事把看不到圖的那個pdf檔案,直接下載改用adobe reader看看,結果是「要不是我親眼所見,我是萬萬不能相信啊」,還真的連我都業障重,onlyoffice就是看不到小圖片,而adobe reader可以。

後來我先解除onlyoffice檢視pdf檔案設定,改使用nextcloud外掛 pdf.js, 就可以看到原本看不到的小圖片了,坑真的很多很大。

問題雖暫時解決,但pdf.js 功能太少了,不能鎖下載,也不能有浮水印,Gold害。

在沒有更好的處理方案前,我只好先搞定“公司規定不能下載PDF”的規定;最後手動修改程式,直接暴力停用pdf.js的下載功能
環境是:nextcloud 26,pdf.js 2.6

vi /var/www/html/apps/viewer/js/viewer-main.js
# 找到以下字串,將紅色部分刪掉
,e.canDownload?t(“NcActionLink”,{attrs:{download:……,e._v(” “),e.canDelete?…

cd /var/www/html/apps/files_pdfviewer
egrep -r "toolbarViewerRight" .|more
# 找到toolbarViewerRight 後面加上 hidden='true'

另外,安裝完pdf.js 我不確定是否要執行”啟用” javascript功能,但還是記下來好了(官網有特別提到此指令)

docker exec --user www-data -it nextcloud2 php occ config:app:set files_pdfviewer enable_scripting --value=yes

			
		

「FydeOS – 为中国用户打造的ChromeOS」初體驗

公司希望Android撰寫的測試程式移植到windows平台上,但是這樣做很耗時,程式要重新開發; 因此我想到讓筆電或電腦桌機能夠直接執行android, 這樣就能解決問題了。

我排除已知的解決方案之一-Android模擬器、windows 11模擬andorid不考慮(因為要停用了)。

最後我希望類似chrome book 使用chrome OS直接支援android 的方式,沒想到還真的找到了 –FydeOS

安裝FydeOS有些眉角要注意的:

  1. 筆電-panasonic CF-NX3,12G Ram
  2. 官方安裝方式,我要連續安裝好幾次才成功
  3. 安裝時,我的舊電腦BIOS先調整非UEFI才能安裝,安裝後再調回UEFI,才能啟用開發者模式(v18版)
  4. 安裝時,我使用本機帳號,不線上註冊
  5. 安裝完畢,FydeOS系統成功開機,啟用Android位置權限失敗,後來發現安裝Open GApps,GApps會將Play商店裝起來,才能啟用位置權限
  6. Play商店無法登入(未通過Play防護安全認證)
  7. 其他方面很順,簡直就是chrome book

更改windows 10、11開機後顯示登入的帳號

一般來說個人用的Windows,本機帳號可以直接登入;若為公司網域帳號或個人m$的帳號,就必須經過認證(密碼,認證器)才能登入。而且windows會記住上次登入的帳號,重開機後,會直接顯示該帳號,我們只要輸入密碼,就能登入了。

但是麻瓜們總是會忘記自己登入的帳號,一旦有人用其他帳號登入,那麼下次開機,windows顯示的就不是原本麻瓜的帳號,這樣麻瓜會爆走,IT就挨踢了。

為了解決這個問題,我挖阿挖阿挖,在這裡找到解法,只要修改註冊值,重新開機就好了。

註冊表

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI

註冊值

LastLoggedOnDisplayName  這我沒看到,沒設定好像也沒差
LastLoggedOnSAMUser  設定「網域\帳號」,如:SHORTDOMAIN\kafeiou
LastLoggedOnUser  設定「網域\帳號」,如:SHORTDOMAIN\kafeiou
LastLoggedOnUserSID 輸入該帳號的SID,如:S-1-5-21-112
SelectedUserSID  輸入該帳號的SID,如:S-1-5-21-112


其中SID取得方式:

wmic useraccount where name='登入帳號'

**臨時用其他帳號登入,又不想被人家發現,可以以照上述方法(需管理者權限),改回原本登入帳號。

Git出現很多修改過的檔案,實際上卻沒有異動

公司有個RedHat 5.x伺服器系統,安裝git 2.9 ,多年以來使用上一直相安無事;沒想到因為全面停用tls 1.0,導致git無法使用。

RedHat Linux系統在無法升級的情況下,git就再起不能;最後我指定其中一台windows主機,安裝RaiDrive透過sftp掛載Linux伺服器的git目錄,使其變成windows其中的一個磁碟,再透過windows的git用戶端,達到讓Linux伺服器裡面的資料能上git版控的目標。

就在我在windows主機上,順利掛載Linux目錄後,接著準備將資料push到git server,豈料出現一大堆檔案呈現已修改狀態,提示我這些檔案要commit,但是實際上這些檔案沒有任何異動修改;我追查了一下,發現是換行字元搞的鬼,Linux換行只有\n ,windows則為\r\n;

windows掛載Linux檔案,因為換行字元不同,當然會被誤認檔案被修改過。

解決方式,在windows掛載linux情況下,執行以下git指令,就可以解決了。

git config --global core.autocrlf true
git config core.filemode false
git status

 

安裝bookstack書架

我的軟體工程概念很差,最近遇到一個案子,我想要找人一起,但是那個同事主管說要寫提案,了解後才會分配資源。

於是我想到了「SRS(Software Request Spec)軟體需求規格」當作提案,但是又不想要用傳統的word檔案書寫(很難維護),於是上網找了一下軟體需求與功能規格書的範例,終於找到滿意的書寫格式-使用gitbook

https://mason1762.gitbook.io/samxinbakery/gong-neng-ge

可惜gitbook自架很麻煩,於是我又找到相似而且可以自架、開源的系統-bookstack
bookstack宣稱是wiki軟體,也可以當知識管理,以書架、書本為基本架構的系統
https://demo.bookstackapp.com/books

安裝方式很簡單,我這次寫在網誌裡,也沒放在svn系統(https://docs.kafeiou.pw/!/#iammis),而是直接現學現賣,把安裝方式寫在自架的bookstack上。

https://book.kafeiou.pw/

另外有個很棒bookstack網站建議大家參考一下 BUBU 知識庫 & 秉迅資訊.Studio

nextcloud誤刪檔案,還原失敗

慘,我的錯。

解決方式:
1. 到nextcloud該使用者目錄,找出<user>/files_trashbin/files 複製到 <user>/files
2. 執行 php occ files:scan –all

若出現 Exception during scan: “files/xxx”) is locked 則進入資料庫,刪除資料表資料 DELETE FROM oc_file_locks WHERE 1;

刪除之後,再次執行 php occ files:scan –all 還原檔案後,原本分享的狀態可能會不見,要自己重新設定了。

nextcloud還原甘苦談

幾天前我想把nextcloud 25.0.11 升級到 26.0.5 ,這麼多年來從18版一路高歌升到25版,都沒遇到問題,這次卻栽了無法升級,原因卡在資料庫那段,這問題似乎無解,在不想等待的情況下,我決定還原回去。

2023/9/22 發現我25.0.11升級會出錯,官方馬上釋出25.0.12 ,但我升級還是失敗,原來資料庫mariadb 10.3.2版本有問題,我直接docker pull mariadb:10.3 後面不接了,這樣就從25->26能升級成功

還原步驟:

我先將restic 所備份最新版nextcloud備份的snapshot掛載起來,接著停用目前的資料庫(mariadb 10.3.2 多個容器共用);再將nextcloud的相關volume、資料庫還原,結果失敗,失敗原因不明,docker看log也看不出來,web登入出現「Nextcloud the server was unable to complete your request」錯誤,真真急死人;後來爬文,歸納問題可能有三種:目錄權限沒設定好、資料庫問題與ldap無法連線。

不屈不撓檢查才發現原來是我偷懶,當初所有容器所用到的資料庫都統一讓唯一的資料庫容器管理,現在要還原,我停止資料庫容器後,只有還原其中nextcloud的資料庫,其他資料庫不還原,導致重新啟動資料庫容器時,nextcloud資料庫居然有一些資料表損毀(ENGINE=InnoDB)。

好在損毀的資料表是oc_authtoken,只要重建就好了,但是重建失敗,mysql會說該資料表已在,但是query時,mysql又說沒有該資料表,網上有位苦命工程師說建資料表時,遇到這情形,請改用ENGINE=MyISAM格式就能成功,我照著做之後,nextcloud又恢復往日雄風還原成功,但重建的資料表MyISAM跟其他使用InnoDB的資料表格格不入,以後要找一天將資料庫修復才行。
這故事告訴我們,還原資料庫容器要全部都還原,不可只還原其中一部分資料庫。

CREATE TABLE `oc_authtoken` (   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,   `uid` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '',   `login_name` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '',   `password` longtext COLLATE utf8_bin,   `name` longtext COLLATE utf8_bin NOT NULL,   `token` varchar(200) COLLATE utf8_bin NOT NULL DEFAULT '',   `type` smallint(5) unsigned NOT NULL DEFAULT '0',   `remember` smallint(5) unsigned NOT NULL DEFAULT '0',   `last_activity` int(10) unsigned NOT NULL DEFAULT '0',   `last_check` int(10) unsigned NOT NULL DEFAULT '0',   `scope` longtext COLLATE utf8_bin,   `expires` int(10) unsigned DEFAULT NULL,   `private_key` longtext COLLATE utf8_bin,   `public_key` longtext COLLATE utf8_bin,   `version` smallint(5) unsigned NOT NULL DEFAULT '1',   `password_invalid` tinyint(1) NOT NULL DEFAULT '0',   PRIMARY KEY (`id`),   UNIQUE KEY `authtoken_token_index` (`token`),   KEY `authtoken_last_activity_idx` (`last_activity`),   KEY `authtoken_uid_index` (`uid`),   KEY `authtoken_version_index` (`version`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

以上重建table失敗

CREATE TABLE `oc_authtoken` (   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,   `uid` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '',   `login_name` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '',   `password` longtext COLLATE utf8_bin,   `name` longtext COLLATE utf8_bin NOT NULL,   `token` varchar(200) COLLATE utf8_bin NOT NULL DEFAULT '',   `type` smallint(5) unsigned NOT NULL DEFAULT '0',   `remember` smallint(5) unsigned NOT NULL DEFAULT '0',   `last_activity` int(10) unsigned NOT NULL DEFAULT '0',   `last_check` int(10) unsigned NOT NULL DEFAULT '0',   `scope` longtext COLLATE utf8_bin,   `expires` int(10) unsigned DEFAULT NULL,   `private_key` longtext COLLATE utf8_bin,   `public_key` longtext COLLATE utf8_bin,   `version` smallint(5) unsigned NOT NULL DEFAULT '1',   `password_invalid` tinyint(1) NOT NULL DEFAULT '0',   PRIMARY KEY (`id`),   UNIQUE KEY `authtoken_token_index` (`token`),   KEY `authtoken_last_activity_idx` (`last_activity`),   KEY `authtoken_uid_index` (`uid`),   KEY `authtoken_version_index` (`version`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

改成MyISAM就成功重建table

nextcloud雲端檔案,新增額外屬性

公司有追蹤「檔案過期」需求,最方便就是賦予檔案新的屬性—過期日,作為nextcloud粉絲,當然由nextcloud著手,萬幸有個app customproperties能達到要求,最後再寫個程式追查一下資料庫資料表oc_properties 過期日資料,就可以完成系統自動通知功能,定期通知檔案主人快到期,讓主人進行延展或是不再追蹤。

但是該app已經有一陣子沒更新了,不支援nextcloud 25以上版本,有人告知可以小改繼續在25、26版使用,真是幸運,我也依樣畫葫蘆,弄了一個能支援25~28的版本來,有興趣的可以按此下載,下載後先解開zip可得tar.gz檔案,再解開成一個目錄「customproperties」,將整個目錄放在nextcloud的custom_apps目錄裡,並且確認目錄權限正確後,回到nextcloud就會出現「 Custom Properties」外掛,即可啟用。

outlook另存msg格式檔案,對方看不懂

outlook作為麻瓜收發郵件軟體最高殿堂,另存檔案當然只能讓outlook打開,其餘閒雜軟體皆不可冒犯。

某日一麻瓜以附件方式,寄給朋友,豈料朋友並沒有outlook,無法開啟msg格式附件,真是大膽!麻瓜求助郎中,郎中開出一帖msgviewer軟體,該軟體佐以java服用,即可將outlook之msg檔案,轉成eml格式(國際標準rfc822格式),經熬煮60個時辰煉化成eml,檔案寄給朋友,朋友以異端thunderbird軟體開啟,正確無誤。

1 2