發表文章

目前顯示的是有「howto」標籤的文章

iphone 照片增量備份

 原本是想用 immich app 來達成增量備份的目的,就像 icloud 那樣,手機有新照片就自動傳上 icloud 、手機上殺照片時,已經上傳的照片還會留在 icloud 上(然後就因為越存越多所以要花錢買空間來存手機資料),結果變成了鏡像同步備份(手機上殺了檔,伺服器上就不會有檔) 工作環境:     immich app: 開 background + foreground backup 開啟自動備份功能  於是把之前找的解決方案又 review 了遍,再試個替代方案出來,nextcloud, photoprism, syncthing, damefly, home gallery, warmwhole, croc, pandrop, localsend ......,大多是 server 端解決方案,可以透過網路上傳,然後有網頁可以看照片,有些還支援影片播放,但是不一定有 iphone 的 app 可以用,有 app 的,也可能不是原生的,用的是第三方的 app ,而且可能會看起來怪怪的,反正狀況很多,然而,搜尋的時侯覺得很奇怪,沒有什麼討論串,可能是想太多了,應該有很簡單的解法  回頭檢查 iphone 原生的 「儲存到檔案」/「連接伺服器」 的功能,不知道從什麼時侯開始,「檔案」app 裏出現了「連接伺服器」 的功能,不支援 ssh 所以就別想在這裏 scp (無法使用 ssh:無法完成此項操作,因為不支援此URL),可以使用網芳來連,可以讀寫,就和在電腦上操作一樣,反應久了點就是了: 選一些照片,超過100個檔案以上就很卡,分段選檔吧 按左下角開啟其他的 app /功能 的圖示(有個向上的箭頭) 選「儲存到檔案」,一開始會跳進 icloud,按左上角回到上一層,會出現「已共享」的區塊 選右上角有三個點的圓形餅乾,「連接伺服器」 打好網芳的位址(smb://1.2.3.4),id,password 選好你要上傳檔案的資料夾 儲存 過了很久的一下下,傳好檔案會跳回照片 app 繞了一圈還是回到 samba ...... 續骨靈藥,金盒久藏啊~~ 收工! ========================================= 跌倒記錄: 官網討論區上一直說是用手機原生的 app 管理照...

為內網的 IMMICH 設定加密連線

 話說現在的網站都要有 https 沒有那個 s 好像犯天條似的,即使是在內網也要搞個 s 來玩玩,如果你已經當了勇者把伺服器放上公網,也歡迎你分享設定,肯定香啊~,做為一個膽小時間又少的使用者,還是來設一下 s 吧! 工作環境:     debian linux          docker               immich               nginx(做為反向代理用)                反向代理有很多選項,試了很多沒遇上好運,回頭用了最基本的 nginx,或許下次可以試試 caddy 吧 首先,開2個 docker 的網路並且設定 docker network create inner_network docker netowrk create reverse_proxy_network   在開始設定之前,記得把之前的 immich-app 停下來 docker compose down 設定一下 docker-compose.yml :進到你的 immich-app/docker-compose.yml 把每個 service 的 networks 改一下 如果 service 名稱是 immich 開頭的: networks:   - inner_network   - reverse_proxy_network 其他的 networks:   - inner_network networks 的總述 networks:   proxy:     driver: bridge   internal:     driver: bridge  引用 nginx:   nginx :     container_name : ng...

繼續 IMMICH 安裝來備份手機上的照片和影片

 之前有提到為了躲避 nextcloud all-in-one 的群坑,所以先擱(割)置(捨)難搞的 nextcloud aio 轉投 immich-app 的懷抱,畢竟原本的目的就沒有要包山包海,主要是要把照片和影片存出來而已 工作環境:     內網的 debian linux          docker(-compose)               immich 後來發現上次用的註解法不是最佳解,所以開大門走大路把整個 immich 抓回來裝: git clone https: //github.com/immich-app/immich.git install.sh 然後到 immich-app 裏把 docker-compose.yml 改一下,可以改一下這個 environment:   - TZ=${TZ} .env 可以改一下這個 UPLOAD_LOCATION=/你想放資料/的位置 TZ=Asia/Taipei 然後 docker compose up -d 連到主機網址 http://192.168.100.100:2283 就可以用了 上傳的檔案在 /你想放資料/的位置/library/admin/ 裏面 是的,你沒有看錯,是 http 不是 https  很在意的人再搞一下 反向代理吧,先醬子將就用著 收工!

合併多個 docker-compose.yml 檔案

 雖然 docker-compose.override.yml 可以將修改後的設定套用到新的 docker image 裏啟用,但是維護1個檔案還是比維護2個檔案好一些,最好合併檔案的時侯不要使用傷眼法,和自已動手剪貼,而是程式自已整理貼好… 工作環境:     Linux Mint          Docker compose docker-compose -f docker-compose.yml -f docker-compose.override.yml config > docker-compose.merged.yml  mkdir orig mv docker-compose.yml orig mv docker-compose.override.yml orig mv docker-compose.merged.yml docker-compose.yml 之後就用新的 docker-compose.yml 來啟用 docker 還有就是後面的檔案會蓋掉前面的檔案的設定,有些設定則是會多個並列,所以還是得進去調一下設定的內容     收工!

docker 容器之使用者 uid 和 gid

 docker 容器的 uid 和 gid 常會讓使用者在 host 端取用 volume 時綁手綁腳,雖然有人說這其中還有安全性的考量,但是使用 sudo 好像也沒有比較好,為了可以直接存取 volume 的檔案,居然花了好久好久,久到夫人說:怎麼最近又開始抱著電腦了?……………………………………其實是電腦沒有放人  工作環境:     Debian          mariadb 10.11 docker(compose) 狀況:裝好 mariadb 之後,volume 的權限是 999.999 ,很煩,得 sudo 才能在本機作業,雖然也沒什麼不行,但就不愛,然後…………搞死自已  2個解法,因為不是 product 環境,先試到這兒,期望有人講白話,把這題解了,免得折騰半天 法1:雖然不能自動化,但是直覺…  先裝起來  dcshell container_name (docker exec -it $1 /bin/bash -l)  usermod -u your_uid_in_host app_user;  groupmod -g your_gid_in_host app_group;  exit  chown -R user_user:user_group docker_volume  然後參照之前的 客製 docker image 的方式, 在 docker-compose.override.yml 設定引用新的 image  法2:真的用 Dockerfile 就可以自動化嗎!?先搞懂 Dockerfile 怎麼用吧  去 下載 所需的檔案,然後加一個超奇怪的 「USER "1000"」 到 Dockerfile 裏,再回到 docker-compose 裏引用 Dockerfile 並且指定 user ,這個解法能用匪夷所思來形容,反正能解,先頂著   總而言之  書到用時恨太多! 先醬!      收工! =================== sample 檔 =============...

Docker image 以及物件控管 主要是刪除不必要的物件

docker 真的是好用,一個 docker-compose.yml 就可以配置作業環境,但是… 如果有好多功能要啟用,雖然最後得到適用的設置,除非你是超級幸運星,每次都是一次成功配置這些環境,久了,還是會有些沒有用到的或是中間產物的物件,每次佔用一點點空間,慢慢吃掉你的硬碟空間…,這次就是要清掉這些暫(垃)存(圾)物件。 列出所有 Untag 的容器映像: docker images --filter "dangling=true" 列出所有 Untag 的容器映像,但只顯示 Image ID 而已: docker images --filter "dangling=true" -q 快速移除所有無用的容器映像 (Remove all dangling images): docker rmi $(docker images -f "dangling=true" -q) 移除所有沒用到的容器映像 (Remove all unused images): docker image prune -a 移除所有沒用到的 Docker 物件 (Docker System Prune): 注意!!!會連同以下, 「停用的容器」(stopped containers) 「無用的網路」(dangling networks) 「無用的容器映像」(dangling images) 「無用的建置快取」(dangling build cache) 全都刪除 docker system prune -a 在 N 次 docker-compose up -d 後,把還在用的物件啟用後,一次性地 docker system prune -a 就可以看到一連串療癒的雜湊值,殺了一堆檔案後,居然生出了 12G 的空間,開心!   收工!      

據說 cloudflare 也是可以用 ddns 的

 實作在 mikrotik 上更新 cloudflare ddns ip ,原來只要開通 cloudflare api 就行…… 單藍,要再加些楜椒和鹽… 工作環境:  Linux Shell  Mikrotik routerOS  cloudflare API # 建立更新 cloudflare DNS 記錄用的 API Token # create API Token in cloudflare The TOKEN value is created in the Cloudflare dashboard. Follow these steps: 1.  Click the profile icon in the top right of the dashboard, and choose 'My Profile' . 2.  Click on 'API Tokens' , then 'Create Token' . 3.  Click 'Start with a template' , then choose the 'Edit zone DNS' template. 4.  Under 'Zone Resources' , choose your top level domain name from the pull-down list on the right. 5.  Click 'Continue to summary' . 6.  Click 'Create Token' . 7.  Copy the token shown on the following screen and set the TOKEN environment variable to its value. # 更新 cloudflare DNS 紀錄會用到的變數 # 參考資料說要用 direnv 因為除錯失敗,直接把變數放到 gen_script 裏了…… # Variables needed for updating cloudflare DNS records HOST =api.cloudflare.com DOMAIN =yourDomain.n...

使用 devilbox 建置 LAMP 環境

 docker 功能很強,可以(被)玩的東西很多,雖然要用 docker 自已建置一個 LAMP 環境也不算太難,單藍如果有人建好 LAMP 可以拿來用不就不難了(嗎?)… 工作環境:     Ubuntu Server 22          docker               devilbox  選用這個套件主要是它把很多伺服器 參數 的控制項都寫好了,整體上來說非常方便設定和使用,使用時透過 .env 來設定就行,(被)玩了好一會兒,覺得這個套件主要還是針對開發人員在本機上運行的,如果是放在伺服器遠端連過去的話,dashboard 會和 vhost 打架… 如果你的不打架,可以留言教一下,感激不盡   列出可能會動到的設定 DEBUG_ENTRYPOINT =4 TLD_SUFFIX =yourdomain.name NEW_UID =1000 NEW_GID =1000 TIMEZONE =Asia/Taipei DEVILBOX_UI_SSL_CN =localhost,*.localhost,devilbox,*.dvl.to DEVILBOX_UI_PROTECT =1 DEVILBOX_UI_PASSWORD =your_password DEVILBOX_UI_ENABLE =0 DEVILBOX_HTTPD_MGMT_USER =userName DEVILBOX_HTTPD_MGMT_PASS =your_password HTTPD_VHOST_SSL_TYPE =redir   #自動將 http 導轉到 https PHP_SERVER =uncomment_version_you_like HTTPD_SERVER =uncomment_version_you_like MYSQL_SERVER =uncomment_version_you_like HTTPD_DOCROOT_DIR =dirNameYouLike MYSQL_ROOT_PASSWORD =your_password PGSQL_ROOT...

ssh server 也來調整成 publick key 登入

 使用 public key 登入 ssh server 並不是什麼新玩意,只是很久以來沒(懶)有(得)去(去)碰(管),最近有點空檔,把這些個設定檔搞一搞好了 工作環境:     Windows Client(以下稱 Client)     Ubuntu Server(以下稱 Server)  Server: /etc/ssh/sshd_config 的一些要更改的參數 #如果兩種都 password 和 public key 都開放的設定項,如果只開放其中一種,單藍就是把另一種方式的設定註解掉 # 使用 password 認證 # 這個應該原本就有 PasswordAuthentication yes # 這個還是限制一下吧 PermitEmptyPasswords no # 使用 public key 認證 # 要開放 public key 登入的設定 PubkeyAuthentication yes # 開放 public key 的設定檔 AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2 # public key 和 password 都需要才能登入 AuthenticationMethods "publickey,password" # 這時侯要把這個註解掉,不然就會先輸入一次密碼,過一次 public key,再輸入一次密碼 # PubkeyAuthentication yes    Client:  ssh-keygen -t rsa -b 4096  id_rsa.pub 開頭應該長得像這樣 ssh-rsa AAAA  找不到 ssh-copy-id 所以沒辦法 ssh-copy-id username@remote_host  要手動把金鑰加上  cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"  或是到...

vscode terminal 執行 anaconda activate ENV

  之前的 vscode 不知裝了什麼套件,之後在終端機(terminal)裏執行 python script 時都會自動啟動相應的 env ,在新電腦上不知怎麼了,在 vscode 中的 terminal 執行 conda activate 時總是一直要求要 conda init <指定的shell> ,但是 init 總是失敗,糟糕的是,失敗沒有成為母親……  雖然執行[F5]時,在 terminal 會出現,& path\Python.exe path\ptyhonScript.py 還是可以執行,但那些除錯訊息還是一直出現,蠻惱人的 工作環境:   Windows 10    anaconda     python env    VS Code     python extension     anaconda extension 最簡單的解法:  裝 anaconda extention 指定 env 名稱給它,執行時按右鍵 > Run in anaconda  這個解法其實也有個煩人的地方,在設定 extension 時,需要用到 github 或是 microsoft 認證 使用批次檔(.bat):這個方式會跟著 anaconda 繞來繞去,會啟動兩層的 env(base 和你指定的 env)  因為每次要手動輸入指令太麻煩,指令也懶得記,把指令存成批次檔,之後要用時呼叫一下就行 powershell:( & 'C:\anaconda\shell\condabin\conda-hook.ps1' ;  可以省略沒差,這個方式好像會同時啟用 base 和你指定的 env ),這個方式好像會隨 anaconda 啟動兩層的 env,因為 conda deactivate 要兩次,第一次會退回 base env powershell.exe -ExecutionPolicy ByPass -NoExit -Command "& 'C:\anaconda\shell\condabin\conda-hook.ps1' ; co...

把 WSL 裝在非系統碟(Non C drive)

 WSL 全名 Windows Subsystem for Linux ,可以在 windows 下直接運行 Linux ,可以用來掛載、讀寫 ext4 硬碟(沒錯,可讀、可寫,表示再也不用裝一些特別的應用程式),運行原生的 Linux 功能,像是 wget, rsync ...,等 ,只是,就是那個 But,它會把 Linux 裝在 C 槽,也就是那個小小的 SSD 的所在  工作環境:   Windows 10 home 20H2     WSL   假設你已經裝好 WSL ,而且也已經更新好了 (wsl --update)   用系統管理員身份啟用 PowerShell 並且啟用 WSL ,完成後可能需要重開機  Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux  建立一個工作用資料夾:   D:   mkdir WSL   cd wsl  下載 Linux(default, 新版的):    Invoke-WebRequest -Uri https://aka.ms/wslubuntu -OutFile Ubuntu.appx -UseBasicParsing     如果遇到安全性問題無法下載,請 參考  更名、解壓縮:   Rename-Item .\Ubuntu.appx Ubuntu.zip   Expand-Archive .\Ubuntu.zip -Verbose  執行:   Ubuntu\ubuntu.exe   要設一個使用者名稱,設定他的密碼  查詢目前安裝的 WSL:   wslconfig /list /all  要用的時侯:   wsl 收工!          

Redo backup and restore 開機 USB 無法開機

 曾幾何時,要製作開機 USB 已經可以經易使用 rufus 達成,就算有 UEFI 從中作梗,也是能開機,奈何時過境遷,現在作好了開機 USB ,遇到了 secure boot violation 0x1A  工作環境:   redo backup and restore 4.0.0 USB 開機碟  錯誤訊息:   secure boot violation 0x1A  解法:   進 BIOS 把安全開機(Secure Boot (Controll)) 關掉 (Disable)  雖然有骨狗到可以用 enroll key 之類的設定,懶得折騰了,反正不是生產環境用的,趕快把資料備份完(打)上(電)工(動)才是王道。     收工!

Linux Mint cinnamon 的一些坑

 久別 Linux Desktop 之後再次啟用,因為 ubuntu Desktop 用起來覺得會三不五時卡頓一下,後來轉到 Linux Mint Cinnamon 上,比較不會頓一下頓一下,而且剛裝好就會有精靈引導設定系統,最好是先把這些精靈導引事項先搞定,再接著客製使用環境。 工作環境:  Linux Mint Cinnamon  一、fcitx 別先急著裝:先在啟用時的導引精靈裏有個 system Manager 的輸入法(input method)裏面,記得先把 traditional Chinese 依照說明完成之後,再去各別裝 fcitx-table-boshiamy 之類的個人愛用軟體  否則會出現 fcitx-data conflict )(*&^()(*& 之類的難解狀況;如果已經遇到了就得 sudo apt autopurge fcitx* 移除 fcitx 之後,再回去 system Manager 把 traditional Chinese 的設定搞定才重裝無蝦米輸入法 二、gnome-terminal 突然失效:在完成 traditional Chinese 的設定之後,gnome-terminal 只會轉一轉之後就沒有開起來 :   重裝無效,其他 terminal 如 Xterm 可正常使用  vi /etc/locale.conf(預設是沒有這個檔案的):加入 LANG=en_US.UTF-8 就能修好  未試: LANG=en_US.UTF-8 bash gnome-terminal 一切回復正常 收工!

在 Windows 10 下掛載 Ext4 硬碟

 工作環境:     Windows 11, 10 Home ver. 22H2          WSL          PowerShell (可能需要管理者權限)          ext4 硬碟  Get-wmiobject -query "SELECT * FROM Win32_DiskDrive" Partitions : 1 DeviceID   : \\.\PHYSICALDRIVE0 Model      : ******************** Size       : 1000202273280 Caption    : 廠牌型號資訊 Partitions : 3 DeviceID   : \\.\PHYSICALDRIVE1 Model      : ******************** Size       : 256052966400 Caption    :廠牌型號資訊  wsl --mount \\.\PHYSICALDRIVE1 --partition 1 到檔案總管的 Linux 下的任一個虛擬機器下的 /mnt/wsl 即可讀取  Linux(\\wsl.********)\********\mnt\host\wsl\PHYSICALDRIVE3p1  可讀可寫,可用中文 卸載硬碟  wsl --unmount \\.\PHYSICALDRIVE1  wsl --unmount #卸載所有掛載的硬碟 ======================= 除錯 ======================= 開啟或關閉Windows功能 ...

raspberry Pi 的一些相關操作

 話說 之前想要搞個 NAS 來玩玩 然後發現用老機有點難搞 因為太久沒用了 連要重置個 Windows XP 的密碼都卡來卡去的 再者就是得養個吃電怪獸 剛好 有人因為拿到了個很難搞的 raspberry Pi 4B 說是太麻煩了 沒有預裝的 Windows 之類的作業系統 於是就有了新玩具  工作環境:     raspberry Pi 4B           有 micro SD 卡讀取器          micro SD 卡          micro HDMI 公 to HDMI 公 訊號線          USB type C 電源線          無線鍵鼠(USB 連接器)         OS: raspbian Lite 32 bit     Windows 筆電           有 SD 卡讀取器          micro SD 卡轉 SD 轉接卡(買卡的時侯注意一下,買有轉卡的)          angery IP scan     可攜式外接顯示器(mini-HDMI 母 接頭) 買 HDMI 接頭的好 miniHDMI 要轉接頭麻煩   安裝系統: 其實要給 raspberry Pi 裝系統算是簡單的 去官網下載映像 寫入程式(Raspberry Pi imager) 然後全部都選預設選項不要動 指定好你的 sd 卡的磁區 就可以進行燒錄(寫入系統到 SD 卡) 把寫好的 SD 卡放到 raspberry Pi 的讀卡器 接上電源就可以開機了  在這種情形下你需...

再探 chrome 遠端桌面

 遠端桌面從最早的 X 、 VNC 、 RDP 、 team viewer 、 anydesktop …… chrome remote desktop 可以和前3項比肩,它免費,而且透過擴充套件(extension)的方式就能啟用,號稱安全,可以透過 gmail 帳號管理  工作環境:     Windows 10 桌機          chrome 瀏覽器               chrome 遠端桌面(chrome remote desktop)     手機 / 筆電 / chromebook  先在桌機上裝好 chrome 遠端桌面:三個點 > 更多工具 > 擴充功能 > 搜尋 desktop > 安裝起來 > 設好密碼並且記住,等一下會用到  從手機 / 筆電 / chromebook 連線到已登錄的裝置:連線到 https://remotedesktop.google.com/access > 選取你要連線的 已經登錄的 裝置 > 輸入密碼   此時你可以從遠端操作你的電腦了  和 RDP 不同的是,你用 RDP 有時侯會被遠端的信任對話擋住,就連不上了,而 chrome 遠端桌面是先講好要連進來時的密碼,有密碼就能連  收工!

Mikrotik router 無法使用 winbox 透過 IP 連接

 不知道是不是設定的時侯連線狀態有佔住,還是用的是 wiregurad 的連接方式,當時是可以順利連上 router 的,這次想測 site-to-site wireguard 2個節點下的內部網路機器是否可以互相連通,發現要使用  winbox 進其中一個 router 時,無法透過 IP 登入,還好透過 MAC 仍然可以連進去,檢查 IP > services 發現 winbox 有打開,兩端內部網路機器可以互相 ping 到,多半又是防火牆擋住了  工作環境:     2 mikrotik router with site-to-site wireguard VPN       進入 router 後趕快把 log freeze ,並且找關鍵字 8291(預設的 winbox port),發現被 DROP ALL 的 firewall filter 擋下了,所以要設 log 才好排查設定啊~~  有 log 幫忙就能很容易知道要開什麼洞給自已鑽,因為 log 會詳細記錄封包的來龍去脈,照著把小門打開就行:記得 dst-address ,還有 src-address 要視你的需求和設定,改成你的目的地和來源的 IP 位置或是範圍 /ip firewall filter add action=accept chain=input comment="allow LAN/bridge to Winbox" \     connection-state=new dst-address=192.168.1.254 dst-port=8291 in-interface=\     bridge1 log=yes log-prefix="allow LAN/bridge to Winbox" protocol=tcp \     src-address=192.168.1.0/24   設好了以後,馬上用 winbox 透過 IP 連進 router ,已經可以登入了      收工!

Mikrotik CCR 無法更新

 新版(7.8) RouterOS 釋出,想要看看有沒有 ROSE storage 可以用,先升級看看,然後就GG了  工作環境:     Mikrotik CCR          firewall DROP all input after some open services  錯誤訊息: can't resolve DNS ,想必是沒開 DNS 進來,看了一下 log 知道從哪個介面來,從哪個 src port 來     /ip firewall filter add action=accept chain=input comment="allow DNS response" in-interface=\     pppoe-out1 log=yes log-prefix="allow DNS response" protocol=udp src-port=\     53  錯誤訊息變了: connection timed out,google之後找到論壇有人討論     /ip firewall filter add action=accept chain=input comment="allow Update allow established connections" in-interface=\add action=accept chain=input comment="Allow Update allow established connections" connection-state=\     established add action=accept chain=input comment="Allow Update2 allow related connections" connection-state=\     related  可以更新了 收工!

ubuntu Server 系統升級速記

 久久用一次的功能,打完就收工! 更新套件 sudo apt update sudo apt list --upgradable sudo apt upgrade 重開機 sudo reboot 移除舊檔案 sudo apt --purge autoremove 安裝更新管理工兩 sudo apt install update-manager-core 升級 sudo do-release-upgrade 完成升級後再次更新系統內的套件 更新伺服器的套件檔案清單。 sudo apt update 更新套件。 sudo apt -y dist-upgrade 清除更新時下載回來的檔案。 Sudo apt clean 清除更新後用不到的舊檔案 sudo apt autoremove --purge

建立 virtualbox 和 windows 之間同步資料夾

  之前使用 vagrant 的時侯,它有個很炫的功能,就是設定好密鑰之後,可以在 windows 上指定一個資料夾和 virtualbox 裏的資料夾同步,雖然要透過 ssh 多一層的設定,但是真的很方便,那時用 vagrant 還得折騰一番才能設好,原本就要在 virtualbox 和 windows 兩邊折騰了,想少一點折騰的功夫,去掉 vagrant 和 ssh 這些個中間層  工作環境:     Windows 10     virtualbox 6          ubuntu 22 server LTS  virtualbox 有提供一個共用資料夾的功能,把它設定好,就可以實現願望了  Windows 端:      virtualbox > ubuntu22 > 設定 > 共用資料夾 >         資料夾路徑:指定你在 Windows 裏要分享來同步的資料夾(例如:D:\share)         資料夾名稱:隨便給一個(例如:share),等一下給 ubuntu /etc/fstab 第1個變數用         唯讀:不勾(雙向同步不勾)         自動掛載:勾         掛載點:要放在 ubuntu 的掛載名字(例如:share)         設為永久:勾     > 確定  ubuntu 端:不需要先裝 VBoxGuestAdditions     sudo mkdir /media/share     sudo vim /etc/fstab 加入以下這一行     ...