Não há necessidade de fazer nenhum dos truques com o CRLE, conforme descrito no link para o darksaslight.com na pergunta original. De fato, eu tentaria remover qualquer alteração se você tivesse feito isso. A técnica de compilação corrigiu o RUNPATH dentro das bibliotecas para que ele saiba procurar nos vários diretórios / opt / csw / lib sem qualquer LD_LIBRARY_PATH ou ajustes de cores.
Você precisará dos seguintes pacotes OpenCSW, além dos pacotes base do ruby:
- ruby18_dev
- libidn_dev
- libcurl_dev
- rubygems
- gcc4g ++
- ruby18_gcc4
- apache2_dev
O libidn_dev não é óbvio, pois o script do instalador "útil" oculta a saída dos comandos de compilação de teste que ele executa. Eu achei revendo a saída da treliça e descobri que havia um erro de linker devido à biblioteca ausente.
Você precisará executar os seguintes comandos como root ou sob sudo. Eu prefixei todos os meus comandos com sudo.
Instale as gemas do rack e do passageiro:
/opt/csw/bin/gem install rack
/opt/csw/bin/gem install passenger
Em seguida, use este comando para iniciar a compilação:
PATH=/opt/csw/bin:$PATH /opt/csw/bin/passenger-install-apache2-module --apxs2-path /opt/csw/apache2/sbin/apxs --auto
Depois disso, você poderá ver um erro como este:
In file included from /usr/include/sys/types.h:18:0,
from ext/common/AccountsDatabase.cpp:26,
from ext/apache2/module_libpassenger_common/aggregate.cpp:5:
/opt/csw/lib/gcc/sparc-sun-solaris2.10/4.6.2/include-fixed/sys/feature_tests.h:341:2: error: #error "Compiler or options invalid for pre-UNIX 03 X/Open applications and pre-2001 POSIX applications"
rake aborted!
Command failed with status (1): [g++ -Iext -Iext/common -Iext/libev -fPIC -...]
Você pode corrigir isso editando /opt/csw/lib/ruby/gems/1.8/gems/passenger-3.0.11/lib/phusion_passenger/platform_info/compiler.rb e limpando o "-D_XOPEN_SOURCE = 500" de uma das declarações de bandeiras. Assim:
if RUBY_PLATFORM =~ /solaris/
flags << '-pthreads'
#flags << '-D_XOPEN_SOURCE=500 -D_XPG4_2 -D__EXTENSIONS__ -D__SOLARIS__ -D_FILE_OFFSET_BITS=64'
flags << '-D_XPG4_2 -D__EXTENSIONS__ -D__SOLARIS__ -D_FILE_OFFSET_BITS=64'
flags << '-DBOOST_HAS_STDINT_H' unless RUBY_PLATFORM =~ /solaris2.9/
flags << '-D__SOLARIS9__ -DBOOST__STDC_CONSTANT_MACROS_DEFINED' if RUBY_PLATFORM =~ /solaris2.9/
flags << '-mcpu=ultrasparc' if RUBY_PLATFORM =~ /sparc/
Isso leva você até aqui:
In file included from ext/common/LoggingAgent/LoggingServer.h:48:0,
from ext/common/LoggingAgent/Main.cpp:43:
ext/common/LoggingAgent/../EventedMessageServer.h: In member function 'void Passenger::EventedMessageClient::writeArrayMessage(const char*, ...)':
ext/common/LoggingAgent/../EventedMessageServer.h:95:45: error: 'alloca' was not declared in this scope
ext/common/LoggingAgent/../EventedMessageServer.h: In member function 'void Passenger::EventedMessageClient::writeArrayMessage(Passenger::StaticString*, unsigned int)':
ext/common/LoggingAgent/../EventedMessageServer.h:118:41: error: 'alloca' was not declared in this scope
rake aborted!
Command failed with status (1): [g++ ext/common/LoggingAgent/Main.cpp -o ag…]
Para limpar, edite /opt/csw/lib/ruby/gems/1.8/gems/passenger-3.0.11/lib/phusion_passenger/platform_info/compiler.rb novamente e insira uma linha como:
flags << '-I/usr/include'
depois de "se RUBY_PLATFORM = ~ / solaris /". Isso está na seção como a edição acima.
Substitua também a linha
flags << '-DHAS_ALLOCA_H' if has_alloca_h?
com
flags << '-DHAS_ALLOCA_H_' if has_alloca_h?
Observe o sublinhado adicional no final de ALLOCA_H