owned this note changed 6 years ago
Linked with GitHub

如何在 FreeBSD 家目錄下安裝軟體 - 藍挺瑋

由於場地問題,第二天我們移動到另一棟大樓啦!議程教室變動請見網站上的議程表

歡迎來到 https://hackmd.io/@coscup/2019 共筆

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

點擊本頁上方的 開始用 Markdown 一起寫筆記!
手機版請點選上方 按鈕展開議程列表。

投影片

請自行選擇可用的連結:1 2 3

Why?

  • ports 版本不是你要的
  • 你是 ports 開發者
  • GNU AutoTool
    • ./configure make make install 常無條件覆蓋到 ports 安裝到的位置
    • 利用 --prefix, DESTDIR=
      • 還要手動設定一些東西
  • Others: Cmake, Meson

手動裝與 Ports 差異

  • Ports 幫你做的事情:

    • e.g. librsvg2
    • 修正: file/(patch), sed
    • 紀錄相依性
    • USES
    • pkg-plist, @postexec
  • 以 JHBuild 為例手動建製套件

    • 確認編譯、連結要用的變數
      • e.g. CC, CFLAGS
    • 環境變數
      • e.g. PATH, LD_LIBRARY_PATH
    • Autotools : 將相關變數塞進 Makefile
    • Cmake 不支援 CPPFLAGS
    • 標頭檔路徑來源: pkg-config
      • 順序跑掉? 不同 include file 放在 include/ 底下的子資料夾
    • 函式庫路徑:
      • LDFLAGS
      • pkg-config --ldflags
      • -L 路徑與順序問題
        • 都放在一起就好了? (ps. OpenBSD 只會有 *.so.<版號> 的形式)
    • ld --verbose 可以找出它搜尋的函式庫路徑
    • *.la 常被 libtool 誤認內部函式庫 (e.g. 被加 --rpath=/usr/local/lib)
      • 無條件刪除? 少數狀況下仍需要保留 (使用 libltdl 的還是需要用到)
    • 執行檔搜尋路徑: PATH, LD_LIBRARY_PATH
      • LD_LIBRARY_PATH 搜尋路徑
      • `DT_RPATH`(should be deprecated)
      • DT_RUNPATH (FreeBSD 預設使用)
        • 由 ld --enable-new-dtags 遇到 -rpath 產生
      • readelf, patchelf
    • 執行未安裝的檔案:
      • libtool: wrapper script
      • CMake, Meson: 無 wrapper script
        • 他們假設 --rpath 就可以解決了
    • XDG
    • D-Bus
      • XDG_DATA_DIRS: 要讓 dbus 看到
    • man 與 info 的路徑
    • 其他: JHBUILD 會幫你設定 (e.g. Python Path)

總結

  • 用現有 build system
  • 編譯執行是件不容易的事情
  • 別隨便 sudo make install
  • DESTDIR 與後續指令要記得
  • 建置、執行的環境變數
tags: COSCUP2019 BSDTW x Cat System Workshop IB306
Select a repo