什么是 Luarocksgit
源码安装部署 Luarocksgithub
注册 Luarocks 为 Lua 社区贡献本身的代码macos
Luarocks 使用初探bootstrap
Luarocks 是一个 Lua 包管理器,基于 Lua 语言开发,提供一个命令行的方式来管理 Lua 包依赖、安装第三方 Lua 包等,社区比较流行的包管理器之一,另还有一个 LuaDist,Luarocks 的包数量比 LuaDist 多,更细节的二者对比可参阅 这里。api
(为什么使用源码见 此文)bash
wget http://luarocks.org/releases/luarocks-2.2.2.tar.gz tar zxvf luarocks-2.2.2.tar.gz cd luarocks-2.2.2 ./configure --help
configure help
查看所支持的安装配置,这里咱们主要关注如下两个服务器
--prefix=DIR Prefix where LuaRocks should be installed. Default is /usr/local --with-lua=PREFIX Use Lua from given prefix. Default is auto-detected (the parent directory of $LUA_BINDIR).
--prefix
设置 Luarocks 安装路径,--with-lua
指定 Luarocks 依赖的 Lua 安装路径。网络
--prefix
设置 prefix 会自动将 Luarocks 以及日后使用 Luarocks 安装的 Lua 包,LuaC 包都安装到 Luarocks 安装路径下的相应位置,不然相关的包文件散落在文件系统中,显得杂乱不便于管理,若是所安装的 Lua 模板包含 bin 文件,则会自动安装到此目录下的 bin 路径,与 Luarocks 可执行文件同一路径,更便于管理、使用。app
./configure --prefix=/usr/local/luarocks-2.2.2 --with-lua=/usr/local/lua-5.1.5 make build make install
安装完成后,直接运行 luarocks 便可使用。框架
// luarocks LuaRocks 2.2.2, a module deployment system for Lua NAME /usr/local/bin/luarocks - LuaRocks main command-line interface
当前 IT 技术发展惊人的快,很大程度上与开源社区的快速发展有直接关系,你们一块儿分享知识、经验、解决方案,互相支持、协做。咱们从社区汲取营养,学习成长,回过头来咱们也须要回馈社区,这才是一个良性循环。
使用 Luarocks 为 Lua 社区贡献代码很是简单,只需以下几步:
到 官网 注册一个 luarocks 帐号
在官网 <a name="api-key">
设置 页面生成 API-Keys(用做包提交的验证)
在项目根目录根据 rockspec 文件格式书写你本身的 rockspec 文件(或者在项目根目录运行 luarocks write_rockspec
命令自动生成)
使用 API-key 上传你的项目到 luarocks.org(命令行运行 luarocks upload --api-key=
)
在你的项目 页面 点击下图所示的 Add To Manifest
将你的项目添加到相关分类方便分类检索,默认已经在 root 里。
命令行运行luarocks
,或者luarocks help
能看到相关luarocks的详细信息,大体分为如下6个段。
NAME/名称
显示 Luarocks 说明信息 - LuaRocks main command-line interface
SYNOPSIS/概要
显示luarocks命令参数使用格式:
luarocks [--from=<server> | --only-from=<server>] [--to=<tree>] [VAR=VALUE]... <command> [<argument>]
GENERAL OPTIONS/通用选项
被全部命令所支持的选项,包含指定搜索 rocks/rockspecs
的 server,默认的 server 搜寻顺序为:
https://luarocks.org https://raw.githubusercontent.com/rocks-moonscript-org/moonrocks-mirror/master/ http://luafr.org/moonrocks/ http://luarocks.logiceditor.com/rocks
另外选项还设置是否仅仅下载源码、是否显示安装过程、指定超时时间等。
VARIABLES/变量
Variables from the "variables" table of the configuration file can be overriden with VAR=VALUE assignments.
COMMANDS/命令列表
luarocks 的常规操做命令 install、search、list 等
CONFIGURATION/相关配置信息
Lua 版本,rocks trees 等安装 luarocks 时的配置
在 luarocks 使用中咱们主要关注 GENERAL OPTIONS、和 COMMANDS 两项。GENERAL OPTIONS 与其余 COMMANDS 配合使用。以搜索香草/vanilla 框架(一个基于 Lua 开发的 Openresty Web 应用开发框架)为例:
// luarocks search vanilla #直接搜索vanilla Search results: =============== Rockspecs and source rocks: --------------------------- vanilla 0.1.0-1 (rockspec) - https://luarocks.org 0.1.0-1 (src) - https://luarocks.org 0.0.1-1 (rockspec) - https://luarocks.org 0.0.1-1 (src) - https://luarocks.org
也能够在命令后加上一个 GENERAL OPTIONS/通用选项好比 --verbose
来显示整个命令运行过程(这对排查安装中遇到的问题很是有用)。
// luarocks search vanilla --verbose #添加参数显示整个搜索vanilla的过程 os.execute: 'curl' -k -f -L --user-agent 'LuaRocks/2.2.2 macosx-x86_64 via curl' --connect-timeout 30 'https://luarocks.org/manifest-5.1.zip' 2> /dev/null 1> '/Users/zhoujing/.cache/luarocks/https___luarocks.org/manifest-5.1.zip' Results: 1 1 (number): 0 os.execute: unzip -n '/Users/zhoujing/.cache/luarocks/https___luarocks.org/manifest-5.1.zip' Archive: /Users/zhoujing/.cache/luarocks/https___luarocks.org/manifest-5.1.zip inflating: manifest-5.1 Results: 1 1 (number): 0 Search results: =============== Rockspecs and source rocks: --------------------------- vanilla 0.1.0-1 (rockspec) - https://luarocks.org 0.1.0-1 (src) - https://luarocks.org 0.0.1-1 (rockspec) - https://luarocks.org 0.0.1-1 (src) - https://luarocks.org
命令的执行参数追加的格式如同SYNOPSIS描述的那样:
luarocks [--from=<server> | --only-from=<server>] [--to=<tree>] [VAR=VALUE]... <command> [<argument>]
可使用 luarocks <command> help
查看 command 更细节的帮助文档,这也很是有用。
上面演示了 search 命令,看字面意思就很明白是用来搜索模块的,使用相对比较简单也容易理解,相似的命令还有 download
、help
、install
、list
、new_version
、remove
、upload
等,可是余下的几个命令也很重要,使用起来就不是那么好理解,下面以一个 test 的项目重点演示说明(每一个命令使用时都建议先执行 luarocks <command> help
查看详细文档,下面仅截取各命令文档的 NAME 和 SYNOPSIS 段并详述、演示使用过程)。
~/Desktop/ tree ./t-luarocks ./t-luarocks ├── test │ ├── spec │ │ └── init.lua │ ├── sys │ │ ├── config.lua │ │ └── vanilla.lua │ └── v │ ├── application.lua │ ├── bootstrap.lua │ ├── controller.lua │ └── dispatcher.lua └── test-0.0.rc1-1.rockspec
~/Desktop/t-luarocks/ luarocks help build NAME /usr/local/bin/luarocks build - Build/compile a rock. SYNOPSIS /usr/local/bin/luarocks build [--pack-binary-rock] [--keep] {<rockspec>|<rock>|<name> [<version>]}
build 命令用来基于 rock 二进制文件安装 Lua 包,前提 rock 文件基于规范的 rockspec文件打包,且 rockspec 包含正确的 build 段描述。
~/Desktop/t-luarocks/ luarocks help doc NAME /usr/local/bin/luarocks doc - Shows documentation for an installed rock. SYNOPSIS /usr/local/bin/luarocks doc <argument>
doc 命令用来显示本地已经安装的 Lua 包根目录下全部的 Markdown 文档列表,并默认自动打开 README.md 文件,若是相应的 Lua 包本地并无安装,则会到服务器(#server)上搜寻。
~/Desktop/t-luarocks/ luarocks doc vanilla Documentation files for vanilla 0.1.0-1 --------------------------------------- /usr/local/luarocks-2.2.2/lib/luarocks/rocks/vanilla/0.1.0-1/doc/ CHANGELOG.md LICENSE.md README-zh.md README.md Opening /usr/local/luarocks-2.2.2/lib/luarocks/rocks/vanilla/0.1.0-1/doc/README.md ...
~/Desktop/t-luarocks/ luarocks help lint NAME /usr/local/bin/luarocks lint - Check syntax of a rockspec. SYNOPSIS /usr/local/bin/luarocks lint <rockspec>
lint 命令用来检查当前目录 rockspec 文件(rockspec 文件为 Luarocks 包管理的描述文件,细节写法会另起文档描述)的格式,若是格式没问题则不会有任何显示,不然则暴露细节错误,指导修改。
~/Desktop/t-luarocks/ luarocks help make NAME /usr/local/bin/luarocks make - Compile package in current directory using a rockspec. SYNOPSIS /usr/local/bin/luarocks make [--pack-binary-rock] [<rockspec>]
make 命令基于一个 rockspec 文件安装 Lua 包,这个文件必须是本地的一个文件,而不像 install 那样能够是一个网络文件。这个命令还能够经过追加参数 --pack-binary-rock
而仅仅编译生成 rock 文件,make 命令与 install 命令的区别在于 install 基于 rock文件,而 make 必须基于 rockspec 文件。
~/Desktop/t-luarocks/ luarocks help pack NAME /usr/local/bin/luarocks pack - Create a rock, packing sources or binaries. SYNOPSIS /usr/local/bin/luarocks pack {<rockspec>|<name> [<version>]}
pack 命令根据本地 rockspec 文件将 Lua 源码包打包成二进制的 rock 文件(install 命令基于 rock 文件进行安装)。
~/Desktop/t-luarocks/ luarocks help path NAME /usr/local/bin/luarocks path - Return the currently configured package path. SYNOPSIS /usr/local/bin/luarocks path
path 命令显示当前 Luarocks 所配置的 LUA_PATH 和 LUA_CPATH 值。
~/Desktop/t-luarocks/ luarocks help purge NAME /usr/local/bin/luarocks purge - Remove all installed rocks from a tree. SYNOPSIS /usr/local/bin/luarocks purge --tree=<tree> [--old-versions]
purge 命令必须传入一个 --tree
参数,这里的 tree 实际上是一个路径,luarocks 安装 Lua 包所在路径,purge 命令将这个路径下面全部的包都 remove。这个命令彻底挽救了没有指定 --prefix
而安装 luarocks 的同窗,在没有指定 --prefix
的时候 luarocks 将默认的安装到 /usr/local
路径下,基于此安装的包也将散落在整个 /usr/local
目录,真是太乱。这时候在命令行执行 luarocks purge --tree=/usr/local
整个世界都干净了。
~/Desktop/t-luarocks/ luarocks help show NAME /usr/local/bin/luarocks show - Shows information about an installed rock. SYNOPSIS /usr/local/bin/luarocks show <argument>
show 命令可用来显示包信息,这些信息来自于当前 Lua 包的 rockspec 文件中。
~/Desktop/t-luarocks/ luarocks help unpack NAME /usr/local/bin/luarocks unpack - Unpack the contents of a rock. SYNOPSIS /usr/local/bin/luarocks unpack [--force] {<rock>|<name> [<version>]}
unpack 命令将 pack 命令打包的 rock 解开。
~/Desktop/t-luarocks/ luarocks help upload NAME /usr/local/bin/luarocks upload - Upload a rockspec to the public rocks repository. SYNOPSIS /usr/local/bin/luarocks upload [--skip-pack] [--api-key=<key>] [--force] <rockspec>
upload 命令会根据 rockspec 文件将当前 Lua 包打包成 rock 文件而后上传至 luarocks.org,上传须要添加一个在官网配置(#api-key) 过的 api-key
参数进行验证。
~/Desktop/t-luarocks/ luarocks help write_rockspec NAME /usr/local/bin/luarocks write_rockspec - Write a template for a rockspec file. SYNOPSIS /usr/local/bin/luarocks write_rockspec [--output=<file> ...] [<name>] [<version>] {<url>|<path>}
write_rockspec 命令在当前目录自动生成一个 rockspec 文件骨架,一个 template,注意仅仅是一个骨架,有些参数必须落实,不然没法正常使用,好比 source、description
段的配置。
下面给出一个简单的 rockspec 文件模板,包含了 rockspec 文件的基本必选项:
package ="vanilla" version ="0.1.0-1" source ={ url ="git://github.com/idevz/vanilla.git" #必须为可访问的在线库地址 } description ={ summary ="A Lightweight Openresty Web Framework", homepage ="http://idevz.github.io/vanilla", maintainer ="zhoujing<zhoujing00k@gmail.com>", license ="MIT" #必须指明所基于的开源协议 } dependencies ={ "lua=5.1", ... ... "lua-resty-http=0.06-0" } build ={ type ="builtin", modules ={ ["vanilla.v.view"] ="vanilla/v/view.lua", ... ... ["vanilla.v.views.rtpl"] ="vanilla/v/views/rtpl.lua", }, install ={ bin ={ "bin/vanilla" } }, }