[学习研究] LuaRocks打包机制

299 views
Skip to first unread message

Tang Daogang

unread,
Mar 21, 2011, 11:40:06 PM3/21/11
to bamb...@googlegroups.com

LuaRocks是Lua模块的官方部署和管理系统。它有如下特点:
  1. 包含依赖关系;
  2. 支持同一个包的多版本共存;
  3. 支持本地和远程仓库;
  4. 支持多个本地rocks树;
  5. 支持Unix系和WIndows系平台;
  6. 自动检测外部(c)依赖库的存在与否;

LuaRocks使用方法
执行 luarocks help,会列出命令使用方法和所有指令。

用法为:
luarocks [--from=<server> | --only-from=<server>] [--to=<tree>] [VAR=VALUE]... <command> [<argument>]
可以执行的指令为:
build   创建/编译一个rocks
download  只是下载rocks,并不安装
help   帮助信息
install  下载并安装一个rocks
list   列出系统中已经安装的rocks
make 使用一个rockspec蓝图文件在当前目录中编辑一个包,它不会去从别的地方取文件,它认为所有的文件都在本目录下准备好了的
pack  打包。可以从源代码打,也可以从二进制文件打
remove   卸载一个rocks
search   从rocks服务器上搜索包
unpack  将一个rocks包解开



Rocks的种类
一个rock包中,包含一个rockspec文件,即蓝图文件,里面包含此包的一系列的描述、依赖关系以及编译规则。整个包就是按这个蓝图创建的。一个rock包,实际上是一个ZIP格式的压缩包,扩展名为.rock。Rocks包通常有如下几种:
  1. 源代码包(.src.rock):lua文件以源代码方式提供,c文件也以源代码方式提供。安装的时候,会自动编译c文件为lua的二进制可调用模块;
  2. 二进制包(.system-arch.rock):lua文件以源代码方式提供,c模块以二进制方式提供。安装的时候,不需要编译过程;
  3. 纯Lua包(.all.rock):这种包中只包含纯lua文件,安装的时候,直接拷贝,它是跨平台的。
Rocks仓库(repositories)和Rocks树(tree)
rocks仓库是用于存放打包后的rocks包的地方,可以是远程的,也可以是本地。rocks服务器就是在一个HTTP或FTP服务器上给出这样一个目录,来存放rocks仓库中的文件(那个目录就可以说是仓库)。而rocks树,只能包含解包后的安装后的rocks文件。

要制作一个rocks仓库,只需在服务器上建一个目录,给这个目录可以访问的权限,把要用的rocks包放进去,再放一个 manifest 文件进去。这个文件的目的是描述此仓库中已经有哪些可以调用的模块,可用make-manifest工具自动生成。

在本地的rocks树中,也有这么一个manifest文件,它是在用luarocks安装的时候自动生成的。


Rockspec 格式
里面的值全为字符串,同一个字符串内,多个值之间用 , 隔开。
  • 元数据
    • package  串。包的名字
    • version  串。包的版本
    • description  表
      • summary  串。包的一行描述
      • detailed  串。包的详细描述
      • license  串。发行证书声明
      • homepage  串。主页
      • maintainer  串。此包的维护者
  • 依赖信息
    • supported_platforms  列。支持的平台。目前有:unix, windows, win32, cygwin, macosx, linux, freebsd。如果没写,表明支持所有平台;
    • dependencies 列。支持的版本关系符为:==, ~=, >, <, <=, >=, ~>(这个符号的意思是~>2表示>=2, <3,~>2.4表示>=2.4, <2.5);
    • external_dependencies 表。外部依赖关系。一般是写一个文件(.h文件或.so文件),用于判断外部库是否存在。
  • 编译规则
    • source 表。指定了这个后,表示从外部下载代码来编译包。
      • url  指明要下载的包的名字,可支持文件压缩包下载,也支持git下载
      • md5  如果下载的源代码是文件压缩包,则这里要写明这个包的md5值
      • file 下载的文件压缩包的名字,如果指定的url,则这个值可忽略
      • dir  下载的包,解包后文件所放的目录的名字
    • build 表。
      • type  指明构建时使用的后端。
      • install
        • lua
        • lib
        • conf
        • bin
      • copy_directories  指明在安装后,要把哪些辅助性的文档等拷到安装目录下面去
    • type == 'builtin' 时。在这种方式也,也可以做编译工作的,虽说很简单,但已经很强大了。
      • modules  列
        • 串值。单文件lua或c代码
        • 列。多文件c代码
          • sources 列。c的源文件列表
          • libraries 列。要被链接的外部库
          • defines 列。c的defines的列表
          • incdirs 列。编译时查询的头文件目录
          • libdirs 列。连接时查询的库文件目录
    • type == 'make' 时
      • makefile。指定要使用的makefile文件
      • build_target
      • build_pass
      • install_target
      • install_pass
      • build_variables
      • install_variables
      • variables。支持CC, CFLAGS, LIBFLAG。
    • type == 'cmake' 时
      • cmake
      • variables
    • type == 'command' 时
      • build_command
      • install_command
    • type == 'none' 时
      • 表明没有构建(编译)的操作。





luarocks的配置文件一般在
  • /etc/luarocks/config.lua  如果是root用户安装的
  • /usr/local/etc/luarocks/config.lua  有些时候会放在这里
在这个配置文件里面,一般有如下东西:
  • rocks_servers  列。远程rocks服务器。默认为:http://luarocks.org/repositories/rocks,可以添加多个
  • rocks_trees 列。本地rocks树的目录。默认为:/usr/local。如果是普通用户,默认为~/.luarocks/
  • external_deps_dirs。不知道做啥。
  • variables
    • CFLAGS  用于指定编译时的参数
    • PREFIX  用于指定安装时的前缀
    • LUADIR  指定存放lua代码模块的目录
    • LIBDIR  指定存放c代码模块的目录
    • BINDIR  指定存放命令的目录
    • CONFDIR  指定存放配置文件的目录
    • 其它C代码编译的时候需要用到的标志



除了安装lua模块之外,luarocks还可以用于安装命令行脚本(可执行文件)。默认路径是:

/usr/local/bin  如果你是root的话
~/.luarocks/bin  如果你是普通用户的话
%APPDATA%/luarocks/bin  在windows上

luarocks-admin 是用于仓库管理的一个工具,他的命令有:
help  显示帮助的命令
make-manifest  为一个仓库创建一个manifest文件
add  添加一个rock及rockspec包到rocks服务器上
refresh-cache  刷新远程服务器的本地缓存



--
Nothing is impossible.

Creating a rock.pdf
Reply all
Reply to author
Forward
0 new messages