Apis Networks

Archive for January, 2009

ext4, new backup system, MySQL 5.1, esprit -> apnscp 1.0, RAM containers

Innovation is an important component of apis. Roughly 75% of my workweek is allocated towards research, design, and implementation strategies, which has enabled apis to rollout its own filesystem, control panel, and amenities. Several topics have been brought up through the forums, trouble tickets, and e-mail that bring up several interesting changes for everyone within the community – ext4, new backup system, MySQL 5.1, esprit -> apnscp 1.0 development, privatized Tomcat containers, RAM containers. I would like to take some time today to briefly discuss the state of these changes and bring everyone up to pace with what’s going on around apis.

ext4
ext4 is the filesystem successor to ext3 highlighting improved I/O throughput and journaling capabilities among other benefits. Most importantly, disk consistency check times have significantly decreased, which means quicker server reboots every 6+ months.

An ext4 upgrade had been planned for the end of January, but some users brought up concern with an in-place filesystem upgrade. While I can reassure everyone that the in-place upgrade is seamless – both development and satellite servers are running ext4 – long-term real-world usage still has limited research data. Fedora Core, Red Hat’s desktop Linux distribution, will default to ext4 beginning with release 11 in May. This major distribution will provide ample data on ext4 stability and help assuage fears of filesystem corruption. Not withholding, deferment also provides me with time to coalesce the crude external backup drives into a single PE2950 server… and spend some time with Dell’s PERC 6i RAID controller.

Backup system
As touched on previously, servers now have an external SATA drive attached for backups in the near future. Scalability problems have plagued old backup system, but help is on the way with a distributed filesystem template scheduled after esprit 0.99 is closed out sometime next month. I will spend the brief holiday restructuring filesystem layouts to provide nightly, incremental backups that are also scalable. Filesystem hardlinks, which allow smart jails to operate, have become an impediment as server architecture becomes more efficient and account density grows. Maintaining 45,000+ hardlink relations across 500+ sites through rsync will bring even the stoutest server to its knees. I have visualized the new system as skipping known invariant distribution points, e.g. /usr/bin, /etc, while selectively pulling site-specific configuration files from those directories, then calculating changes through ddsnap in Zumastor. Sounds great on paper, but we’ll wait and see if this provides a space and time-efficient backup system.

MySQL 5.1
5.1 introduces database-level grants for triggers and stored procedures providing users with the ability to write routines and utilize triggers. The first recommended release (GA) introduced a slew of nasty bugs that preclude it from being deployed on the servers. MySQL 5.1’s first GA, 5.1.30, was released on November 14th. Prior to 5.1.30, releases came roughly 30 – 45 days apart; when 5.1.31 comes out is anyone’s guess. Until 5.1’s shortcomings are addressed, 5.0 will remain the active distribution.

apnscp 1.0
apnscp esprit 0.99 is slowly approaching the finish line by replacing the few remaining Ensim applications with its very own version. An htpasswd driver (Manage Users/Manage Groups/Protect Directories under “Web Server”), Site Summary, and SSL Certificates are the few applications that remain. apnscp 0.99 has had one goal from the start, to free itself from Ensim and provide a standalone UI, which is why I never used version “1” to denote the current iteration of the control panel.

While esprit’s focus has been separation and getting its feet off the ground, apnscp 1.0 will focus on usability and design. I know the current design is terrible, no need to remind me. A new reporting system is the first planned feature for apnscp 1.0, designed to facilitate user feedback and bug reporting. I want to encourage everyone ahead of time to think of tie-ins, such as adding a domain in MDM includes the option to setup logfiles, or minor changes like moving the remove/delete operations to the far-right. Shoot me an e-mail at matt+feedback@apisnetworks.com whenever something comes to mind on how it can be made better and easier to use. All of the suggestions will be factored into apnscp 1.0’s design… the dashboard, a particular application, application titles, application grouping— you name it. If you feel it’ll improve the experience for everyone, voice it regardless of how over the top it sounds. Nit-pick as much as you would like! I nit-pick my own design (this is possibly why I’m so slow). Don’t be afraid to step on my toes by saying x sucks or y looks ugly, because I will likely agree. Send your feedback on the control panel to matt+feedback@apisnetworks.com.

RAM Containers (Tomcat, JBoss, MySQL 6, anything)
Touched on briefly a few months ago, privatized Tomcat containers are coming, but up until recently how was still being researched. More specifically, how to partition process RAM utilization in an efficient manner was the stumbling block. Plenty of italicized words I know, but for good reason— emphasis. I stumbled across control groups (cgroups), which can be leveraged through a custom PAM module to attach shell processes to a site’s cgroup RAM container. An inotify daemon can in turn monitor the cgroups for memory overages and either warn or kill offending processes that exceed the memory quotas. RAM accounting allows carte blanche with services, including the option to run your own Tomcat/jBoss servers with the option to upgrade RAM on your plan. This feature will be launched on the Basic and higher packages once the bugs have been ironed out. I have a solid process of how to implement RAM accounting, which is a big step towards manifesting this new feature. Next, a daemon needs to be written and tied into the control panel. I am looking at an early March deployment for RAM containers.

- Matt

Comments off

 

esprit Update: Several enhancements and changes

A new esprit update has been published to the servers at this time introducing a slew of changes – 32 in all aimed at either cleaning up browser-specific problems or introducing minor enhancements.  As a reminder, please report any odd behavior through the Trouble Ticket section of the control panel (subject “Control Panel Bug”).  An application will be introduced to facilitate bug reports in esprit 1, but that’s another story for another time after esprit 0.99 is finished.

  • Added: SSL module
  • Added: optional filter argument to Web::list_subdomains() to restrict global or local subdomains (Web)
  • Added: create multiple mailboxes on e-mail creation (Manage Mailboxes)
  • Added: complement convert_absolute_relative() with convert_relative_absolute() to flip between absolute and relative paths (File)
  • Added: subdomains filter (List Subdomains)
  • Added: include “entry_domain” session variable to track domain used on login (apnscp Session)
  • Added: split_hostname(), ip_address() helper functions (Site)
  • Fixed: replace input type=image with button (List Subdomains, Manage Users, SOAP Keys)
  • Fixed: use single-user mailbox lookup to determine mailbox rules (Add User)
  • Fixed: match “none” grace value in quota output (REGEX)
  • Fixed: 0xa0 passed with user edits with IE (Manage Mailboxes)
  • Fixed: buttons incorrectly passed during form postback in IE6 (Manage Users, Trouble Tickets)
  • Fixed: excluded primary domain as possible transport  (Mailer Table)
  • Fixed: billing function fix-up, failed connections now return error instead of fatal error (Billing History, Change Account Billing, Referral Tree)
  • Fixed: renamed Referral Tree to Referrals (Referrals)
  • Fixed: add_transport/remove_transport provisions MX records as necessary (Email)
  • Fixed: include domain in <list>-request+<domain> Majordomo alias (Majordomo)
  • Fixed: strip whitespace from email user/domain in add_mailbox() (Email)
  • Fixed: change list_subdomains() to detect dangling subdomains and parse non-existent paths (Web)
  • Fixed: check /etc/httpd/conf/siteN.ssl/ before running cat to avoid non-zero exit code (Ensim)
  • Changed: Page::add_error() forces error display regardless of postback status (Page Container)
  • Changed: do not load page on non-postback errors (Page Container)
  • Changed: transform mailbox field on type change (Manage Mailboxes)
  • Changed: sort subdomains first by local/global, then by name (List Subdomains)
  • Changed: limit possible Mailer Table entries to defined local/global subdomains active on account (Mailer Table)
  • Changed: upgrade jQuery to 1.3.0
  • Changed: load CSS before JavaScript to as jQuery 1.3 no longer guarantees post CSS processing
  • Changed: convert sanitize(), convert_absolute_relative() into static functions (File)
  • Changed: upgrade blockUI to 2.14
  • Removed: display_errors directive is set by .htaccess (apnscp Core)
  • Removed: clean-up backend wrapper functions for create_symlink(), rename()

Comments off

 

esprit Update: User Management revamp, enhancements

A new esprit update has been pushed to the servers at this time aimed at closing out the remaining Ensim pages from the User category, “User Management” and “Set User Defaults”.  This leaves four Ensim pages in the control panel GUI, “Site Summary”, “Protect Directories”, “Manage Users/Groups” (htpasswd interface), and “SSL Certificates”.  Once these remaining pages are de-Ensimized, esprit 0.99 can be forked and work on esprit 1 will begin.   If I can adhere to a development schedule, esprit 1 work will begin in February, approximately 2 years after a then-rough esprit 0.99 was introduced as the replacement control panel.

  • Added: “Manage Users” (esprit version)
  • Added: “Set User Defaults” (esprit version)
  • Added: postback callbacks (Page_Container)
  • Fixed: glob warning on ACL pattern match throws warning (File)
  • Fixed: checkForErrors() renamed to errors_exist() (Change Billing Information)
  • Fixed: white background for file type input element masks filename (File Manager)
  • Fixed: warn on existing log profile in add_log_rotation_profile() (Logs)
  • Fixed: move bind() to private __bind() function, bind() implies $do_bind is true (Page_Container)
  • Fixed: get_payment_information() should prefer payment data over subscription data when payment method is not check (Billing)
  • Fixed: zombie workers (ListenerService)
  • Fixed: escape “user” field in list_mailboxes() (Email)
  • Changed: enhanced List Subdomains/Add Subdomain
  • Changed: detect implicit -> explicit bind() call resulting in duplicate error messages until explicit bind() calls are cleaned-up
  • Changed: drop base64-encode transformation in put_file_contents(), get_file_contents() (File)
  • Changed: enhance bulk mailbox controls, disable/enable multiple accounts, separate disabled e-mail accounts from enabled
  • Changed: use multiselect for local forwarded users (Manage Mailboxes)
  • Changed: replaced directory auto-complete with file browser (Add Subdomain, File Manager)
  • Changed: move get_users() lookup to getpwnam() (User)
  • Changed: replace Ensim /etc/usertemplate with esprit version, reset defaults (Set User Defaults)
  • Changed: use explicit global/local subdomain naming choices (Add Subdomain)
  • Removed: 640px bounding box from esprit pages
  • Removed: sigchild handler from SAPI PHP5 module

- Matt

Comments off