Print this page

News

2019-03-03 12:58:21

5210R: Development Diary #2


Some more updates about the progress of the BlueOnyx 5210R development.

Category: Development
Posted by: mstauber

I'd like to take a moment to file you in on the progress of the BlueOnyx 5210R development for the upcomming CentOS 8. In part one of the progress report I already had mentioned some of the challenges I've encountered.

Since then I've managed to identify and solve all dependency problems, but it was quite a mess. It has lead me to believe that the RedHat 8 beta isn't a complete OS yet and that I hope that the final product will be much more fleshed out. There were simply so many essential RPMs missing that it was mind-boggling.

In ordert to build the roughly two dozen "extra" RPMs that BlueOnyx has as dependency (such as perl-Quota, imapsync, perl-Unix-ConfigFile or perl-JSON) it was necessary to build 287 other dependency RPMs from scratch or from other sources such as Fedora Core 29, 28 or 27. Many of which had other complex dependencies. All in all I had to build RPMs for 187 Perl modules, which was outright ridiculous.

Some of them just flat out refused to build, such as perl-Quota, as RedHat 8 had some fundamental changes. But even these problems could eventually be overcome.

Finally I was able to build RPMs for all BlueOnyx modules, although some of them required changes to their dependencies as they're now differently named.

However, I also ran into issues with the 7.2.11 that RedHat 8 beta ships with. It was missing some essential modules such as php-imap and mcrypt support. Now mycrypt has been deprecated since PHP-7.1, but luckily there is a PECL version of it still available for PHP-7.2, so I built an RPM containing just that. The only remaining unfulfilled dependencies are ImageMagick and php-imap, the latter of which I hope to replace with a PECL version, too. ImageMagick? We can do without for now.

With this dependency nightmare finally over I then decided to split the 5210R YUM repository into three parts:

This split allows me to enable YUM repository protection for the main GUI related YUM repository and have the "OS" repository provide anything OS related such as exotic dependencies that the OS doesn't yet provide. Should someone in the future enable EPEL or other third party repositories, then there is a lesser chance that something breaks catastrophically. Also: If RedHat or CentOS finally provide dependencies that the RHEL8 beta currently doesn't has, then it will be easier to drop or replace the supplemental RPMs that I had to provide so far.

Then I installed all required RPMs and tried out the GUI.

Unsurprisingly I wasn't greeted by the login page, but a vast amount of PHP related errors. After all: The whole GUI code was just PHP-5.4 ready and PHP-7.2 is several major generations newer. Even the CodeIgniter framework we use was still 2.2 and needed to be upgraded to the latest version to make it PHP-7.2 ready. This took the better part of this week, as I also had extensively modified the old CodeIgniter with several optional modules as well as some BlueOnyx related add-ons.

That upgrade alone didn't give me a working GUI, though. The most common error message I still see is "Methods with the same name as their class will not be constructors in future versions of PHP."

The reason for that is one of these fundamental changes in PHP. Before we had code like this:

Now it rather needs to be like this:

This change looks trivial, but it has far reaching consequences. There isn't a single BlueOnyx Library, Class or Helper-Script that I don't have to rework. Many of which have complex dependencies with each others. Just to have the GUI login page render without errors I had to touch up around 30 of them. There is also the change that CodeIgniter "pages" (PHP Classes of their own) now must have a capital leading letter as their filename, which we haven't had before. So in essence I need to go with a fine toothed comb trough all these assorted GUI libaries, classes and helpers:

]# tree libraries/ modules/ helpers/ libraries/
|-- ArrayPacker.php
|-- AutoFeatures.php
|-- BXBrowserLocale.php
|-- BXCollator.php
|-- BXEncoding.php
|-- BxPage.php
|-- CCE.php
|-- Capabilities.php
|-- CceClient.php
|-- CceError.php
|-- ConfigFile.php
|-- DirTree.php
|-- EncodingConv.php
|-- Error.php
|-- I18n.php
|-- I18nNative.php
|-- MY_Form_validation.php
|-- PasswordGenerator.php
|-- Product.php
|-- ReportHelper.php
|-- ServerScriptHelper.php
|-- StupidPass.php
|-- System.php
|-- UIExtension.php
|-- carabiner.php
|-- cssmin.php
|-- curl.php
|-- index.html
|-- jsmin.php
|-- stupid-pass
|   |-- LICENSE.txt
|   |-- README.md
|   |-- StupidPass.class.php
|   |-- StupidPass.default.dict
|   `-- test.php
`-- uifc
    |-- AddButton.php
    |-- BXDivider.php
    |-- BXLocale.php
    |-- BackButton.php
    |-- Bar.php
    |-- BarGraph.php
    |-- Block.php
    |-- Boolean.php
    |-- Button.php
    |-- ButtonContainer.php
    |-- CancelButton.php
    |-- CompositeFormField.php
    |-- CountryName.php
    |-- DetailButton.php
    |-- DirTree.php
    |-- DomainName.php
    |-- DomainNameList.php
    |-- EmailAddress.php
    |-- EmailAddressList.php
    |-- EmailAliasList.php
    |-- FancyButton.php
    |-- FileUpload.php
    |-- Form.php
    |-- FormField.php
    |-- FormFieldBuilder.php
    |-- FreeSaveButton.php
    |-- FullName.php
    |-- GeoIP.php
    |-- HtmlComponent.php
    |-- HtmlComponentFactory.php
    |-- HtmlField.php
    |-- ImageButton.php
    |-- ImageLabel.php
    |-- InetAddress.php
    |-- InetAddressList.php
    |-- Integer.php
    |-- IpAddress.php
    |-- IpAddressList.php
    |-- Label.php
    |-- LinkButton.php
    |-- MacAddress.php
    |-- MailListName.php
    |-- ModifyButton.php
    |-- MultiButton.php
    |-- MultiChoice.php
    |-- NetAddress.php
    |-- NetAddressList.php
    |-- NetMask.php
    |-- Number.php
    |-- Option.php
    |-- Page.php
    |-- PagedBlock.php
    |-- Password.php
    |-- PieChart.php
    |-- Radio.php
    |-- RawHTML.php
    |-- RemoveButton.php
    |-- SaveButton.php
    |-- ScrollList.php
    |-- SearchButton.php
    |-- SetSelector.php
    |-- SimpleBlock.php
    |-- SnmpCommunity.php
    |-- StatusSignal.php
    |-- Style.php
    |-- Stylish.php
    |-- Stylist.php
    |-- TextBlock.php
    |-- TextField.php
    |-- TextList.php
    |-- TimeStamp.php
    |-- TimeZone.php
    |-- UninstallButton.php
    |-- Url.php
    |-- UrlButton.php
    |-- UrlList.php
    |-- UserName.php
    |-- VerticalCompositeFormField.php
    `-- deprecated
        |-- BarGraph.php
        |-- BlanketDomainList.php
        |-- ButtonContainer.php
        |-- ClassicBlock.inc
        |-- ClassicList.inc
        |-- Graph.php
        |-- GroupName.php
        |-- IntRange.php
        |-- MacAddressList.php
        |-- MultiFileUpload.php
        |-- PlainBlock.php
        |-- SimpleText.php
        `-- UserNameList.php
modules/
`-- base
    |-- alpine
    |   |-- config
    |   |-- controllers
    |   |-- models
    |   `-- views
    |-- am
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- amSettings.php
    |       |-- amStatus.php
    |       |-- cpu_details.php
    |       `-- memory_details.php
    |-- apache
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- adm_amdetails.php
    |       |-- apache.php
    |       |-- fpm_amdetails.php
    |       `-- web_amdetails.php
    |-- api
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- apiconfig.php
    |       `-- apiindex.php
    |-- backupcontrol
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       `-- desktopcontrol.php
    |-- console
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- ablsettings.php
    |       |-- ablstatus.php
    |       |-- console_logfile_viewer.php
    |       |-- console_logfiles.php
    |       |-- consolelogins.php
    |       |-- consoleprocs.php
    |       |-- events.php
    |       `-- whois.php
    |-- disk
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- groupDiskUsage.php
    |       |-- serverDiskUsage.php
    |       `-- userDiskUsage.php
    |-- dns
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- dns_add.php
    |       |-- dns_amdetails.php
    |       |-- dns_soa.php
    |       |-- dnsmanager.php
    |       |-- primarydns.php
    |       |-- secondarydns.php
    |       |-- secondarydnsmod.php
    |       |-- vsiteDNS.php
    |       |-- vsite_dns_add.php
    |       `-- vsite_dns_soa.php
    |-- email
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- blacklist.php
    |       |-- email_amdetails.php
    |       |-- emailsettings.php
    |       `-- secondarymx.php
    |-- ftp
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- ftp_amdetails.php
    |       |-- ftpclient.php
    |       |-- ftpmanager.php
    |       `-- vsiteFTP.php
    |-- gui
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- AuthorizationRequired401.php
    |       |-- Forbidden403.php
    |       |-- InternalServerError500.php
    |       |-- NotYetDone.php
    |       |-- PageNotFound404.php
    |       |-- check_password.php
    |       |-- datepicker.php
    |       |-- fullcalendar.php
    |       |-- gui.php
    |       |-- pluginsmin.php
    |       |-- processFrame.php
    |       |-- processing.php
    |       |-- validation.php
    |       |-- workFrame.php
    |       `-- working.php
    |-- istat
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       `-- istatconfig.php
    |-- login
    |   |-- config
    |   |   `-- routes.php
    |   |-- controllers
    |   |   `-- Login.php
    |   |-- models
    |   |   `-- login.php
    |   `-- views
    |       |-- login_view.php
    |       `-- login_view_solo.php
    |-- mailman
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- mailmanList.php
    |       |-- mailmanMod.php
    |       |-- mailman_amdetails.php
    |       `-- mailmanmanager.php
    |-- mysql
    |   |-- config
    |   |   `-- routes.php
    |   |-- controllers
    |   |   |-- mysql_amdetails.php
    |   |   |-- mysqlconfig.php
    |   |   |-- mysqlserver.php
    |   |   `-- vsiteMySQL.php
    |   `-- models
    |       `-- dummy.file
    |-- network
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- aliasModify.php
    |       |-- ethernet.php
    |       |-- ethernetDeploy.php
    |       |-- ethernetIframe.php
    |       |-- network_details.php
    |       |-- pooling.php
    |       |-- poolingModify.php
    |       |-- routeModify.php
    |       `-- routes.php
    |-- nginx
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       `-- nginx_amdetails.php
    |-- phpmyadmin
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- phpmyadminUser.php
    |       |-- pusher.php
    |       |-- signon.php
    |       `-- signon_handler.php
    |-- phpsysinfo
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       `-- sysinfo.php
    |-- power
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       `-- poweroptions.php
    |-- raid
    |   `-- controllers
    |       `-- disk_integrity_amdetails.php
    |-- remote
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- console.php
    |       |-- noaccess.php
    |       `-- remote_amdetails.php
    |-- shell
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- personalSSH.php
    |       |-- shellconfig.php
    |       `-- vsiteShell.php
    |-- sitestats
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- logconfig.php
    |       |-- statSettings.php
    |       |-- summary.php
    |       |-- summaryEmail.php
    |       `-- webalizer.php
    |-- snmp
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- snmp_amdetails.php
    |       `-- snmpconfig.php
    |-- ssh
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       `-- ssh_amdetails.php
    |-- ssl
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- caManager.php
    |       |-- createCert.php
    |       |-- letsencryptCert.php
    |       |-- siteSSL.php
    |       `-- uploadCert.php
    |-- subdomains
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- subconfig.php
    |       |-- vsiteAddSub.php
    |       |-- vsiteDelSub.php
    |       `-- vsiteSub.php
    |-- support
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- SOSReport.php
    |       |-- bugreport.php
    |       |-- supportSettings.php
    |       `-- ticket.php
    |-- swupdate
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- autoinstall.php
    |       |-- checkHandler.php
    |       |-- checkupdates.php
    |       |-- download.php
    |       |-- downloadHandler.php
    |       |-- license.php
    |       |-- manualInstall.php
    |       |-- newSoftware.php
    |       |-- news.php
    |       |-- removeHandler.php
    |       |-- rsscron.php
    |       |-- settings.php
    |       |-- shop.php
    |       |-- softwareList.php
    |       |-- status.php
    |       |-- statusFrame.php
    |       |-- uninstallHandler.php
    |       |-- updates_amdetails.php
    |       |-- yum.php
    |       `-- yumupdate.php
    |-- system
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       `-- sysinfo.php
    |-- telnet
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       `-- telnet_amdetails.php
    |-- time
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       `-- timeconfig.php
    |-- user
    |   |-- config
    |   |   `-- routes.php
    |   |-- controllers
    |   |   |-- imapSyncLog.php
    |   |   |-- personalAccount.php
    |   |   |-- personalEmail.php
    |   |   |-- userAdd.php
    |   |   |-- userDefaults.php
    |   |   |-- userDel.php
    |   |   |-- userList.php
    |   |   `-- userMod.php
    |   `-- views
    |       `-- personalAccount_view.php
    |-- vsite
    |   |-- config
    |   |   `-- routes.php
    |   `-- controllers
    |       |-- adminList.php
    |       |-- fileOwner.php
    |       |-- manageAdmin.php
    |       |-- phpconfig.php
    |       |-- template.php
    |       |-- vsiteAdd.php
    |       |-- vsiteDel.php
    |       |-- vsiteEmail.php
    |       |-- vsiteList.php
    |       |-- vsiteMod.php
    |       |-- vsitePHP.php
    |       |-- vsiteWeb.php
    |       `-- vsite_amdetails.php
    `-- wizard
        |-- config
        |   `-- routes.php
        |-- controllers
        |   |-- Wizard.php
        |   `-- wizard_with_ethStuff.php
        `-- views
            `-- wizard_view.php
helpers/
|-- amdetail_helper.php
|-- blueonyx_helper.php
|-- bxapi_helper.php
|-- drives_helper.php
|-- index.html
|-- msgfmt-functions.php
|-- msgfmt-functions_helper.php
|-- msgfmt.php
|-- network_common_helper.php
|-- password_helper.php
|-- raid_helper.php
|-- selector_helper.php
|-- uifc_ng_helper.php
`-- updatelib_helper.php

156 directories, 457 files

As you can see: That will take a bit. It's not a monumental coding task such as going from 510XR to 520XR when we went from "the old GUI" to the current one, but it's quite a chunk of work as there are other PHP API changes as well that I need to identify and fix.

Beyond that: Even on the Perl side there are a few issues, as Perl v5.26 comes with some API changes beyond what we were previously used to. In many cases were still using POSIX and instantiate it with 'isalpha', which is now deprecated. This is easy to fix, but it also adds to the workload.

I'll not make any predictions about when I'll be done with that, but it'll take a few weeks for sure.


Previous page: API Documentation
Next page: Downloads