LuaRocks是Lua模块的官方部署和管理系统。它有如下特点:
- 包含依赖关系;
- 支持同一个包的多版本共存;
- 支持本地和远程仓库;
- 支持多个本地rocks树;
- 支持Unix系和WIndows系平台;
- 自动检测外部(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包通常有如下几种:
- 源代码包(.src.rock):lua文件以源代码方式提供,c文件也以源代码方式提供。安装的时候,会自动编译c文件为lua的二进制可调用模块;
- 二进制包(.system-arch.rock):lua文件以源代码方式提供,c模块以二进制方式提供。安装的时候,不需要编译过程;
- 纯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
-
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' 时
- 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.