Importing from Kunena 3

import

(Tarek Loubani) #1

Want to migrate from Kunena3 to Discourse? Great! Let’s get started.

Note: @tarek’s fine work on this topic was replaced wholesale after @pfaffman made considerable changes to the importer. Do not blame @tarek for mistakes!

What data can be imported?

  • Users
  • Categories
  • Topics & Posts
  • Attachments

Prerequisites

  1. Set up Discourse development environment on OS X, Ubuntu or Windows.

  2. Install MySQL or MariaDB

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mariadb-server libmysqlclient-dev
sudo gem install mysql2
  1. Add MySQL to the Gemfile and install it
echo "gem 'mysql2'" >> Gemfile
bundle install
  1. Create MySQL user, grants and table.
MYSQLPASSWD=mysqlpassword
mysql -u root -p$MYSQLPASSWD <<EOF
CREATE USER 'kunena'@'localhost' IDENTIFIED BY 'kunena';
CREATE DATABASE kunena;
GRANT ALL PRIVILEGES ON kunena . * TO 'kunena'@'localhost';
FLUSH PRIVILEGES;
EOF
  1. Import your Kunena / Joomla installation
mysql -u kunena -pkunena < mykunena.sql

Readying the Script for the import

Copy and paste these lines into your shell:

export DB_HOST="localhost"
export DB_NAME="kunena"
export DB_USER="kunena"
export DB_PW="kunena"
export KUNENA_PREFIX="jos_" # "iff_" sometimes
export IMAGE_PREFIX="http://EXAMPLE.com/media/kunena/attachments"
export PARENT_FIELD="parent_id" # "parent" in some versions
  • Use :arrow_up: and :arrow_left: and to edit the DB variables appropriately.

  • The Kunena tables are prefixed with jos_ in some cases, and with iff_ in others. If the import script fails for you with an error like “unknown column”, hit the :arrow_up: and change the KUNENA_PREFIX variable to iff_. If that fails too, you will need to inspect the database tables to see what prefix yours uses. This grep command will give you a list of tables in the database:

    grep “CREATE TABLE” mykunena.sql

  • Kunena3 attachments have a URL like this:

    http://EXAMPLE.com/media/kunena/attachments/USERID/FILENAME

Edit that variable too.

  • Parent field. In some versions, the parent_id field of the category table was parent. If you get an error about an “unknown column”, change the PARENT_FIELD to “parent”.

This is really going to happen!

  1. Make sure that neither Discourse nor Sidekiq are running.

  2. Clear existing data from your local Discourse instance:

cd ~/discourse
rake db:drop db:create db:migrate
  1. Run the import script: ruby script/import_scripts/kunena3.rb

  2. Wait until the import is done. You can restart the process if it slows down to a crawl.

  3. Start your Discourse instance: RAILS_ENV=development bundle exec rails server

  • Start Sidekiq and let it do its work:
bundle exec sidekiq -q critical,4 -q default,2 -q low

Depending on your forum size this can take a long time. You can monitor the progress at http://localhost:3000/sidekiq

  • If you want Discourse to copy the images to its own database, in your Discourse settings, enable download remote images to local and change download remote images max days old to a sufficiently large value, then rake posts:rebake.
  1. Take backup of the data and upload it to on your production site by following this howto.

@tarek’s known issues (2016-05-05)

If, like us, you had a very old Kunena installation that spanned several generations, then you may run into two problems:

  1. Users are not properly imported for very old posts
  2. BBCode makes its way into the posts.

It was very time-consuming, but I hand-fixed these. There is some code in the PHPBB import scripts that addresses BBCode -> MD conversion, but I didn’t spend much time on it.


Congratulations! You have successfully migrated your site from Kunena3 to Discourse! :tada:


Issues while migrating from Kunena
Help to merge forum from Kunena
How to convert vBulletin 4 database to Discourse?
#2

Hi Tarek,

Thank you! I will be trying this asap!!!

/Kohhal


#3

Ok, development environment installed (I had previously been trying the import on a DigitalOcean droplet)

First stumbling block in Step 2, “unknown command mysql2”


(Tarek Loubani) #4

woops. That should read ‘gem install mysql2’ I’ll fix it now. Thank you for testing this!


(Tarek Loubani) #5

I just reread the error. You are supposed to add it to the end of the file. I’ve now given an actual command for this using “echo”. Give it a try and see if it works.

echo "gem 'mysql2'" >> Gemfile


#6

Thanks. I’m on holidays until next week - will test as soon as i return


#7

Getting further, Step 4! - where/how do I need to put the .sql backup in order for this command to work?


(Tarek Loubani) #8

You run the command in the directory of the script. Otherwise, set the location. e.g., if your current directory is /home/kohhal, and the file is at /home/kohhal/mykunena.sql, the command above is correct.

If you are in a separate directory, the command is:

mysql -u kunena -p kunena < /home/kohhal/mykunena.sql


#9

Thanks, found the relevant directory on my machine. Is there a way to see if the sql import worked as I am getting an error on the script now as below but I’m sure the table name is correct :

‘kunena.iff_users’ doesn’t exist


[PAID] Kunena 3 Import assistance
(Tarek Loubani) #10

Hi Kohhal,

This is relatively basic SQL stuff, so perhaps check a guide, ask on the MySQL IRC channels/forums or web search for answers on this one.

Tarek : )


#11

Based on this tutorial, should the host be ‘localhost’ ? I suspect/hope that is why my table is not found…


(Frederik L) #12

How to get the import script?

I came to step “Readying the Script for the import”

But when I go to:

cd /var/discourse/scripts/
ls -ls

I only see

4 -rwxr-xr-x 1 root root 150 Nov 11 12:32 docker-gc
4 -rwxr-xr-x 1 root root 1115 Nov 11 12:32 mk_swapfile


#13

I have the same question. I see them on GitHub here: discourse/script/import_scripts at master · discourse/discourse · GitHub

But I don’t see that in my Digital Ocean droplet. I feel pretty dumb, because the guides make this seem simple, so I guess I’m missing something obvious.


(Jay Pfaffman) #14

Search here for #howto topics for other importers. It’s pretty much the same.


(Frederik L) #15

I did so before asking but I couldnt find it else I wouldnt ask…


(Jay Pfaffman) #16

Here’s one Importing from vBulletin 4


#17

That link tells us to execute this line:

bundle exec ruby script/import_scripts/vbulletin.rb

We’re asking how to do that, because we don’t see a script directory. We only see a scripts directory, and it doesn’t contain the import scripts.


(Jay Pfaffman) #18

Those instructions say to install a development environment. If you had followed them, you’d see the import scripts.

If you want to try with a production docker container, you can enter the container and I think you’ll find it there,but that’s likely to cause other complications.


#19

Thanks, I guess entering the container is the step I was missing. If I do that, then I can see the import scripts. Unfortunately I don’t have access to a Ubuntu or OS X machine, so I was really hoping to do this directly in Docker. But now I’m getting a bunch of other errors. Sigh. This was just a weekend experiment, so maybe I’ll just stop pursuing this option.

Thanks for your help. Feel free to delete these messages since they don’t really contribute to the actual conversation.


#20

Hi all. My question is actually about the thread’s topic, Kunena, not about the vBulletin issue which hijacked this thread :slight_smile:

In the Kunena import script, has anybody tried importing the “Thank yous” that any user can give to other people’s posts? I actually think that’s an important part of the community status of people. It should translate into something in Discourse… badges? hearts? I’m not familiar with Discourse yet.