2013-08-01 41 views
3

我正在嘗試使用我正在處理的python項目創建.deb包。 儘管程序需要.sqlite文件,但需要初始化(創建它並設置表,關聯等)。 儘管在deb包創建方面有很多文檔,例如 爲Python項目設置Deb包 - 數據庫(sqlite3)設置

- From Debian Wiki

- A python-specific tutorial

我沒能找到有關下列問題很好的建議:

  1. 是它更好地納入一個初始化.sqlite文件列表要複製(安裝)的文件還是在安裝過程中包含.sqlite文件創建/設置?

  2. 如果第二個選項是可取的,那麼表創建腳本應該在哪裏?我想明顯的假設是在規則文件(或不是?)中這樣做。如果這個過程進入規則文件,我們應該通過使用shell腳本來執行此操作(規則是一個makefile)

  3. 上面的第二個鏈接提示使用postinst腳本(上述問題可以解決),但是我在其他地方還沒有看到過這種做法?這是常見的做法嗎?

  4. 讓目標機器檢查依賴性的最佳方法是什麼? (sqlite3的,python3.2 - 確實集結取決於控制文件檢查字段是否在目標計算機上存在的依賴關係,以便中止軟件包安裝如果例如sqlite3的或python3.2丟失

?非常感謝

回答

0

我覺得你應該去預先生成的SQLite文件,這是最簡單的解決方案,我看不出有什麼不足之處。

至於宣佈安裝時(也就是,遊程時間)相關性,您需要將它們放在debian/control的二進制包部分中,其中一個以Packageexample)。這樣,如果這種依賴關係不滿意,Debian打包工具將拒絕安裝該軟件包(除非您問得很好,例如使用dpkg --force-depends --install <package name>)。

0

大量的試驗和在此錯誤後是什麼似乎工作最好暫且:

  1. 期間(後)安裝時間

  2. 我做的sqlite的DB文件被生成該文件的postinst內,使用的bash腳本,並使用表的建立和主/外鍵賦值語句常數如下

    #!/bin/bash 
    set -e 
    
    CREATE_TBL_PROBLEMS="CREATE TABLE tblProblems(
    ID INTEGER PRIMARY KEY AUTOINCREMENT, 
    Name TEXT NOT NULL UNIQUE 
    )" 
    
    CREATE_TBL_MAIN="CREATE TABLE tblMain (
    ID INTEGER PRIMARY KEY AUTOINCREMENT, 
    DBVersion TEXT NOT NULL, 
    DBrDate TEXT NOT NULL)" 
    
    CREATE_TBL_EVENTS="CREATE TABLE tblEvents (
    ID INTEGER PRIMARY KEY AUTOINCREMENT, 
    User TEXT NOT NULL, 
    NoOfInfections INTEGER NOT NULL, 
    NoOfHealings INTEGER NOT NULL, 
    DateTime TEXT NOT NULL, 
    VirusDBID INTEGER NOT NULL, 
    FOREIGN KEY(tblMainID) REFERENCES tblMain(ID) 
    )" 
    
    CREATE_TBL_ISSUES="CREATE TABLE tblIssues (
    ID INTEGER PRIMARY KEY AUTOINCREMENT, 
    FilePath TEXT NOT NULL, 
    Inode INTEGER NOT NULL UNIQUE, 
    ScanEventID INTEGER NOT NULL, 
    MalwareID INTEGER NOT NULL, 
    FOREIGN KEY(EventID) REFERENCES tblEvents(ID), 
    FOREIGN KEY(ProblemID) REFERENCES tblProblems(ID) 
    )" 
    

主要挑戰如下:應用程序應該放在由root擁有的/ usr/share/myapplication中,而常用的做法是,並且db文件(sqlite)應該是用戶擁有的文件。所以後者被放置在/ home/user1 /中。所有MyApplication如下:

USER_HOME=$(eval echo ~${SUDO_USER}) 
echo "USER HOME IS " ${USER_HOME} 

case "$1" in 

    configure) 
    mkdir -p "${USER_HOME}"/.myapplication 
    echo "Creating tables needed for myapplication" 
    sqlite3 "${USER_HOME}"/.myapplication/mydbfile.sqlite "${CREATE_TBL_MAIN}; ${CREATE_TBL_EVENTS}; ${CREATE_TABLE_ISSUES}; ${CREATE_TBL_PROBLEMS}" 
    echo "Assigning myapplication.sqlite file to user " "${SUDO_USER}" 
    chown -R "${SUDO_USER}":"${SUDO_USER}" "${USER_HOME}"/.myapplication/ 
    ;; 

    abort-upgrade|abort-remove|abort-deconfigure) 
     exit 0 
    ;; 

    *) 
     echo "postinst called with unknown argument \`$1'" >&2 
     exit 1 
    ;; 

esac 

所有MyApplication的安裝是照顧內規則文件的通過連續調用安裝-m

關於依賴性,Tshepang是對的,就應該在控制文件中聲明。 但是,我還沒有弄清楚,在某些情況下(機器),如果它們丟失,它們會自動安裝,而在其他情況下,只要依賴包丟失,安裝就會中止。