星期日, 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

星期五, 12月 18, 2020

ansible-builder

 

看到這篇:紅帽推出IT自動化工具Ansible Builder以加速執行環境創建 | iThome ,所以就來試試看。

就我試用過以後,我的理解是,這工具可以幫忙創建出一個具有 Ansible 環境的 docker image。

環境是定義在 execution-environment.yml 裡,讓我們直接看範例

---
version: 1

# 即基礎 image,目前來說,都是用 quay.io/ansible/ansible-runner:stable-2.9-devel
base_image: 'quay.io/ansible/ansible-runner:stable-2.9-devel'

# 需要自訂 ansible.cfg 的話,這邊就是填 ansible.cfg 的路徑檔名
ansible_config: 'ansible.cfg'

# 相依
# galaxy 是填 requirements.yml,檔案裡描述 playbook 會用到的 role/collection,沒用到可以不填
# python 則是填 requirements.txt,檔案裡描述會使用到的 Python modules,沒用到可以不填
dependencies:
  galaxy: requirements.yml
  python:

# 額外要加入的 docker image 建置步驟
# prepend 會在預定的建置步驟之前
# append 則是在預定的建置步驟之後
additional_build_steps:
  prepend: |
    RUN whoami
    RUN cat /etc/os-release
  append:
    - RUN echo This is a post-install command!
    - RUN ls -la /etc

有了 execution-environment.yml 之後,就可以用 ansible-builder 來建置。

首先,得先安裝:

# python3
pip3 install ansible-builder

接著就可以建置了

ansible-builder build --tag=example

建置完成,會有 docker image,在目錄下則會出現 context 資料夾,這個資料夾裏面就是 ansible-builder 建置過程中所產出的 Dockerfile 以及建置 Docker image 所需的檔案。

打開 Dockerfile ,就會看到 ansible-builder 幫我們產出了什麼。

FROM quay.io/ansible/ansible-runner:stable-2.9-devel as galaxy

ADD ansible.cfg ~/.ansible.cfg

ADD requirements.yml /build/

RUN ansible-galaxy role install -r /build/requirements.yml --roles-path /usr/share/ansible/roles
RUN ansible-galaxy collection install -r /build/requirements.yml --collections-path /usr/share/ansible/collections

RUN mkdir -p /usr/share/ansible/roles /usr/share/ansible/collections

FROM quay.io/ansible/python-builder:latest as builder

ADD requirements_combined.txt /tmp/src/requirements.txt
RUN assemble

FROM quay.io/ansible/ansible-runner:stable-2.9-devel

RUN whoami
RUN cat /etc/os-release

COPY --from=galaxy /usr/share/ansible/roles /usr/share/ansible/roles
COPY --from=galaxy /usr/share/ansible/collections /usr/share/ansible/collections

COPY --from=builder /output/ /output/
RUN /output/install-from-bindep && rm -rf /output/wheels
RUN echo This is a post-install command!
RUN ls -la /etc

大抵來說,

  1. 使用了 multi stage build 以減少 docker image 的大小
  2. 使用 ansible-galaxy 安裝相依的 role/collection
  3. 會看到 additional_build_steps 裡描述的步驟

好,那建置出 docker image 以後,怎麼使用呢?

假設 playbook 是放在 project 目錄下,那麼就這樣執行

docker run --rm -v /runner/project:$(pwd)/project -it example:latest ansible-playbook -i localhost, -c local /runner/project/test.yml

這邊稍微取了點巧,只簡單用 local connection (-i localhost, -c local) 在本機執行,你也可以在這邊使用自己的 inventory。

建置出 Ansible 執行環境的 docker image 以後,除了可以固定住執行 Ansible playbook 的環境,也有利於打造出標準化的 CD 環境,進而減少開發與佈署的時間。

星期三, 12月 16, 2020

電影流水帳(2020/10/01~2020/12/15)

Hashimoto Kanna at Opening Ceremony of the Tokyo International Film Festival 2017

 

  • Elona Holmes (IMDB, Wikipedia),台譯:天才少女福爾摩斯。
  • 劇場版「鬼滅の刃」無限列車編 (IMDB, Wikipedia),台譯:鬼滅之刃劇場版 無限列車篇。
  • 新解釈・三國志 (IMDB, Wikipedia),台譯:新解釋・三國志。

Elona Holmes

改編自 Nancy Springer 所寫的 Enola Holmes Mysteries 系列少年偵探小說,故事挺有意思的,讓人想找小說來看看。

故事一開始就是 Elona Holmes 的自述,說明為什麼自己現在一個人騎著腳踏車往車站前進。Elona 從小就跟媽媽一起住在郊區,很少看到兩個哥哥。時間過的很快,Elona 一下子就變成婷婷玉立的少女了。在她生日的這天,媽媽卻不見了。她找了好久都沒找到,只好聯絡兩個哥哥,她騎著腳踏車去車站就是為了接哥哥。哥哥們見到她,特別是大哥,只覺得是個累贅,說會把她送去淑女學校,讓她好好當個淑女,Sherlock 倒是沒作聲。Elona 心裡當然是不肯,在解開媽媽留下的謎題之後,她喬裝離家了。

喬裝離家後,她遇到一個也是逃家的男生 Tewkesbury,兩人算是做了朋友,彼此幫忙一同到了倫敦。Elona 開始調查媽媽去了哪裡,一方面也稍稍摸清了 Tewkesbury 的底細。由於 Tewkesbury 的身世是個貴族,再加上最近報上的新聞,她覺得這些事情並不單純,開始進行調查。Elona 的兩個哥哥在 Elona 逃家後,當然擔心啊,大哥找了警探幫忙,二哥 Sherlock 則是透過媽媽留下的線索,沿路追查妹妹下落。Elona 找媽媽的過程跟 Tewkesbury 遭到追殺的事情交錯在一起,整個故事因此高潮迭起。最後,Elona 解開了 Tewkesbury 被追殺的謎團,媽媽的離開恰好與 Tewkesbury 被追殺的緣由相關,是為了一個與女性自主權相關的法案。Elona 找到媽媽,與媽媽重逢,也跟兩個哥哥達成共識,不再需要聽大哥的話去淑女學校唸書,改由 Sherlock 當監護人。故事到這裡就結束了,照常理來推測故事走向,未來會是 Elona 跟 Sherlock 跟 Watson 一同辦案了吧。

劇場版「鬼滅の刃」無限列車編

故事延續動畫第一季的最後,炭治郎一行人在休養結束後,聽從產屋敷耀哉的命令,前往車站搭乘無限列車與炎柱・煉獄杏壽郎會合。故事線蠻單純的,動畫第一季最後留下的伏筆,下弦的魘夢出現了,他利用人們心裡的遺憾與對親人的懷念來操縱他們襲擊列車,炭治郎一行人因此陷入夢裡。但是炭治郎在夢裡發現了異狀,並找到方法解開夢境,回到現實喚醒其他人。接著,一行人開始跟魘夢展開戰鬥。花了一番功夫後,終於將魘夢打倒。只是遇上趕來的上弦猗窩座之後,炎柱杏壽郎壯烈犧牲。

新解釈・三國志

與其說是在講述歷史,不如說是以三國當背景的漫才,有搞笑,有吐嘈。選角都很不錯,在裏面看到不少認識的角色,例如,董卓是勇者義彥裡的佛祖,黃巾是勇者義彥裡的勇者,孔明是勇者義彥裡的魔法師,黃夫人是齊木楠雄的災難裡的照橋心美,曹操是信長協奏曲裡的信長。

故事從桃園三結義講到討伐黃巾,再到美人計,再到長阪坡,再到赤壁之戰,把一些重點的事情都交代了。

星期二, 12月 08, 2020

直接用 SSH 登入 vagrant 虛擬機失敗

試著直接使用 SSH 登入 vagrant 開出來的 Ubuntu 虛擬機,會出現錯誤訊息:

SSH Login Failed : Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

可是用 vagrant ssh 卻可以登入,用 vagrant ssh 登入進去查,SSH daemon 有啟動,所以 SSH 服務是沒問題的。後來透過錯誤訊息才查到,是 SSH Daemon 裡的 PasswordAuthentication 被設定為 no 了。所以修改 /etc/ssh/sshd_config ,將 PasswordAuthentication 設定為 yes 後,就可以用 ssh 登入了。

vagrant ssh 之所以可以登入,是因為在初始化虛擬機時,預先產生好 SSH Key,並且把 SSH public key 放到虛擬機裡了。另外一種解決方法,就是使用產生好的 SSH private key 來登入。

ssh -i .vagrant/machines/<your_machine_name>/virtualbox/private_key ubuntu@<your_machine_ip>

參考資料: