Upgrade phpBB: A Missão

É uma história longa e triste, e nada a ver com Oracle.

No Fórum da Nerv (o Fórum para que os Alunos de nossos Treinamentos tirem suas dúvidas) eu utilizo o phpBB. Eu utilizo ele pois quando fui procurar um software de Fórum para implementar, vi que era um dos mais utilizados. Usa PHP e MySQL, ou seja, eu estava em casa.

Eu gosto de manter todos meus programas totalmente atualizados, em Desktops e em meus Servidores. Sou fanático quando a isto. Em minha rotina diária eu verifico se há atualizações, e se tiver, GO. Prefiro o risco de uma atualização que me traga problemas (claro que já aconteceu – tento corrigir, e se não der volto) do que ficar vulnerável a um Bug ou falha de segurança conhecida.

Mas eu nunca consegui atualizar o phpBB. Instalei a versão 3.0.12, e da primeira vez que fui atualizar, vi que já tinha que atualizar para a versão 3.1. Achei o procedimento de atualização bem trabalhoso (no WordPress você só precisa de um clique), e deixei pra lá. Quando vi, a versão 3.0 não era mais suportada, e tinha que atualizar para a 3.2. Continuei deixando pra lá.

Mas saiu uma atualização do WordPress (do Blog da Nerv) que precisava da versão 7 do PHP, que não constava no repositório do Oracle Enterprise Linux 7, onde está o WordPress e phpBB (entre outras coisas muito importantes da Nerv). Eu procurei a respeito e podia habilitar repositórios adicionais no OEL 7, mas fiquei com receio de “quebrar” algo.

Agora eu tinha dois programas sem atualização, tinha que dar um jeito. Aproveitei e fiz algo maior ainda, dividi meus serviços em três servidores, e mudei de OEL para Debian. Por que Debian? Porque eu estava muito preguiçoso com OEL, achei que precisava mudar um pouco o sistema operacional para desenferrujar. E Debian é sinônimo de estabilidade, e é um dos Linux originais. Então os três novos servidores foram criados com Debian 9 (eu só ODEIO quanto tenho que instalar algo no Debian e acho o pacote para a versão LILO, STITCH, CATATAU ou sei lá o que. Poxa, eu tenho a VERSÃO NOVE), e meus serviços foram migrados gradativamente para lá. Estou muito feliz com o Debian 9.

Os serviços mais importantes foram bem testados, mas o Fórum foi testado DAQUELE JEITO que vocês sabem: eu vi que ele abria, levantei as mãos para os céus, e segui em frente.

Até que uns dias depois o amigo Kevin disse que não conseguia criar um novo tópico no Fórum. Procurei mais detalhes, e era porque o phpbb 3.0.12 não funcionava “bem” com o PHP 7 (ainda bem que não alterei no OEL 7 lá atrás…). Enfim, chegou a hora de fazer o update do phpBB.

Vi que não podia fazer o Upgrade direto da versão 3.0.12 para a 3.2.28, teria que fazer para a a 3.1 primeiro. Tranquilo, faz sentido, peguei o procedimento de Upgrade, que é BEM detalhado e trabalhoso (baixa isso, desabilita isso, copia aquilo, move isso também…). Era tão detalhado que quase nem faço Backup (pensei que se possui tantos detalhes, pensaram em tudo, então não podia dar errado). Ainda bem que fiz. Tive um erro catastrófico relativo a modelagem de dados – o script de atualização esperava uma coluna na tabela, mas ela não existia (desculpe, não guardei os erros específicos).

Voltei o backup, e instintivamente achei que deveria fazer o Upgrade primeiro para a última versão da árvore 3.0. De novo, o procedimento é bem detalhado e trabalhoso, e pimba: outro erro, de outra coluna, de outra tabela, que era esperada mas não existia.

Procurei nos Fóruns a respeito, achei pessoas com os mesmos erros, e que não tiveram solução.

Tentei então fazer o Upgrade direto da 3.0.12 para a 3.2.28. Encontrei um procedimento não oficial e segui (ora, os oficiais não funcionam, quem sabe este funciona…), igualmente detalhado e trabalhoso, e pimba de novo: outro erro, de outra coluna, de outra tabela, que era esperada mas não existia.

Peguei então meu martelo, chave de fenda, britadeira e decidi fazer a migração dos dados do 3.0.12 para um novo Fórum, instalado do zero, em 3.2.28.

Segue abaixo então o que eu fiz, caso alguém passe pela mesma situação.

Estudei os modelos, e vi que na versão 3.0.12 estas tabelas existem, mas não existem mais na 3.2.28:

phpbb_styles_imageset
phpbb_styles_imageset_data
phpbb_styles_template
phpbb_styles_template_data
phpbb_styles_theme

E na versão 3.2.28 tem esta tabela, que não esistia na 3.0.12.

phpbb_oauth_states

Instalei o Novo Fórum:

# cd /var/www/html/
# rm -rf NewForum/
# unzip phpBB-3.2.8.zip
# mv phpBB3 NewForum
# cp /var/www/html/forum/files/* /var/www/html/NewForum/files/
# chown -R www-data:www-data /var/www/html/NewForum/
$ mysql
mysql> DROP DATABASE NewForum;
mysql> CREATE DATABASE NewForum;
mysql> GRANT ALL PRIVILEGES ON NewForum.* TO 'forum'@'localhost';

Acessei http://nervinformatica.com.br/NewForum/install e segui os procedimentos de instalação indicados.

Removi o diretório de instalação do Novo Fórum.

# rm -rf /var/www/html/NewForum/install/

Removi todos Language Packs e Styles do Fórum 3.0.12 (via phpBB mesmo), e executei os SQLs abaixo:

DELETE FROM NewForum.phpbb_forums;
INSERT INTO NewForum.phpbb_forums ( forum_id,parent_id,left_id,right_id,forum_parents,forum_name,forum_desc,forum_desc_bitfield,forum_desc_options,forum_desc_uid,forum_link,forum_password,forum_style,forum_image,forum_rules,forum_rules_link,forum_rules_bitfield,forum_rules_options,forum_rules_uid,forum_topics_per_page,forum_type,forum_status,forum_last_post_id,forum_last_poster_id,forum_last_post_subject,forum_last_post_time,forum_last_poster_name,forum_last_poster_colour,forum_flags,forum_options,display_subforum_list,display_on_index,enable_indexing,enable_icons,enable_prune,prune_next,prune_days,prune_viewed,prune_freq
) SELECT
forum_id,parent_id,left_id,right_id,forum_parents,forum_name,forum_desc,forum_desc_bitfield,forum_desc_options,forum_desc_uid,forum_link,forum_password,forum_style,forum_image,forum_rules,forum_rules_link,forum_rules_bitfield,forum_rules_options,forum_rules_uid,forum_topics_per_page,forum_type,forum_status,forum_last_post_id,forum_last_poster_id,forum_last_post_subject,forum_last_post_time,forum_last_poster_name,forum_last_poster_colour,forum_flags,forum_options,display_subforum_list,display_on_index,enable_indexing,enable_icons,enable_prune,prune_next,prune_days,prune_viewed,prune_freq
FROM forum.phpbb_forums;
DELETE FROM NewForum.phpbb_users;
INSERT INTO NewForum.phpbb_users (
user_id,user_type,group_id,user_permissions,user_perm_from,user_ip,user_regdate,username,username_clean,user_password,user_passchg,user_email,user_email_hash,user_birthday,user_lastvisit,user_lastmark,user_lastpost_time,user_lastpage,user_last_confirm_key,user_last_search,user_warnings,user_last_warning,user_login_attempts,user_inactive_reason,user_inactive_time,user_posts,user_lang,user_timezone,user_dateformat,user_style,user_rank,user_colour,user_new_privmsg,user_unread_privmsg,user_last_privmsg,user_message_rules,user_full_folder,user_emailtime,user_topic_show_days,user_topic_sortby_type,user_topic_sortby_dir,user_post_show_days,user_post_sortby_type,user_post_sortby_dir,user_notify,user_notify_pm,user_notify_type,user_allow_pm,user_allow_viewonline,user_allow_viewemail,user_allow_massemail,user_options,user_avatar,user_avatar_type,user_avatar_width,user_avatar_height,user_sig,user_sig_bbcode_uid,user_sig_bbcode_bitfield,user_jabber,user_actkey,user_newpasswd,user_form_salt,user_new,user_reminded,user_reminded_time
) SELECT 
user_id,user_type,group_id,user_permissions,user_perm_from,user_ip,user_regdate,username,username_clean,user_password,user_passchg,user_email,user_email_hash,user_birthday,user_lastvisit,user_lastmark,user_lastpost_time,user_lastpage,user_last_confirm_key,user_last_search,user_warnings,user_last_warning,user_login_attempts,user_inactive_reason,user_inactive_time,user_posts,user_lang,user_timezone,user_dateformat,user_style,user_rank,user_colour,user_new_privmsg,user_unread_privmsg,user_last_privmsg,user_message_rules,user_full_folder,user_emailtime,user_topic_show_days,user_topic_sortby_type,user_topic_sortby_dir,user_post_show_days,user_post_sortby_type,user_post_sortby_dir,user_notify,user_notify_pm,user_notify_type,user_allow_pm,user_allow_viewonline,user_allow_viewemail,user_allow_massemail,user_options,user_avatar,user_avatar_type,user_avatar_width,user_avatar_height,user_sig,user_sig_bbcode_uid,user_sig_bbcode_bitfield,user_jabber,user_actkey,user_newpasswd,user_form_salt,user_new,user_reminded,user_reminded_time
FROM forum.phpbb_users;
DELETE FROM NewForum.phpbb_topics;
INSERT INTO NewForum.phpbb_topics (
topic_id,forum_id,icon_id,topic_attachment,topic_reported,topic_title,topic_poster,topic_time,topic_time_limit,topic_views,topic_status,topic_type,topic_first_post_id,topic_first_poster_name,topic_first_poster_colour,topic_last_post_id,topic_last_poster_id,topic_last_poster_name,topic_last_poster_colour,topic_last_post_subject,topic_last_post_time,topic_last_view_time,topic_moved_id,topic_bumped,topic_bumper,poll_title,poll_start,poll_length,poll_max_options,poll_last_vote,poll_vote_change
) SELECT 
topic_id,forum_id,icon_id,topic_attachment,topic_reported,topic_title,topic_poster,topic_time,topic_time_limit,topic_views,topic_status,topic_type,topic_first_post_id,topic_first_poster_name,topic_first_poster_colour,topic_last_post_id,topic_last_poster_id,topic_last_poster_name,topic_last_poster_colour,topic_last_post_subject,topic_last_post_time,topic_last_view_time,topic_moved_id,topic_bumped,topic_bumper,poll_title,poll_start,poll_length,poll_max_options,poll_last_vote,poll_vote_change
FROM forum.phpbb_topics;
DELETE FROM NewForum.phpbb_posts;
INSERT INTO NewForum.phpbb_posts (
post_id,topic_id,forum_id,poster_id,icon_id,poster_ip,post_time,post_reported,enable_bbcode,enable_smilies,enable_magic_url,enable_sig,post_username,post_subject,post_text,post_checksum,post_attachment,bbcode_bitfield,bbcode_uid,post_postcount,post_edit_time,post_edit_reason,post_edit_user,post_edit_count,post_edit_locked
) SELECT 
post_id,topic_id,forum_id,poster_id,icon_id,poster_ip,post_time,post_reported,enable_bbcode,enable_smilies,enable_magic_url,enable_sig,post_username,post_subject,post_text,post_checksum,post_attachment,bbcode_bitfield,bbcode_uid,post_postcount,post_edit_time,post_edit_reason,post_edit_user,post_edit_count,post_edit_locked
FROM forum.phpbb_posts;
DELETE FROM NewForum.phpbb_attachments;
INSERT INTO NewForum.phpbb_attachments (
attach_id,post_msg_id,topic_id,in_message,poster_id,is_orphan,physical_filename,real_filename,download_count,attach_comment,extension,mimetype,filesize,filetime,thumbnail
) SELECT 
attach_id,post_msg_id,topic_id,in_message,poster_id,is_orphan,physical_filename,real_filename,download_count,attach_comment,extension,mimetype,filesize,filetime,thumbnail
FROM forum.phpbb_attachments;
DELETE FROM NewForum.phpbb_forums_watch;
INSERT INTO NewForum.phpbb_forums_watch (
forum_id, user_id, notify_status
) SELECT 
forum_id, user_id, notify_status
FROM forum.phpbb_forums_watch;
DELETE FROM NewForum.phpbb_forums_track;
INSERT INTO NewForum.phpbb_forums_track (
user_id, forum_id, mark_time
) SELECT 
user_id, forum_id, mark_time
FROM forum.phpbb_forums_track;
DELETE FROM NewForum.phpbb_topics_posted;
INSERT INTO NewForum.phpbb_topics_posted (
user_id,topic_id,topic_posted
) SELECT 
user_id,topic_id,topic_posted
FROM forum.phpbb_topics_posted;
DELETE FROM NewForum.phpbb_topics_watch;
INSERT INTO NewForum.phpbb_topics_watch (
topic_id, user_id, notify_status
) SELECT 
topic_id, user_id, notify_status
FROM forum.phpbb_topics_watch;
DELETE FROM NewForum.phpbb_topics_track;
INSERT INTO NewForum.phpbb_topics_track (
user_id, topic_id, forum_id, mark_time
) SELECT 
user_id, topic_id, forum_id, mark_time
FROM forum.phpbb_topics_track;

Acessei http://nervinformatica.com.br/NewForum/ e:

– Tive que reaprovar manualmente todos os Posts;
– Após sair a 1a vez, meu usuário não loga mais. Tive que inserir um usuário direto no banco, para alterar minha senha;
– Após entrar novamente no Fórum, todos Fóruns sumiram menos 1. Mas bastou copiar as permissões;
– Após vários erros com usuários existentes, e muitas tentativas de corrigir, achei que o mais seguro era remover todos os usuários. Portanto, se você tinha um usuário lá no Fórum, terá que se cadastrar novamente. 🙁
– Mas o que considero mais importante, que são os Posts, consegui preservar. 🙂

Depois renomeei o diretório /www/var/forum para /www/var/forum.OLD, e renomeei o o /www/var/NewForum para /www/var/forum, para não precisar alterar nenhum link .

E acabou? Bem, fui acessar hoje o painel de administração do Fórum para escrever e me deparei com isto:

2 comments

    1. Se não fosse você eu estaria feliz até agora, achando que está tudo bem… huehuehue

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.