iT邦幫忙

DAY 14
2

emacs的30天學習筆記系列 第 14

emacs 做中學第十四天:談套件管理:mingw-get

邦友們不約而同分享了套件管理,如YUM(centos 用),npm(node.js). Nuget Package Explorer. 一個套件管理系統,在Linux 分枝(Distribution)似乎代表著一定的技術能力,像Debian(Ubuntu)的Apt-get , Red Hat 的RPM, OPEN SUSE好像就是YUM, 還是另外的(?),通常都代表著獨霸一方的實力。 語言類的RUBY, RUBY GEMS,
PERL的CPAN...等,一個強大的,組織良好的套件管理系統,似乎同時在營造著ECO
SYSTEM,就是有點利可圖,或至少表示了志願者眾多,而台灣之光的唐鳳小姐,曾是PERL界的CPAN上的貢獻度排行第一的Hacker , 某種意義上也是地位的一種表現。

有一回在COUCUP上,有達人分享了如何成為Debian Developer, 他說有Debian的mail
address,是合格的Debian 開發者,代表著一種技術地位的象徵,因為冷門且台灣數量太稀少了,更顯得可貴,而進入這個領域,包套件就是很重要的技能。
套件安裝,通常都是下載後,更新一下系統套件庫,就可以用了。

因為速度上比make,make install快多了,可以理解套件管理系統應該是事先編譯好的二進位檔。

最近想試試跨平台,就裝了MinGW來試試。發現了mingw-get套件管理系統,
MinGW簡單地說,在Windows上實現UNIX-LIKE shell的功能。而shell是跨平台的關鍵,在前人的努力下,shell 移植過來了,接著一發不可收拾,一些有歷史傳統的命令列工具也跟著過來,文字編輯器也過來。當然,因為Windows 平台大一統,
用的人多,自然有人想要便捷的使用方式,這時候,mingw-get 就產生了。

mingw-get --help 可以看出所有參數的用法。
mingw-get list OR mingw-get show可以看套件,
套件蠻多的,本來要用邦友分享的more來看,結果more 工具也沒安裝。
mingw-get show > pkglist.txt 裏,存成文字檔,之後打開文字檔,查套件關鍵字。

例如wget , mingw-get的套件名稱為 msys-wget , 你可以

mingw-get install msys-wget

如果一次想要多個套件,你可以

$ mingw-get  install msys-openssl  msys-openssh msys-zlib

http://prdownloads.sourceforge.net/mingw/openssl-1.0.0-1-msys-1.0.13-doc.tar.lzm
a?download
238.07 kB / 238.07 kB |================================================| 100%

套件的介紹文件,格式約是

Package: msys-openssh Subsystem: msys
Components: bin, doc, lic

openssh: Secure Networking Clients

openssh is a FREE version of the SSH connectivity tools that technical
users of the Internet rely on. Users of telnet, rlogin, and ftp may not
realize that their password is transmitted across the Internet
unencrypted, but it is. OpenSSH encrypts all traffic (including
passwords) to effectively eliminate eavesdropping, connection hijacking,
and other attacks. Additionally, OpenSSH provides secure tunneling
capabilities and several authentication methods, and supports all SSH
protocol versions.

The OpenSSH suite replaces rlogin and telnet with the ssh program, rcp
with scp, and ftp with sftp. Other utilities like ssh-add, ssh-agent,
ssh-keysign, ssh-keyscan, and ssh-keygen are also included.

組態(./configure)Curl程式庫時, 順便把SSL, SSH, Zlib裝起來了。

跨平台的檢驗,有時候會對函式檢查。

checking for recvfrom... yes
checking types of args and return type for recvfrom...

跑到這段時,停得蠻久,原來是在等參數傳回來。
checking types of args and return type for recvfrom... SOCKET,char *,int,int,struct sockaddr *,int *,int

有時候,真覺得這功能是怎麼做到的?真神奇,沒寫過,檢查函數的參數,
google一下,
得到這樣的解釋:有数据接收时recvfrom当然就返回了,没有数据时recvfrom就阻塞到那里了。這時,對阻塞,因為時間的DELAY, 特別有感受。
當然,可能和阻塞一點關係也沒有。

man recvfrom,發現了奇怪的事,
在linux上是

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                       struct sockaddr *src_addr, socklen_t *addrlen);

參數的個數,和型別不太一樣,不同平台,同名的函數,有不同的實作方式,
慢慢可以體會到跨平台的難度了,
同名的函數,要準備好幾個平台的版本,大概是這樣吧,

在linux平台上開發的網路程式,能安心交給GNU AUTO SYSTEM來搞定嗎?
真是一個深奧的領域。

小結:不能在重要的OS上跑GNU 的自由軟體,那鐵定少了公信力,ANSI C, NETWORK
Library, 不同平台間的差異,真讓之前的開發人員白了不少根頭髮。
可謂前人種樹,後人乘涼。在享用成果的現在,記得抱著感恩的心。

****>


上一篇
emacs 做中學第十三天:關於make及Makefile
下一篇
emacs 做中學第十五天:快速上手gsoap2
系列文
emacs的30天學習筆記38
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言