Posso usar os pacotes MongoDB 14.04 com 16.04?

10

Infelizmente, o pacote oficial do Ubuntu para o MongoDB ainda está preso no 2.6, que é antigo neste momento ( esse bug não foi detectado por ser vívido, ardiloso ou xenial).

O MongoDB ainda não lançou um pacote para 16.04 (Xenial), então como posso usar os pacotes 14.04 (Trusty) para instalar o MongoDB 3.2+ no 16.04?

Adam C
fonte
Sim você pode. Se você estiver atualizando, deve ser fácil. Se você fresco instalado 16.04, basta seguir os passos aqui: askubuntu.com/questions/724749/...
KhoPhi
@Rexford Como você verá na resposta abaixo não é assim tão fácil em 16.04 com os pacotes antigos (o serviço não será instalado corretamente com uma nova instalação)
Adam C

Respostas:

14

É um pouco complicado, mas sim, isso pode ser feito. Há uma etapa não documentada necessária para realmente iniciar o serviço e (por incrível que pareça), a menos que você queira brincar manualmente com a conversão inicial de tarefas, é necessário instalar o mongodbpacote Ubuntu primeiro e depois removê-lo para que você tenha um serviço utilizável. Uma instalação direta dos pacotes MongoDB não fornecerá um serviço funcional em um 16.04 novo.

Atualização - julho de 2016: a correção oficial para isso (adicionando suporte para 16.04 aos pacotes) foi concluída no ramo de desenvolvimento 3.3 como parte do SERVER-23043 - e foi lançada como um backport na série 3.2 como parte do 3.2. 7 . Portanto, se você estiver usando o 3.2.7+, não precisará fazer isso e a instalação oficial do pacote MongoDB deve funcionar.

De qualquer forma, depois de adicionar / remover, siga as instruções usuais do 14.04, resumidas aqui:

# install the Ubuntu package (to get the service set up correctly)
sudo apt-get install mongodb
# Now remove it and continue with the MongoDB instructions
sudo apt-get remove mongodb
sudo apt-get autoremove
# import key
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
# add trusty repos
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
# update apt
sudo apt-get update
# install the MongoDB package
sudo apt-get install -y mongodb-org

A instalação foi bem-sucedida e, graças ao pacote Ubuntu, temos todas as peças necessárias para um serviço, mas a tentativa de iniciar o serviço falhará inicialmente:

$ sudo service mongodb start
Failed to start mongodb.service: Unit mongodb.service is masked.

Corrigir isso não é muito difícil:

$ sudo systemctl unmask mongodb
Removed symlink /etc/systemd/system/mongodb.service.

Agora podemos ativar / iniciar o serviço, obter seu status etc.

$ sudo service mongodb enable
$ sudo service mongodb start
$ sudo service mongodb status
● mongodb.service - LSB: An object/document-oriented database
   Loaded: loaded (/etc/init.d/mongodb; bad; vendor preset: enabled)
   Active: active (running) since Thu 2016-04-14 16:40:35 IST; 7s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 2849 ExecStart=/etc/init.d/mongodb start (code=exited, status=0/SUCCESS)
 Main PID: 1593 (code=exited, status=0/SUCCESS)
    Tasks: 13 (limit: 512)
   Memory: 51.9M
      CPU: 100ms
   CGroup: /system.slice/mongodb.service
           └─2861 /usr/bin/mongod --config /etc/mongodb.conf

Êxito - e obtemos um bom ponteiro para o arquivo de configuração ativo (que está no key=valueformato antigo , veja aqui os exemplos no formato YAML recomendado mais recente).

Nota: Na verdade, haverá dois arquivos de configuração /etc/mongod.confe, /etc/mongodb.confgraças a pequenas diferenças entre os dois pacotes que instalamos. O serviço agora ativo aponta para o formato antigo por padrão /etc/mongodb.conf- você pode alternar movendo / copiando o mongod.confpara, mongodb.confse desejar, ou simplesmente editando o arquivo diretamente.

Depois de iniciado, para testar, conecte-se ao banco de dados com o mongoshell:

$ mongo
MongoDB shell version: 3.2.5
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
Server has startup warnings: 
2016-04-14T16:40:34.962+0100 I CONTROL  [initandlisten] 
2016-04-14T16:40:34.962+0100 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2016-04-14T16:40:34.962+0100 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2016-04-14T16:40:34.962+0100 I CONTROL  [initandlisten] 
2016-04-14T16:40:34.962+0100 I CONTROL  [initandlisten] 
2016-04-14T16:40:34.962+0100 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-04-14T16:40:34.962+0100 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2016-04-14T16:40:34.962+0100 I CONTROL  [initandlisten] 
2016-04-14T16:40:34.962+0100 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-04-14T16:40:34.962+0100 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2016-04-14T16:40:34.962+0100 I CONTROL  [initandlisten] 

Se você deseja se livrar dos avisos THP, confira esta resposta .

Adam C
fonte
1
Após seu primeiro bloco de código acima, a execução sudo service mongodb startretornará Failed to start mongodb.service: Unit mongodb.service not found.
user1063287
1
Tentei resolver o problema acima, criando um arquivo de serviço para systemd (conforme askubuntu.com/a/694226/367134 ). Este é o resultado: sudo service mongodb startnão retorna nada. sudo service mongodb statusretorna uma mensagem com falha com status=2. Para corrigir isso, alterei o caminho no arquivo de serviço recém-criado de /etc/mongodb.confpara /etc/mongod.conf. Com base na sua resposta original, como você inicia o mongodb na inicialização do sistema?
user1063287
1
A seguinte ação adicional habilitado mongodb para começar na inicialização do sistema para mim: sudo systemctl enable mongodb. Veja: digitalocean.com/community/tutorials/…
user1063287
1
Ah, quase certeza que eu só deixou essa linha quando copiar / colar minhas instruções, ou eu teria falhado semelhante, graças a cabeça para cima
Adam C
1
Definitivamente não corrigido no 3.2.8. Veja o último comentário . Deve ser abordado em 3.2.9.
Goran Miskovic 30/07/2016
-1

Se você já o instalou, remova o mongodb:

sudo apt-get remove mongodb
sudo apt-get autoremove

Tente com recomendação no digitalocean https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-16-04

grey87
fonte
3
Embora sua resposta possa ser válida, seria melhor fornecer as etapas listadas no seu link aqui. Os links e seu conteúdo podem mudar com o tempo, o que tornaria sua resposta inútil.
Videonauth 17/05