当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 用stow管理自個兒編譯的軟件
帖子发表于 : 2009-02-04 20:40 
头像

注册: 2005-07-02 14:41
帖子: 4133
系统: Ubuntu 14.04 (Kylin)
送出感谢: 53
接收感谢: 11
為什麼要用stow?configure && make && make install不就可以了嗎?

但是當編譯軟件多了以後,管理就成問題了。/usr/local下那麼多文件,每個文件是由哪個軟件安裝的?搞不清。

要卸載一個軟件怎麼辦?make uninstall就可以啊。是可以。但是,第一,一些軟件的Makefile沒有定義uninstall,或者定義的uninstall卸載的不干淨。第二,要用make uninstall,你就得保留源碼。占了很多空間。

有沒有簡單的辦法?有,學習Mac OS X,一個軟件安裝在一個目錄。

安裝app-1.4
代码:
tar xzf app-1.4.tgz
./configure --prefix=/usr/local/app-1.4
make
sudo make install


安裝另一個軟件bpp-3.0
代码:
tar xzf bpp-3.0.tgz
./configure --prefix=/usr/local/bpp-3.0
make
sudo make install


要卸載app-1.4非常方便。直接刪除/usr/local/app-1.4就可以。

卸載是方便了。但是用起來就不方便了。因為每個軟件都裝在自己的目錄,而不是標准的/usr/local/,會出現找不到命令。那就把/usr/local/app-1.4/bin和/usr/local/bpp-3.0/bin都加到path裡就可以。軟件多了以後,就是超長path。卸載軟件,或者安裝了新軟件後,都要修改path。很麻煩。而且還不止。man到哪裡去找?lib到哪裡去找?系統都不知道。都要手工加上。然後每次安裝卸載軟件,都要手工修改,太麻煩了。

於是,就有了stow。

安裝了stow後(sudo aptitude install stow,或者使用新立得安裝stow軟件包),方便多了。

安裝app-1.4
代码:
tar xzf app-1.4.tgz
./configure --prefix=/usr/local/stow/app-1.4
make
sudo make install
cd /usr/local/stow/
sudo stow app-1.4


安裝bpp-3.0
代码:
tar  xzf bpp-3.0.tgz
./configure --prefix=/usr/local/stow/bpp-3.0
make
sudo make install
cd /usr/local/stow/
sudo stow bpp-3.0


好了,app和bpp的所有文件都被stow軟鏈接到了/usr/local。path,man, lib等等都放在通常的地方,你不用手工修改它們,馬上就可以使用了。因為是軟鏈接,並不額外占用磁盤空間。而且,軟連接對性能的影響可以忽略不計。

要刪除app很容易。

代码:
cd /usr/local/stow/
sudo stow -D app-1.4
sudo rm -r app-1.4


干干淨淨。

其他用法。

app-1.5出來了。我想嘗鮮。很簡單,用上述方法安裝app-1.5就可以了。(升級到app-1.5不需要刪除app-1.4.)

用了一段時間,發現app-1.5有個嚴重的bug。怎麼辦?降級到1.4。很容易,只要兩步。

代码:
cd /usr/local/stow/
sudo stow -D app-1.5
sudo stow app-1.4


完全不需要重新編譯。

再比如,你看到bpp-3.0的網站上有人提交了一個patch,可以提供一個很酷的新功能。但是維護者還在審查這個patch的過程中,沒有更新。出於各種原因,你決定信任這個patch,於是你應用這個patch到bpp-3.0,重新編譯了bpp-3.0。然後,你只需要

代码:
cd /usr/loca/stow/
sudo stow -R bpp-3.0


如果重裝了系統,只要把/usr/local/stow備份了,就可以很容易地重新安裝軟件,不用重新編譯。(重裝的系統和原來的系統差別不能太大。)安裝到多臺系統配置差不多的電腦同理。

當然,stow只是一個簡單的軟件,不是apt或者portage這種大家伙,所以,你不可能指望它能自動處理依賴關系,這不是它的適用范圍。對於文件沖突的情況,stow是比較智能的,但有時也無法自動解決,需要你手工干預。這些都算不上問題。因為如果你手工編譯安裝,不用stow的話,一樣不會自動解決依賴。而文件沖突,stow無法解決的時候至少會報錯,不用stow的話,就是不管三七二十一直接覆蓋,問題更嚴重。

如果你使用多個stow目錄,比如/usr/local/stow1, /usr/local/stow2, /usr/local/stow3等,或者,你沒有root權限,把軟件軟連接到不是/usr/local/的目錄(是的,你可以使用諸如stow -t /home/joe/local/ 指定另外的軟連接目錄),有時會出現一些復雜的情況。請參考stow manual。如果你總是把軟件都裝在/usr/local/stow下(軟連接的路徑也采用stow默認的/usr/local/),基本可以避免出現復雜的情況。


_________________
https://weakish.github.io


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 用stow管理自個兒編譯的軟件
帖子发表于 : 2009-02-04 21:14 
头像

注册: 2007-11-29 9:41
帖子: 8455
送出感谢: 0 次
接收感谢: 0 次
收藏 :em11


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 用stow管理自個兒編譯的軟件
帖子发表于 : 2009-02-04 21:30 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
不是所有的软件都 ./configure
不是所有的 configure 都支持 --prefix
不是所有的 make install 都装到 --prefix ..

综上, checkinstall 是首选


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 用stow管理自個兒編譯的軟件
帖子发表于 : 2009-02-04 23:00 
头像

注册: 2005-07-02 14:41
帖子: 4133
系统: Ubuntu 14.04 (Kylin)
送出感谢: 53
接收感谢: 11
BigSnake.NET 写道:
不是所有的软件都 ./configure
不是所有的 configure 都支持 --prefix
不是所有的 make install 都装到 --prefix ..

综上, checkinstall 是首选


autoconf和automake還是比較流行的。

而且,stow也不依賴於autoconf和automake,只要把軟件的安裝目錄指定為/usr/local/stow/program-version。然後stow /usr/local/stow/program-version就會自動在/usr/local/建立軟連接。(不能指定安裝位置的軟件應該非常少吧。)

checkinstall有時候會出問題。還有,用checkinstall做deb包的話,軟件是安裝在系統目錄的,這個有時候比較麻煩,容易起沖突。而且,會把舊版本覆蓋掉。


_________________
https://weakish.github.io


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 用stow管理自個兒編譯的軟件
帖子发表于 : 2009-02-05 2:48 
头像

注册: 2005-08-14 19:53
帖子: 3998
送出感谢: 1
接收感谢: 2
还是Arch先进。。包管理器管理下载2进制程序,还有自己编译的程序。。。没你们这么多麻烦,嘿嘿


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 用stow管理自個兒編譯的軟件
帖子发表于 : 2009-02-05 23:05 
头像

注册: 2005-07-02 14:41
帖子: 4133
系统: Ubuntu 14.04 (Kylin)
送出感谢: 53
接收感谢: 11
jarryson 写道:
还是Arch先进。。包管理器管理下载2进制程序,还有自己编译的程序。。。没你们这么多麻烦,嘿嘿


pacman也要靠ABS工作。你要寫ABS pkgbuild文件的。


_________________
https://weakish.github.io


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 用stow管理自個兒編譯的軟件
帖子发表于 : 2010-07-24 21:47 
头像

注册: 2005-07-02 14:41
帖子: 4133
系统: Ubuntu 14.04 (Kylin)
送出感谢: 53
接收感谢: 11
貼一個python的例子:

代码:
   $ tar xvzf python-musicbrainz2-0.4.0.tar.gz
   $ sudo python setup.py install \
        --prefix=/usr/local/stow/python-musicbrainz2-0.4.0 \
        --install-layout=deb
   $ cd /usr/local/stow
   $ sudo stow python-musicbrainz2-0.4.0


_________________
https://weakish.github.io


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 用stow管理自個兒編譯的軟件
帖子发表于 : 2012-05-07 16:42 
头像

注册: 2005-07-02 14:41
帖子: 4133
系统: Ubuntu 14.04 (Kylin)
送出感谢: 53
接收感谢: 11
millenniumdark 写道:
貼一個python的例子:

代码:
   $ tar xvzf python-musicbrainz2-0.4.0.tar.gz
   $ sudo python setup.py install \
        --prefix=/usr/local/stow/python-musicbrainz2-0.4.0 \
        --install-layout=deb
   $ cd /usr/local/stow
   $ sudo stow python-musicbrainz2-0.4.0


python是不是用virtualenv更方便?


_________________
https://weakish.github.io


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译