Makeself 是一個 Shell 腳本工具,可將目錄打包成自解壓的 .run 或 .sh 檔案,執行時自動解壓至暫存目錄、執行內嵌安裝腳本、清理暫存檔,類似 Windows 的自解壓 exe。支援 gzip/bzip2/compress 壓縮、CRC/MD5 校驗、跨平台。本文記錄安裝、基本語法、參數選項、建立範例與執行時參數的完整教學。
wget https://megastep.org/makeself/makeself-2.2.0.run
chmod 755 makeself-2.2.0.run
./makeself-2.2.0.run
# 自解壓建立 makeself-2.2.0 目錄
cd makeself-2.2.0
sudo cp *.sh /usr/bin
# 現在可直接使用 makeself.sh 指令
makeself.sh [args] archive_dir file_name label startup_script [script_args]
# 參數說明:
# archive_dir : 要打包的目錄
# file_name : 輸出的自解壓檔案名(建議 .run 或 .sh 結尾)
# label : 解壓時顯示的描述文字
# startup_script: 解壓後執行的腳本(需位於 archive_dir 內,用 ./ 開頭)
# script_args : 傳給 startup_script 的參數
| 參數 | 說明 |
|---|---|
| --gzip | 使用 gzip 壓縮(預設) |
| --bzip2 | 使用 bzip2 壓縮 |
| --compress | 使用 Unix compress |
| --nocomp | 不壓縮 |
| --notemp | 不解壓至暫存目錄,直接在當前目錄建立子目錄 |
| --current | 解壓至當前目錄(隱含 --notemp) |
| --follow | 跟隨符號連結並打包連結目標檔案 |
| --header | 使用自訂 header stub (makeself-header.sh) |
| --version | 顯示版本資訊並退出 |
# 假設軟體檔案在 /home/joe/mysoft,安裝腳本為 ./setup
makeself.sh /home/joe/mysoft mysoft.sh "Joe's Nice Software Package" ./setup
# 建立 Makeself 自身的自解壓包
makeself.sh --notemp makeself makeself.run "Makeself by Stephane Peter" echo "Makeself has extracted itself"
| 參數 | 說明 |
|---|---|
| --keep | 保留解壓目錄(不自動刪除暫存目錄) |
| --verbose | 執行嵌入腳本前提示使用者 |
| --target DIR | 指定解壓目標目錄 |
| --confirm | 執行嵌入腳本前要求確認 |
| --info | 顯示封裝資訊(不解壓) |
| --lsm | 顯示 LSM 條目 |
| --check | 校驗完整性(不解壓) |
| --nochown | 不執行 chown -R(保留原始擁有者) |
| --tar args | 對內容執行 tar 指令(後接 tar 參數) |
| --noexec | 解壓後不執行嵌入腳本 |

startup_script 必須放在打包目錄內,腳本中路徑用相對路徑 ./ 開頭。--bzip2 壓縮比較好。.run 檔案簽名,使用者驗證後再執行。免 sudo 以 root 權限執行自編譯程式:設定 SUID 位元
LNMP 環境下 PHP mail() 無法發信?Sendmail 與 Postfix 兩大解決方案實戰
終端一鍵查詢公網 IP:curl 多種 API 支援純文字、JSON、XML 格式
Linux 函數庫構建完全指南:靜態庫與動態庫創建、鏈接、版本管理、部署最佳實踐
Linux 無法啟動 Lantern 缺少 libappindicator3.so.1 解決方法
Linux 打造 Ubuntu 風格 Tab 自動補全:安裝 bash-completion
Linux Jetty 9 整合 JNDI 資料源開發實戰:H2 資料庫、Maven、Eclipse 完整範例
ping 網路診斷基石:ICMP 回送請求、Linux/Windows 差異、參數全表、統計解讀、防火牆封鎖、回送封包結構、實戰排查