星期日, 3月 07, 2021

如何在 multipass VM內執行 GUI 應用程式

multipass 是 Canonical 所推出的一個輕量級 VM 管理工具,它跨平台,支援 Linux、Windows 跟 MacOS。

這個工具用一陣子了,相當的好用,缺點是目前只有 Ubuntu 的 VM 可用。之前是想到,既然 multipass shell 是用 ssh 登入,那麼應該要可以 Forward X11 才對。也就是說以 SSH 登入以後,執行 GUI 應用程式,畫面會轉向到目前 Host 的 X Server 。

但試了以後卻不行,請教 Google 以後,Google 告訴我 StackOverflow 上已經有人解答了:18.04 – How to open GUI applications in multipass container(guest = ubuntu, host = ubuntu)? X-Forwarding – Ask Ubuntu

先說明一下我的環境:

  • Ubuntu 20.04
  • 用 snap 安裝 multipass

首先,先取得 ssh key,因為 multipass 是用 snap 安裝的,所以得從 /var/snap/multipass 裏面找到 ssh private key,把它複製到 ~/.ssh/multipassKey 目錄下。

    mkdir ~/.ssh/multipassKey
    sudo cp /var/snap/multipass/common/data/multipassd/ssh-keys/id_rsa ~/.ssh/multipassKey/id_rsa

接著變更這個 private key 的權限為 0600,並且變更擁有者

sudo chown user -R ~/.ssh/multipassKey
sudo chmod 0600 ~/.ssh/multipassKey/id_rsa

再來啟動 VM,並且察看 VM 的 IP

multipass start name
multipass ls

最後使用 ssh 登入

ssh -X -i ~/.ssh/multipassKey/id_rsa ubuntu@<my_vm_ip>

就這樣。

星期三, 2月 17, 2021

電影流水帳(2021/01/01~2021/01/31)

Welcome to Me 28

 

극한직업

這部電影蠻妙的,是因為看了網路上的介紹文,才想去 Netflix 看看。

高尚起、金英皓、馬奉八、張妍秀和金宰勳這五人是緝毒組的,一直沒破案,還出了一堆包,長官對他們十分感冒。高班長的同袍給了高班長一個線索,說了毒梟的位置,要他們去偵察。五人得了這個線索,就前去盯梢。毒梟位置的對面是家炸雞店,自然是最佳地點,有得吃,也有得喝。可惜,事情沒有這麼順利,炸雞店老闆要收店了。五人心想好不容易能查到大案子,怎麼能放過這機會,不如把店頂下來吧?於是高班長拿了退休金把店頂了下來。

這店頂了下來,就有人來問有沒有賣炸雞。為了避免附近的人起疑心,五人開始賣起了炸雞,好在馬奉八的炸雞技術跟醬料不錯,沒讓人懷疑,還意外做出好成績。這下可好,炸雞店業績蒸蒸日上,忙到沒時間盯梢,還有電視台來想採訪。五人眼看不對,提高售價,可是又意外創了土豪炸雞,更吸引了人潮。之前電視台想來採訪被拒絕,電視台記者懷恨在心,爆出負面消息,讓炸雞店招牌大受影響。五人也在此時被長官召回,長官準備宣佈要解散緝毒組。就在此時,毒梟來電要訂購炸雞,五人不理長官,飛快的趕回去準備。五人送炸雞過去,才知道,毒梟已經搬走了,是房東打電話來訂購炸雞。五人沒辦法逮毒梟,同時被警局停職,再次陷入困境。

高班長回到家面對老婆,木著一張臉面對老婆,老婆數落了他一頓,然後從他衣服夾層裡拿出護身符,說「這樣也好啦,我也不用每天提心吊膽的,怕你哪天死在外面。為了怕你出意外,我還特別在你每件衣服的夾層裡放護身符,保佑你平平安安。我們就拿退休金開間小店,好好過安穩生活。」高班長邊聽,臉上的表情五味雜陳,聽到這邊,他哭了,抱住老婆哭,一方面是感受到老婆對他的關心,一方面是不知道怎麼跟老婆講退休金已經拿去頂炸雞店店面的事情。

五人被停職後,不知道該何去何從,又回到了炸雞店,討論起日後該怎麼辦。就在此時,毒梟的律師來找他們,想要投資他們,借他們的招牌來開加盟事業跟賣醬料。五人想了想,就決定利用這個機會挽救炸雞事業,東山再起。於是在律師幫忙下開始展店,也把醬料配方給律師去開醬料工廠。眼看事情開始步上正軌時,他們發現顧客跟加盟店買了炸雞,卻都不吃。作為盡職的餐廳經營者,這必須要做調查。經過一番調查,他們發現這律師根本是借炸雞店的殼在賣毒品。馬警官在進行調查時,被毒梟的人逮住了。

毒梟李武裴很有生意頭腦,打算進軍世界,所以跟敵手談判,說國內的販毒生意已經有了很好的掩護,要把國內的生意以不錯的價格讓給他。兩人談妥,要在碼頭交易。此時,四人也透過安裝在馬警官手機上的 app 追蹤而來。於是就在碼頭跟毒販的人打了一場,五人對四、五十個人。最終,五人打贏,總算是立下大功。

Green book

這故事真的是蠻好看的,轉台的時候看到,不知不覺就被吸進去看完。

唐想找人載他去美國南方巡迴演奏,東尼前往應徵,後來順利拿到這份工作,於是東尼就載著唐去美國南方了。在南北戰爭的那個時間點,美國南方並不歡迎黑人 (唐是黑人),也因此東尼非常的驚訝唐所受到的待遇,即便唐是受邀去演奏的,但白人對他的待遇很讓東尼無法認同。在一開始的時候,兩人並不對盤,但慢慢的經過這些遭遇,兩人也慢慢能相互體諒了。直到最後一場演奏,唐雖然受邀去演奏,卻被禁止在裏面用餐,被要求要去遠在幾個街口外的黑人餐廳用餐,東尼忿忿不平,極力跟餐廳經理爭取,但餐廳經理始終不願意。於是東尼跟唐協調之後,決定不演奏了。兩人一同到幾個街口外的餐廳去用餐,唐在此演奏了音樂給跟自己相同膚色的人們聽,大家聽的如痴如醉。用完餐,東尼開著夜車載唐趕回北方去過聖誕節,在途中,東尼體力不支,改由唐開車。他們在聖誕節前趕回去了,東尼邀請唐來家裡一起過節,唐婉拒了,但後來唐還是前往東尼家裡。兩人最終成為好朋友,持續保持著聯繫,直到 2013 年。

星期二, 2月 16, 2021

CPack

 在 twitter 上看到有人推薦 RPiPlay 這個專案,這個開放原始碼軟體主要的用途是當作 AirPlay 伺服器。當這個軟體啟動時,MacOS 裝置跟 iOS 裝置會搜尋到啟動這個軟體的裝置,當選擇鏡射時,就可以將 MacOS 裝置或 iOS 裝置上的畫面投放過去。作者主要是用在 Raspberry Pi 上,但其實在一般的 Linux distribution 上也可以使用。

目前作者沒有打包任何的套件,因此要用,只能自行編譯、安裝。編譯方法蠻簡單的,因為我是用 ubuntu ,所以這邊只介紹 Ubuntu 上怎麼編譯。首先安裝編譯器跟 RPiPlay 會用到的函式庫標頭檔

sudo apt-get install cmake \
    libavahi-compat-libdnssd-dev \
    libplist-dev \
    libssl-dev

接著下載原始碼跟進行編譯

git clone https://github.com/FD-/RPiPlay.git
cd RPiPlay
mkdir build
cd build
cmake ..
make

等編譯完成後,再安裝

sudo make install

等等,講到這邊還沒提到 CPack 啊。

因為我喜歡儘量使用 package 來管理,所以就想到,這可以打包為 debian package 嗎?就找了資料,發現 CMake 專案可以搭配 CPack 來進行打包。

CPack 使用上也很簡單,先安裝 CPack

sudo apt-get install cpack

然後修改專案裡的 CMakeLists.txt ,加入以下幾行

SET(CPACK_GENERATOR "DEB")
SET(CPACK_PACKAGE_VERSION_MAJOR "1")
SET(CPACK_PACKAGE_VERSION_MINOR "2")
SET(CPACK_PACKAGE_VERSION_PATCH "0")
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Yan-ren Tsai")
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libavahi-compat-libdnssd1,libplist3,libssl1.1,libgstreamer1.0-0,libgstreamer-plugins-base1.0-0,gstreamer1.0-libav,gstreamer1.0-vaapi,gstreamer1.0-plugins-bad")
INCLUDE(CPack)

接著重新做一次前面 cmake 的步驟,最後再執行 cpack 即可

# 假設已經在 RPiPlay 目錄下
mkdir build
cd build
cmake ..
make
cpack

執行完,就會在目錄下看到 rpiplay-1.2.0-Linux.deb

使用 sudo dpkg -i rpiplay-1.2.0-Linux.deb 就可以安裝了。

參考資料

星期日, 12月 27, 2020

電影流水帳(2020/12/16~2020/12/31)

142624_9666

飲食男女

李安拍的電影裡,我最喜歡的就是飲食男女,因為它有趣味、有驚喜,也有溫馨。

故事是朱家一家人的故事,朱爸爸是個廚師,退休前在圓山飯店擔任主廚,因為味覺退化而退休。退下來以後,只在周末做大菜給三個女兒吃。朱爸爸有個好朋友,老溫,仍然在圓山飯店裡任職,三不五時會找朱爸爸回去救援。

家珍是個老師,信仰是天主教,因為以前學生時代的情傷,一直還沒結婚,在認識體育老師以後,整個大解放。家倩在商場得意,但買的預售屋的建設公司倒閉了,沒了房子,後來遇到姊姊的男友,發現姊姊騙了大家,她並沒有情傷。之後家倩跟父親和解,接了爸爸的擔子。家寧是大學生,在速食店打工,後來認識了朋友的男友 – 國倫,因為以為朋友跟國倫分了,就放心的跟國倫發展出戀情,豈料家倩的朋友只是嘴裏說說,實際卻還愛著國倫。

家倩是第一個說要離家的,因為她買房子了,只是事與願違。反而家寧才是第一個離家的,她未婚懷孕了,國倫負起責任,兩人共組家庭。家珍是第二個,在學校認識了體育老師 –  明道,因為學生的惡作劇,家珍反倒跟明道湊成一對。家倩並沒有離開,她房子的建商倒閉了。錦榮是朱家的鄰居,她有離婚官司纏身,再加上要維持生計,所以很忙碌,比較少時間照顧在念小學的女兒。退休的朱爸爸正好幫上了忙,幫忙照顧錦榮的女兒,也常跟錦榮的媽媽聊天,錦榮的媽媽因此對朱爸爸很有好感。

故事的最後,大家一起到朱家吃飯,幾杯黃湯下肚以後,換朱爸爸宣佈事情了。錦榮的媽媽以為朱爸爸會宣佈跟自己在一起的事情,豈料並不是,而是說要要賣房子跟錦榮結婚,錦榮的媽媽聽到以後,氣的要命,家寧、家珍跟家倩也都嚇了一大跳。雖然很驚訝,但三個女兒之後也接受了這樣的決定。家寧、家珍跟朱爸爸都有了好的歸宿,家倩在房子要賣掉的最後一天煮了一餐,找了大家回來吃,可是只有爸爸能回來。兩人一同吃飯,吃著吃著,朱爸爸說,「這湯的味道不大對。」,家倩聽到原本有些不開心的,但突然像是發現了新大陸一樣,拉著爸爸的手說,「你的味覺回來了。」朱爸爸也赫然發現自己的味覺恢復了,故事就這樣落幕。

熱帶魚

劉志強是個國中三年級的學生,正準備要聯考,父親對他的成績很不滿意,認為他沒好好唸書。雖說是即將要聯考的日子,但社會的事件並不因此而有所減損,這陣子王道南被綁架的案子鬧的沸沸揚揚。這天劉志強放學回家的路上,意外在某台貨車上看到道南,他覺得自己應該可以救出道南,就上了車。想不到,卻因此被抓住,當成第二個人質。

綁匪有兩個人,一個是已經退休的警察,一個是阿慶,兩人打電話給兩個人質的父母要錢,想不到沒拿到錢,主嫌,也就是已經退休的警察卻發生意外死了,六神無主的阿慶只好帶著兩個人質逃回南部,找阿姨商量。跟阿姨商量後的結果,決定繼續進行綁票,於是打電話向劉志強的父母勒索。

劉志強跟道南在最初是有想要逃走的,但是後來卻打消了念頭,道南家裡沒人、沒溫暖,而劉志強是不想考聯考,兩人反倒是跟阿慶一家人打成一片。阿慶一家人其實本性不壞,只是利字當前,慢慢的走歪了。阿慶一家人在電視上看到劉志強父母說劉志強要考聯考,就趕緊找了書給劉志強準備聯考。警察追查了好一陣子,透過各種線索,判斷兩人應該在中南部,開始往中南部找。阿慶一家人緊張了,就加緊勒贖的腳步,並且讓阿慶跟阿雄帶著兩個孩子出海躲風頭。勒贖並不順利,持續了好幾次,要不就是錯過,要不就是等錯地點。轉眼,已經是聯考前一天了,阿慶心裡想,就讓孩子回去聯考吧,錢不要了。於是要把船開回去,開車送兩個孩子回台北。

事情就是這麼的巧合,船就在這個節骨眼拋錨了,阿慶跟阿雄連忙把孩子放在游泳圈上,游泳把孩子推回去。兩人費了九牛二虎之力,終於把孩子們推到岸邊。兩個來港邊摸魚的刑警,在發贏來的香腸時,看到行跡可疑的阿慶一家人,再看到剛上岸的阿慶、阿雄跟兩個孩子,連忙拿出手槍,要阿慶跟阿雄舉起手來。劉志強連忙說,是阿慶他們救了我們,刑警才放下槍,趕緊送劉志強回台北聯考。阿慶一家人從綁架犯變成救了劉志強的英雄,故事就這樣結束了。

City Of Ember

我是轉台時看到的,從大約 1/3 的地方開始看起。吸引我的是女主角 Saoirse Ronan 。

在經過一次事件以後,所有人都住到了地底城市,但是這個城市因為年久失修,慢慢的毀損,照理說,毀損了會有人去維修的,但知道怎麼維修的工程師早在事件之後死去了。這個城市正在逐漸的死去,人們慢慢因為缺乏食物以及民生設施毀壞開始發生通貨膨脹以及爭奪的情況,當任的市長腐敗而且怯懦,並不管市民的死活。

Lina 跟 Doon 發現了城市正在死去,並意外找到前人留下的蛛絲馬跡,得知有機會可以拯救這個城市。於是他們開始依照隱晦的文字去尋找前人工程師留下的自救機關。在這過程裡,Lina 跟 Doon 發現了市長的腐敗,被市長派人追殺,但也因此取得一個關鍵的零件。兩人在躲避追殺的過程,取得關鍵的線索,終於找到走出微光城市的路。

走上地面後,天空一片漆黑,Lina 跟 Doon 以為他們失敗了,正沮喪著的時候,天邊透出一絲光亮,慢慢透出了顏色,橘紅的晨曦染紅了天空,火紅的太陽隨即躍出。Lina 跟 Doon 這時知道他們成功了,於是在紙上寫下了走出城市的方法,綁在石頭上,往洞裡投下,告知微光城市的市民們。

這結局看起來是有續集的,只是過了 12 年還沒消息,那大概就不會有了。

星期二, 12月 22, 2020

vagrant virtualbox provider 加載磁碟

 

前兩天想練習 LVM,所以試著在既有的 RHEL VM 裡加磁碟,但是事情沒有想的那麼簡單。原本以為就是照 Vagrant Disk Usage 文件的說明,在 Vagrantfile 裡加入

config.vm.disk :disk, size: "100GB"

就可以,但這樣不行,vagrant reload 以後,並沒有磁碟出現。

上網找解決方法,找到這篇:Add a second disk to system using vagrant

才知道是要用 provider 的 customize() 去建立磁碟並加載才行 (參考資料:Add a second disk to system using vagrant):

    tower.vm.provider "virtualbox" do |v|
      file_to_disk1 = "mydisk1.vmdk"
      unless File.exist?(file_to_disk1)
        v.customize [
           "createmedium", "disk", "--filename", file_to_disk1, "--format", "vmdk", "--size", 1024 * 1
         ]
      end
      file_to_disk2 = "mydisk2.vmdk"
      unless File.exist?(file_to_disk2)
        v.customize [
           "createmedium", "disk", "--filename", file_to_disk2, "--format", "vmdk", "--size", 1024 * 1
         ]
      end
      v.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_to_disk1]
      v.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', file_to_disk2]
    end

在建立前,先使用 File.exists? 去做檢查磁碟映像檔是否存在,不存在,就呼叫 createmedium 來建立。接著再用 storageattach 加載到 VM 上就可以了。

如果有錯誤訊息,說沒有 SATA Controller,請開啟 VirtualBox 去看該 VM 是不是有 SATA Controller。

參考資料:

  1. vagrant – Set storage size on creation of VM VirtualBox – Unix & Linux Stack Exchange
  2. Vagrant Tricks: Add extra disk to box – real world IT
  3. https://gist.github.com/leifg/4713995