我注意到许多R包的目录中都有一个名为“MD5”的文件。然而在“Writing R Extensions”手册中没有这个文件的提及。它会列出包中不同文件的MD5哈希值和文件名。
这个文件有什么用?我应该将其包含在我的软件包中吗?如何生成它?
src
软件包。具体来说,当软件包在存储库中列出时,软件包的元数据将添加到名为PACKAGES
的文件中。当用户通过install.packages()
请求软件包时,将触发下载以检查MD5哈希值。这在?md5sum
函数中已经说明。
MD5摘要用作检查R软件包是否已正确解压缩且未被修改的检查。
PACKAGES
文件的内部将如下所示:Package: datapkg
Version: 2.0.0
Depends: R (>= 3.2)
License: file LICENSE
MD5sum: 22797605db853f5f4c2c5612da366b53
NeedsCompilation: no
如需了解有关使用 install.packages()
与仓库一起使用的更多信息,请参见我编写的文章:
DESCRIPTION
中的 MD5sum:
行并不是与软件包 MD5 文件相同的东西。该文件有不同的用途。请参见下面的答案。 :-) - hyginntools::checkMD5sums()
的输入,用于检查安装包的完整性。文件格式可以从代码中逆向工程获得:一个文本文件,每个包含的文件都有一行,其中包含MD5哈希值、*
分隔符和相对于指定根目录的文件路径。您可以手动从tools::md5sum()
的输出中创建这些内容 - 或者您可以使用我在此Gist中提供的函数,并在其中更详细地讨论此问题。有一个非导出函数tools:::.installMD5sums(pkgDir, outDir = pkgDir)
可以生成MD5
文件。这里我已经注释了关键步骤:
## compute check sum for every file in package
x <- md5sum(dir(".", recursive = TRUE))
## exclude any existing "MD5" file
x <- x[names(x) != "MD5"]
## write each result out to the "MD5" file
cat(paste(x, names(x), sep = " *"), sep = "\n",
file = file.path(outDir, "MD5"))
可以这样使用:
tools:::.installMD5sums("/path/to/pkg/")
我通过谷歌搜索了解如何获取文件的MD5哈希值,最终来到了这里。这种方法简单而有效:
library(openssl)
as.character(md5(file("path/to/yourfile.txt", open = "rb")))
# [1] "30621b64b2232a67900738ab471f2067"
?md5sum
吗? - Mark O'Connell