Archive for category Linux

How to force mountd to use a static port on Red Hat

So I’ve been working with a very strict firewall on an AIX host which is mouting an NFS share on Red Hat 5.3 hosts and since NFSD on Red Hat utilises the RPC protocol (port 111) and NFS (port 2049) which are static, it unfortunately also uses rpc.mountd (aka mountd) which (by default) doesn’t run using a static port, instead, every time it starts up, it asks the RPC portmap service for a free port number, and uses that.

I just couldn’t have this happening on Red Hat, since the AIX firewall is locked down as tight as can be, with even anomalous outbound tcp/ack’s being disallowed. I know that the portmap service gets its free port numbers from (among other sources) /etc/services so I decided to grab the current port number that mountd was running on…

rpcinfo -p | grep mountd

and make an entry into /etc/services in the hope that rpc.mountd would see the mountd entry and automatically use that port number, and only that port number, such an example entry:

mountd          672/tcp                         # Rob's Edit - binds mountd to a static port
mountd          672/udp                         # Rob's Edit - binds mountd to a static port

I restarted portmap and nfs, and ran rpcinfo again…

service portmap restart
service nfs restart
rpcinfo -p | grep mountd

… and lo-and-behold rpc.mountd had binded to the static port specified.

, ,

No Comments


Note to self… co-incidences in IT DO happen!

Ok, so on Friday I was working from home while recuperating after some surgery (don’t ask). I’m currently working on a large migration project which is really high priority time-scale wise, which is why I was working from home, since I, nor the company I work for can really afford for me to be away from this project for any length of time. So I’m working on a large IBM RS6000 AIX wide node where I need to create an NFS share to their new Red Hat based platform, this required a minor change to the genfilt / mkfilt rules on AIX to allow the new systems to access the NFS shares. I made the one line change and reloaded the firewall on the system, unfortunately this made NIS/YP fault and stop responding, not such a big deal, except that this node is also a NIS server, which meant that users who were authenticating from a frontend running on a thin node were unable to, which started to cause issues quickly, fortunately existing users weren’t affected, however newly connecting users weren’t getting on.

ibm_rs6000 As soon as I’d reloaded the firewall I could see that NIS had failed (inexplicably) and backed out the change, I had to get NIS back online, and reloading the YP services wasn’t working. With the change backed out, I reloaded the firewall again, this time mkfilt just wasn’t having it. The syntax was fine, but the firewall was now blocking access to all services. Remember, I’m working from home, via an SSH session to a host at work with rlogin access to the wide. As soon as the firewall started blocking traffic my remote session died and I was unable to access it. FUCK!

I get on the phone straight away to the DC and asked a colleague of mine, Brian, to re-run the firewall script from the control workstation, which has a direct, non-IP connection to the wide. About 10mins later I get a call saying he’s been able to restart the firewall ok, and I can access the server from my connection again. Phew. NIS is still down though and still refuses to start-up cleanly. A reboot is in order. By this time, I’m pretty much ready to head into the DC so I can be hands-on with the kit when needed. Brian gets in touch with the client and co-ordinates a graceful shutdown of the databases before we initiate a standard reboot.

By the time I arrive at the DC (15mins away by car fortunately), we’ve managed to arrange “unscheduled maintenance” time, and we bounce both the nodes. Everything comes back up perfectly, and users can log back in just fine. We notify the client, and they can see everything’s ok, the databases have come up and everything’s back the way it was.

I get into finding out what caused NIS and the second firewall reload to spanner completely when we get another call from the company saying that LPR print queue jobs are not being passed from the thin node to a 3rd server which is running Caldera Open Linux linux (yeah, I know!). This Caldera box is running Tarantella which provides client-based printing. Essentially, users printed from a terminal on the thin-node, which is mapped to a remote print queue on the Caldera server, and the Tarantella server then maps the user’s printer to their print queue on the Caldera server. Essentially allowing (in a very round-about way) client-based printing from a terminal. For turn of the century stuff this was quite advanced, since there was no way to do this dynamically, from a web-based (HTTPS) client, and without setting up static routed print-queues on the node.

_643711_caldera_linux23_150 So that’s the background. Now, when we heard about this printing issue, which had been an intermittent problem since the platform had been introduced, but this had normally been resolved by a simple reboot of the Caldera server. We decided that since the nodes had been down, this had likely caused a bottleneck between the servers and that Caldera needed a reboot in order to enable the bottleneck to clear and allow the print queues to start moving again. We bounce the box and the queues still are being held on the thin node. FRAK! I know beyond a doubt that the issue isn’t software firewall related, since my minor change (a) wouldn’t have affected port 515 communications and (b) the firewall is running ok. My boss, John, had become involved around the time we rebooted both the nodes, as he was interested to know what was going on. After being brought up to speed he was convinced that this was a firewall related issue, since the initial cause was firewall related, and that I’d asked our network manager to add new rules to allow NFS between the new and old platforms. I knew it was highly unlikely that the problem was a firewall one since the changes had been backed out, and the system was in it’s normal, default configuration but  John felt that the timing was just too close for it to be a coincidence with anything other than a firewall issue. It took us a while, looking at the firewall rules in place, to see if any hits were being matched on the Cisco’s (which they weren’t), telnetting to ports etc all of which were fruitless. It was obvious in my mind that there was something on the Caldera box which was not allowing the LPD daemon to respond properly. After looking through the tarantella logs I checked the /var/log/messages log and saw that the LPD daemon faulted at start-up with the error “not enough disk space”. That old chestnut.

After a little more digging, it turned out that the / partition, having only 2GB of space had slowly been filled up by apache access and error log files since the early 2000’s and had caused the disk to become full. Monitoring hadn’t been set up to check disk space usage, which beggared my belief, but there it is. The apache logs had filled the last of the available disk space at pretty much the exact same time as the AIX system had gone down. All of the time spent wasted checking firewall rules and all the printing problem was related to was a frakking simple thing – disk space.

So the moral of this story is, blind co-incidence DOES happen in this profession, and it’s something that I’ll definitely remember for the rest of my career!

, , , ,

No Comments


Oracle’s Unbreakable Linux not denting Red Hat – CNET News

I just read an interesting article about Red Hat and Oracle’s rip-off (literally) clone, “Unbreakable Linux”

<3 “Red Hat is the trusted brand in Linux, and for good reason. Red Hat’s support policies demonstrate an understanding of what Linux customers require: mission-critical support for mission-critical deployments.”

Article: Oracle’s Unbreakable Linux not denting Red Hat | The Open Road – CNET News.

,

No Comments


KDE 4.2 on Fedora 10

So I noticed the Fedora project have pushed out KDE 4.2 after its release at the end of Jan and I have to say, after running the betas for a wee while I’m quite impressed that it was out of the door so quickly after its release. I’ve been hanging out in #fedora-kde on freenode for a couple of weeks to track the progress of the fedora builds prior to the actual release. I doff my cap to those fair chaps for doing a great job packaging the betas and really keeping on top of the releases.

After having set up my .kde settings from 4.1 and then progressing through the betas my .kde folder was unsurprisingly twisted, so this afternoon I cleared it down and re-did my desktops as they were previously.. this is the result…

KDE 4.2

, ,

No Comments


HOWTO: Install Subversion, Ruby on Rails and Redmine on CentOS5 (& RHEL5)

[Updated 3rd June 2009]

So since Assembla changed it’s strategy and forced a monetised service or your once private projects were to become public after some date in February I decided to set up my own subversion repos / web management interface.

I never really used the Assembla service to its full potential however and all I really needed was a basic SVN setup with a webinterface to show the diffs in an eye-friendly format. The only two real choices were Trac and Redmine. I’d already used Trac on Assembla and countless other project sites so I was more drawn to Redmine due to it’s good interface design (imo, the Trac interface looks like it’s stuck together with Lego pieces), its features are more integrated and well, I fancied a change. The only problem was that Redmine runs on Ruby on Rails which I’ve heard very bad things about. So I decided to take a plunge and find out wtf the hassle was all about. It turns out there weren’t any up-to-date, well written and well maintained HOWTO’s out there detailing how to get a functional RoR environment configured on CentOS / RHEL. So I wrote my own (after hitting several brick walls)…

HOWTO: Install Subversion, Ruby on Rails and Redmine on CentOS5 (& RHEL5)

NOTES

  • This HOWTO is written for CentOS 5.2 [updates for 5.3 in purple text]
  • Replace [FQDN] with either your IP address or the hostname (or FQDN) which you’ll be using to access the interface.
  • Replace [user] with the username under whom’s home directory the Subversion repository database will be located. e.g. /home/[user]/svn-repos
  • This HOWTO will be using the following variables:
  • You already have the “httpd” (apache) package installed
  • You will be running apache as the user ‘apache’
  • The subversion repository root folder will be under /home/[user]/subversion/
  • The vhost’s folder locationg will be /var/www/svn
  • The subversion repository to be created will be called ‘example-repo’

Install and set up Subversion

yum install mod_dav_svn subversion

Add the group [user] to the user apache and make the subversion base URL readable and writable…

usermod -aG [user] apache
chmod g+x /home/[user]
mkdir /home/[user]/subversion
chmod g+rwx /home/[user]/subversion
chown -R [user]:[user] /home/[user]/subversion

Make the web directory:

mkdir /var/www/svn
chown apache.apache /var/www/svn

Put the following into /etc/httpd/conf.d/svn.conf (this is for a sub-repo called ‘example-repo’)

NameVirtualHost *:80
<VirtualHost *:80>
        DocumentRoot "/var/www/svn"
        ServerName [FQDN]
        <Location /example-repo>
                DAV svn
                SVNPath /home/[user]/subversion/example-repo
                AuthType Basic
                AuthName "Subversion repo"
                AuthUserFile /var/www/passwd
                Require valid-user
        </Location>

        <Directory "/var/www/svn">
        allow from all
        Options +Indexes
        </Directory>
</VirtualHost>

Add an HTTP auth user…

htpasswd -cm /var/www/passwd [user]

Create a proper SVN repository

cd /home/[user]/subversion
su [user] -c "svnadmin create example-repo"

Import any SVN repos by doing:

su [user] -c "svnadmin load example-repo < /path/to/repo/dump/file"

Make sure the permissions are correct

chmod g+rwx /home/[user]/subversion
chown -R [user].[user] /home/[user]

Install Ruby on Rails

*NOTE: Ruby on Rails installation requires the EPEL yum repository (at time of writing).

su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm'

Let’s get Ruby up and running first… [NOTE: not on an SElinux environment cba with that]

yum install httpd httpd-devel apr make gcc-c++ mysql-server mysql ruby ruby-devel ruby-docs ruby-ri \
ruby-libs ruby-mode ruby-tcltk ruby-irb ruby-rdoc fcgi fcgi-devel mod_fcgid rubygems subversion-ruby

Now we’ll install passenger (aka mod_rails)

gem install passenger
passenger-install-apache2-module

Create and insert this text into /etc/httpd/conf.d/rails.conf (or alternatively edit the existing svn.conf created when we set up subversion)
NOTE:

  • The below configuration is specific to the installation of redmine (hence the DocumentRoot)
   LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/ext/apache2/mod_passenger.so
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.6
   PassengerRuby /usr/bin/ruby

NameVirtualHost *:80

   <VirtualHost *:80>
     ServerName 192.168.10.17
     DocumentRoot /var/www/rails/redmine/public
   </VirtualHost>

Now on to Redmine itself

Get Redmine 0.8 from http://www.redmine.org/wiki/redmine/Download

cd /usr/src
svn co http://redmine.rubyforge.org/svn/branches/0.8-stable redmine-0.8
mkdir /var/www/rails/
cd /var/www/rails/
cp -r /usr/src/redmine-0.8/ redmine/
chown -R apache.apache redmine
cd redmine

Create a clean backup of source files

tar czf Redmine0.8-clean.tar.gz .

Initialise mySQL:

service mysqld start

To secure mysql:

mysql_secure_installation

Create a mysql database for redmine…

mysql -u<username> -p

At the prompt enter:

create database redmine character set utf8;

Quit with:

quit

Copy the example database file to the “live” location

cd /var/www/rails/redmine
cp config/database.yml.example config/database.yml

Enter the appropriate settings for the [production] section ensuring that host is set to 127.0.0.1

vim /var/www/rails/redmine/config/database.yml

Set up email

cd /var/www/rails/redmine
cp config/email.yml.example config/email.yml

Enter the appropriate settings for the [production] section ensuring that “address” is set to the IP address of the SMTP host

vim /var/www/rails/redmine/config/email.yml

Install rails for redmine using gem…

cd /var/www/rails/redmine/app/
gem install -v=2.1.2 rails

Import the redmine database into the live database specified in the above config file

cd /var/www/rails/redmine/app/
rake db:migrate RAILS_ENV="production"

Install default configuration data in database (this is entirely optional, but recommended).

cd /var/www/rails/redmine/app/
rake redmine:load_default_data RAILS_ENV="production"

Bring up the testing webserver, once loaded check your config by browsing to http://[FQDN]:3000

cd /var/www/rails/redmine/
ruby script/server -e production

Make sure your apache config file edits are ok and that the services will start at boot by doing:

service httpd configtest
service httpd restart
chkconfig httpd on
chkconfig mysqld on

[Optional:] Add the following to your crontab which will create a database backup in the /home/[user] directory

/usr/bin/mysqldump -u <user> -p <password> <database> | gzip > /home/[user]/redmine_`date +%y_%m_%d`.gz

Make your subversion server configuration accessible to redmine by doing the following:

mkdir /etc/subversion
cp -r /root/.subversion/* /etc/subversion/
vim /var/www/rails/redmine/lib/redmine/scm/adapters/subversion_adapter.rb

Change the line:

SVN_BIN = "svn"

to:

SVN_BIN = "svn --config-dir /etc/subversion"

Then restart apache:

service httpd restart

Wiki entry is here

, , , , , ,

6 Comments


Dropbox + eXtplorer: A better web interface

Ok, so I found myself online at a workstation without admin access the other day and needed desperately to edit a file on my Dropbox account, it was just a plain text file and the edit was only small, so I set about finding a way of doing it, and came up with this as a temporary solution until Dropbox have a fully functional, released API…

preview image

P.S. The error was actually caused by a non-standard character in the filename (+). I’ll be filing a bug with eXtplorer for that :)

Documentation (Wiki) can also be found here.

NOTE: Replace [user] with the username under which the Dropbox folder is located.
NOTE: Replace [FQDN] with either your IP address or the hostname (or FQDN) which you’ll be using to access the interface.

NOTE: This HOWTO assumes that you will be running apache as the user ‘apache’ and that you have already set up your Dropbox account syncing to your /home/[user]/Dropbox folder

To get Dropbox running with apache and extplorer you need to get the following packages:

yum install php httpd

Make the VirtualHost director and get permissions / groups correct:

mkdir /var/www/dropbox
chown apache:apache /var/www/dropbox
usermod -aG [user] apache
usermod -aG apache [user]

Now create and populate an apache virtualhost config file:

vim /etc/httpd/conf.d/dropbox.conf

Populate it with the following text:

NameVirtualHost *:80
    <VirtualHost *:80>
        DocumentRoot "/var/www/dropbox"
        ServerName [FQDN]
        <Directory "/var/www/dropbox">
            allow from all
            Options +Indexes
            AuthType Basic
            AuthName "Dropbox"
            AuthUserFile /var/www/passwd
            Require valid-user
        </Directory>
    </VirtualHost>

Now add a username / password to access your interface via HTTP auth:

htpasswd -cm /var/www/passwd yourusername
chown apache.apache /var/www/passwd

Make sure that apache has full group access to your Dropbox folder.

chmod g+x /home/[user]
chmod g+rw /home/[user]/Dropbox
find /home/[user]/Dropbox -type d -exec chmod g+x {} ;

Download the latest version of eXtplorer from http://extplorer.sourceforge.net/

cd /var/www/dropbox
wget http://heanet.dl.sourceforge.net/sourceforge/extplorer/eXtplorer_2.0.1.zip
unzip eXtplorer*.zip

Check we haven’t made any mistakes and set the services up:

service httpd configtest
service httpd restart
chkconfig httpd on

You can now log into http://[FQDN] using a browser and the default credentials (admin/admin) and set up your user, pointing the user’s “Home directory:” at /home/[user]Dropbox. Once you have set up your user you have the choice to remove the HTTP authentication which we included in the VirtualHost configuration above. Simply comment out (or delete) the following lines from your /etc/httpd/conf.d/dropbox.conf file:

AuthType Basic
AuthName "Dropbox"
AuthUserFile /var/www/passwd
Require valid-user

That’s it, you’re done!

, , , , , ,

No Comments


Yum restore script

Ok, so I’m about to do a reinstallation of Fedora (I made a boo-boo which would be easier to fix by a re-install than go through manually and try to fix). I have backups, but not of the lib folders etc, I do however have backups of the uber important folders e.g. /etc /home /root etc. Anyway, I want to do a minimum-fuss reinstall, and decided to write a wee script which would take a list of all my currently installed packages and make a nice simple exectuable bash script so that once I’ve set up the repos on the new system I can simply execute this script, it’ll install all the packages I have now, then I can just restore my /etc/directory on top and hey-presto, I’ll be back to a nicely functioning system.

So without further ado:

#!/bin/bash

INSTALLED=/tmp/yum-installed

LIST=/tmp/list

EXECUTABLE=/home/rob/yum

USER=rob

GROUP=$USER

UNATTENDED_INSTALL=yes #yes/no

cat /dev/null > $EXECUTABLE

sudo yum clean all;sudo yum list installed | awk -F' ' '{print $1}' | sed 1d | sed 1d | sed s/.i386// &> $INSTALLED

exec 3< $INSTALLED

while read <&3

do

echo -n "$REPLY " >> $LIST

done

exec 3>&-

# Create the yum installation script file

if [ $UNATTENDED_INSTALL = "yes" ]

then

OPTION="-y"

fi

echo "#!/bin/bash" >> $EXECUTABLE

echo -n "$REPLY " >> $LIST

echo "sudo yum clean all;sudo yum install $OPTION `cat $LIST`" >> $EXECUTABLE

# Set correct perms

chmod +x $EXECUTABLE

chown $USER.$GROUP $EXECUTABLE

# Cleanup

rm -f $LIST

rm -f $INSTALLED

Obviously edit the vars at the top to suit your setup etc - then just sudo (or execute as root) the $EXECUTABLE

, , , , ,

No Comments


Songbird sings

So, as I wrote in my last entry I installed Fedora 10 on my main desktop earlier in the week and I have to say, I can really see it staying there. The reasons behind my switch over from Windows are too numerous to detail – predominantly Fedora 10 will be used as the bedrock from which RHEL 6 will be carved, moulded and created and I’ve been stuck in RHEL 5 land for a long time without keeping up with the changes that have been going on in the world of Fedora. The past few Fedora releases have been a little shakey (imo) however Fedora 10 got some special love with regard to bug tracking and resolution. And it shows with reviews coming in from left right and centre praising the release.

The main reason I can see myself sticking with linux this time around is due to the fact that there are now real, viable alternative apps for the “killer” apps which I use on a Windows desktop – the best example of this (as you’ve probably guessed already from the title) is Songbird. This is the killer app for me when it comes to music management on linux. As much as I hate Apple I have to admit, I do use iTunes on Windows to organise all my music. The last time I tried Fedora 9 I gave Songbird a spin, which back then was still in ‘beta’, i.e. pre-version 1.

songbird

As you can see Songbird v1 is very much like iTunes, from a layout perspective, however it far far excels, as it’s based on the Mozilla platform, it gains from the inherent web-based functionality which comes with including a web page rendering engine. The result is a completely integrated audio application. The best function (imo) is the ability for artist info to be displayed in the window, along with youtube videos, news and photos. Also Songbird takes the best from Firefox in that the application is highly extensible – for example the album art carosel you see at the top of the window is an extension, you can either choose to install it, or not. Customisation is key, and Songbird use it very very effectively. Songbird has all the functionality of iTunes and then some. I should probably add that I don’t have an iPod and don’t use Songbird to sync an iPod, however there is an extension available which will do that very thing. For more info you might want to read their version 1 release blog post which details the major features / improvements made recently.

Being cross-platform, I’m 100% certain that I will not be switching back to iTunes, since I’ll be able to simply port everything between OS’s. Sterling work Songbird – keep up the awesomeness!

, , , ,

No Comments


RHEL vs Fedora

In the past I’ve been asked a lot about what the difference is between RHEL and Fedora – a lot of people think that Fedora is just a ‘free’ version of RHEL with pretty much the same features with the only difference being that you have to pay for support with RHEL whereas Fedora is only community supported. Unfortunately there are more differences between Fedora and RHEL than just support. The best way I can describe it is a comparison between a Formula 1 car (Fedora) and a well-cared-for Mercedes road car (RHEL). The F1 car has all the latest gadgets and technology and is on the bleeding edge of design, but unfortunately things can go wrong, and things like the tires wear down and sometimes the car flies off the track after a corner (update). If there’s a design flaw (bug) the chances are they won’t re-design a new car mid-season just to fix it – they’ll rather fix it in the next design.
The F1 car design gets a new release each season with a new paint job and better performing spoilers etc and unfortunately accidents still happen. After a year or so, the old car design is scrapped completely and parts aren’t made specially for it any more (it’s reached End-Of-Life and is no longer supported).

On the other hand however we have the Mercedes road car which has drawn all of the experience of building the engines and parts for the F1 car, but have had the time to mature the technology used in F1, make it extremely resilient and safe and put it all into a stable car. You can be confident driving the road car that nothing will break unexpectedly and that even if it does, you can take it to the garage and they’ll figure out what’s wrong and make it right again (bug fixes). You get air bags (RHCE’s ;) ). You also get the peace of mind knowing that the car has a warranty and will last for a long time to come, and that parts will always be available for it, and that the tyres won’t wear down quickly etc. All because you know the car has been safety tested and engineered to withstand a crash and a break-down.

I think that’s about as far as I can take the analogy – but I’m sure you get the drift :)

, , ,

No Comments


Dropbox and CentOS 5

Well, since my last post I’ve been attempting to get Dropbox working on CentOS (since this is my server platform). I have so many potential uses for having dropbox running on my server that I’d probably bore anyone reading this if I listed them. Needless to say, it’d be very useful for me if Dropbox would work.

Rather than run the installation on my live server(s), I decided to do a test install on a Virtual Machine. I fired up VMWare and created a minimal installation of CentOS (and I mean minimal) and after installing VMware tools I installed the GNOME desktop along with the X11 Window Manager. I normally use KDE, but unfortunately Dropbox only currently supports Nautilus and not Konqueror :( .

yum --exclude=nautilus-sendto groupinstall "X Window System" "GNOME Desktop Environment"

Now, officially CentOS is not supported by Dropbox, there are no packages for CentOS provided by Dropbox so I thought I’d get the source and see what I could do with it. The package requirements are higher than the CentOS package versions available through traditional channels. I thought I’d have a pop anyway and document how far I got here. The two key problems are that Dropbox require glib2 version to be at least 2.14.0 and libnotify needs to be at least 0.4.4. CentOS 5.2 (current release at time of writing) only has packages for glib2 at 2.12.3-2 and libnotify at 0.4.2-6. I wasn’t about to let that stop my potential enjoyment of Dropbox though, so I installed the other dependencies using yum:

yum install bzip2 wget make gtk+-devel libnotify-devel nautilus-extensions.i386 nautilus-devel.i386 gnome-vfs2-devel compat-glibc-headers.i386 compat-glibc.i386 gnome-desktop-devel.i386

Then I got the latest source from the DropBox download page and untarred it:

wget http://dl.getdropbox.com/u/5143/nautilus-dropbox-packages/0.4.1/nautilus-dropbox-0.4.1.tar.bz2
tar jxf nautilus-dropbox-0.4.1.tar.bz2

Next, I had to alter the configure script to accept our versions of glib2 and libnotify which was just a matter of finding and replacing

GLIB_REQUIRED=2.14.0
LIBNOTIFY_REQUIRED=0.4.4

with

GLIB_REQUIRED=2.12.0
LIBNOTIFY_REQUIRED=0.4.2

Then I ran the

./configure
make
make install

Everything seemed to compile ok. Time to fire up the desktop… GNOME launched ok, but nautilus refuses to load. The problem is revealed when trying to start nautilus from the command line:

[rob@localhost ~]$ nautilus /home/rob
Initializing nautilus-dropbox 0.4.1
nautilus: symbol lookup error: /usr/lib/nautilus/extensions-1.0/libnautilus-dropbox.so: undefined symbol: g_timeout_add_seconds

It looks like Dropbox really does require the specified versions of those packages which is a real shame. So in short, unless anyone comes up with a workaround, or Dropbox release a more compatible version it looks like there’s no awesomeness to be had with Dropbox and CentOS / RHEL :(

Never-the-less the awesomeness still reigns on the Windows platform!

, , ,

12 Comments


SetPageWidth