¿Puedo usar paquetes 14.04 MongoDB con 16.04?

10

Desafortunadamente, el paquete oficial de Ubuntu para MongoDB todavía está atascado en 2.6, lo cual es antiguo en este momento ( este error no se detectó en vivo, astuto o xenial).

MongoDB aún no ha lanzado un paquete para 16.04 (Xenial), entonces, ¿cómo puedo usar los paquetes 14.04 (Trusty) para instalar MongoDB 3.2+ en 16.04?

Adam C
fuente
Sí tu puedes. Si está actualizando, debería ser fácil. Si instaló 16.04 recién instalado, simplemente siga los pasos aquí: askubuntu.com/questions/724749/…
KhoPhi
@Rexford Como verá en la respuesta a continuación, no es tan fácil en 16.04 con los paquetes antiguos (el servicio no se instalará correctamente con una instalación nueva)
Adam C

Respuestas:

14

Es un truco, pero sí, esto se puede hacer. Hay un paso indocumentado necesario para iniciar el servicio y (curiosamente) a menos que desee continuar con la conversión de trabajo inicial manualmente, mongodbprimero debe instalar el paquete de Ubuntu , luego eliminarlo para que tenga un servicio utilizable. Una instalación directa de los paquetes MongoDB no le dará un servicio que funcione en un nuevo 16.04.

Actualización: julio de 2016: la solución oficial para esto (agregando soporte para 16.04 a los paquetes) se ha completado en la rama de desarrollo 3.3 como parte del SERVER-23043 , y se ha lanzado como backport en la serie 3.2 como parte de 3.2. 7 . Por lo tanto, si está utilizando 3.2.7+ no necesita hacer esto y la instalación oficial del paquete MongoDB debería funcionar.

En cualquier caso, después de agregar / quitar, siga las instrucciones habituales para 14.04, resumidas aquí:

# 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

La instalación se realiza correctamente y, gracias al paquete de Ubuntu, tenemos todas las piezas necesarias para un servicio, pero al intentar iniciar el servicio inicialmente fallará:

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

Arreglar esto no es demasiado difícil:

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

Ahora podemos habilitar / iniciar el servicio, obtener su estado, 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 - y obtenemos un buen puntero al archivo de configuración activo (que está en el key=valueformato anterior, consulte aquí para ver ejemplos en el formato YAML recomendado más reciente).

Nota: En realidad habrá dos archivos de configuración /etc/mongod.confy /etc/mongodb.confgracias a las pequeñas diferencias entre los dos paquetes que hemos instalado. El servicio ahora activo apunta al formato antiguo de forma predeterminada /etc/mongodb.conf: puede cambiar moviendo / copiando mongod.confa mongodb.confsi lo desea, o simplemente editar el archivo directamente.

Una vez iniciado, para probar, conéctese a la base de datos con el 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] 

Si desea deshacerse de las advertencias de THP, consulte esta respuesta .

Adam C
fuente
1
Después de su primer bloque de código anterior, la ejecución sudo service mongodb startregresa Failed to start mongodb.service: Unit mongodb.service not found.
user1063287
1
Traté de resolver lo anterior creando un archivo de servicio para systemd (según askubuntu.com/a/694226/367134 ). Este es el resultado: sudo service mongodb startno devuelve nada. sudo service mongodb statusdevuelve un mensaje fallido con status=2. Para solucionar esto, cambié la ruta en el archivo de servicio recién creado de /etc/mongodb.confa /etc/mongod.conf. Basándose en su respuesta original, ¿cómo consigue que mongodb se inicie en el inicio del sistema?
user1063287
1
La siguiente acción adicional habilitado mongodb para empezar en el inicio del sistema para mí: sudo systemctl enable mongodb. Ver: digitalocean.com/community/tutorials/…
user1063287
1
Ah, estoy bastante seguro de que acabo de dejar esa línea al copiar / pegar mis instrucciones, o habría fallado de manera similar, gracias por el aviso
Adam C
1
Definitivamente no corregido en 3.2.8. Ver el último comentario . Debería abordarse en 3.2.9.
Goran Miskovic