在odroid上安装Gitlab的问题(v8 lib不可用?)

时间:2014-02-09 23:09:40

标签: ruby arm v8 gitlab odroid

将gitlab安装到我的odroid中就好了...使用https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md中的步骤直到这个命令

sudo -u git -H bundle install --deployment --without development test postgres aws

但是没有安装therubyracer 0.12.0(实际上,失败的是编译v8,因为它需要-fPIC标志)。这是错误消息

/usr/bin/ld: /home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/libv8-3.16.14.3/vendor/v8/out/arm.release/obj.target/tools/gyp/libv8_base.a(api.o): relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/libv8-3.16.14.3/vendor/v8/out/arm.release/obj.target/tools/gyp/libv8_base.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status

所以...我通过克隆https://github.com/v8/v8在系统上安装了v8并检查了提交7ce3fe106a37826dc23189a78dcb9000a1b3fa06(b / c,这是标签v3.16.14.3上libv8上使用的那个,那就是一个Gitlab需要)。

缺少的标志是-fPIC,所以在做make dependencies之后我做了这个改变(把它做成一个补丁,这样更容易看到......我只是在使用-Wall时添加-fPIC)

--- build/standalone.gypi.original  2014-02-09 21:58:48.627732201 +0000
+++ build/standalone.gypi   2014-02-09 22:02:27.236682523 +0000
@@ -96,7 +96,7 @@
     ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \
        or OS=="netbsd"', {
       'target_defaults': {
-        'cflags': [ '-Wall', '<(werror)', '-W', '-Wno-unused-parameter',
+        'cflags': [ '-fPIC', '-Wall', '<(werror)', '-W', '-Wno-unused-parameter',
                     '-Wnon-virtual-dtor', '-pthread', '-fno-rtti',
                     '-fno-exceptions', '-pedantic' ],
         'ldflags': [ '-pthread', ],
@@ -206,7 +206,7 @@
             '-fno-strict-aliasing',
           ],
           'WARNING_CFLAGS': [
-            '-Wall',
+            '-fPIC', '-Wall',
             '-Wendif-labels',
             '-W',
             '-Wno-unused-parameter',

然后运行make arm.release hardfp=on library=shared -j4并等待......完成后我只是sudo cp out/arm.release/lib.target/libv8.so /usr/lib/libv8.so让lib可用。我也做了sudo cp include /usr/,以便包含文件可用。

检查我安装了哪些宝石

odroid@odroid-server:~/v8$ gem query --local

*** LOCAL GEMS ***

bundler (1.5.3)
ref (1.0.5)

所以,我执行了sudo gem install libv8:3.16.14.3 -- --with-system-v8

你可以看到它已安装

odroid@odroid-server:~/v8/out/arm.release$ gem query --local

*** LOCAL GEMS ***

bundler (1.5.3)
libv8 (3.16.14.3)
ref (1.0.5)

但是现在,当我去/ home / git / gitlab文件夹运行

sudo -u git -H bundle install --deployment --without development test postgres aws

再次失败......然后,我读到了关于bundle config的内容,所以我运行了

sudo -u git -H bundle config build.libv8 --with-system-v8
sudo -u git -H bundle install --deployment --without development test postgres aws

瞧!

但......那么

odroid@odroid-server:/home/git/gitlab$ sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
ruby: symbol lookup error: /home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/therubyracer-0.12.0/ext/v8/init.so: undefined symbol: _ZN2v82V821AddGCPrologueCallbackEPFvNS_6GCTypeENS_15GCCallbackFlagsEES1_

我尝试将所有内容从v8 / out / arm.release / obj.target / tools / gyp复制到/ usr / lib,甚至复制到/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/ therubyracer-0.12.0 / ext / v8 /没有运气

有没有人知道如何使v8库可用?我认为这是我需要让它工作的最后一点信息。

感谢!!!

3 个答案:

答案 0 :(得分:4)

叶氏!这是libv8的常见问题。但是有一种替代方法可以安装nodejs并从Gemfile中省略therubyracer gem。请检查此github issue和此post

步骤:

  1. 停止gitlab服务
  2. 修改Gemfile并删除第gem "therubyracer"行。
  3. 使用以下内容移动捆绑包:mv /home/git/gitlab/.bundle/config{,.orig}
  4. 使用mv /home/git/gitlab/Gemfile.lock{,.orig}
  5. 移动Gemfile.lock
  6. 运行sudo -u git -H bundle install --path vendor/bundle以重新创建Gemfile.lock
  7. 安装nodejs
  8. 重启gitlab服务
  9. 现在,您在vendor / bundle中安装了新的Gemfile.lock和所有 gems。如果您想节省空间,清理它或者某事,您可以删除vendor / bundle文件夹并运行已知的部署命令:

    sudo -u git -H bundle install --deployment --without development test postgres aws
    

    这将只提取相关的宝石。也许有一种更简单的方法,因为现在你必须为mysql和postgres等安装devel包,但这就是现在想到的。

    Nodejs是一个完美的替代品,应该没有问题。由于rails使用execjs,您可以在自述文件中看到该节点作为javascript运行时受支持。

答案 1 :(得分:1)

GitLab不再将therubyracer作为依赖项,因此不再需要更改Gemfile.lock。您只需安装nodejs并执行常规的bundle install命令。

答案 2 :(得分:-2)

以下是创建GitLab安装的选项:https://about.gitlab.com/installation/