Apr 272012
 

So, you just did something that broke your entire everything. You’ve tried restoring backups, or you don’t have any. You’ve tried correcting the cPanel userdata files, but for some reason, httpd.conf just isn’t changing. And then you notice this file httpd.conf,v – this beautiful file, that contains all of the changes you’ve ever made to httpd.conf, and has exactly the information you need in it. But how do you convert httpd.conf,v to httpd.conf? Using RCS!

  1. Make backups
  2. You got into this situation because you didn’t make enough backups, you silly little lamb, so let’s not make that mistake again.

    cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.broken
    cp /usr/local/apache/conf/httpd.conf /root
    cp /usr/local/apache/conf/httpd.conf\,v /root

  3. Find the revision you need
  4. The file is formatted with revision numbers, dates, author information, etc. It’ll look something like this.

    1.517
    date 2012.04.11.10.27.03; author root; state Exp;
    branches;
    next 1.516;

    Here’s an example of a revision with actual data. Let’s say you accidentally deleted this vhost and you need it back. We’ll be using the revision from this code block in the following examples.

    1.365
    log
    @"Modified by /usr/local/cpanel/scripts/killvhost After removing vhosts"
    @
    text
    @a8725 32
    <VirtualHost 1.2.3.4:80>
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /home/test/public_html
    ServerAdmin webmaster@@test.com
    ## User test # Needed for Cpanel::ApacheConf
    <IfModule mod_suphp.c>
    suPHP_UserGroup test test
    </IfModule>
    <IfModule concurrent_php.c>
    php4_admin_value open_basedir "/home/test:/usr/lib/php:/usr/php4/lib/php:/usr/local/lib/php:/usr/local/php4/lib/php:/tmp"
    php5_admin_value open_basedir "/home/test:/usr/lib/php:/usr/local/lib/php:/tmp"
    </IfModule>
    <IfModule !concurrent_php.c>
    <IfModule mod_php4.c>
    php_admin_value open_basedir "/home/test:/usr/lib/php:/usr/php4/lib/php:/usr/local/lib/php:/usr/local/php4/lib/php:/tmp"
    </IfModule>
    <IfModule mod_php5.c>
    php_admin_value open_basedir "/home/test:/usr/lib/php:/usr/local/lib/php:/tmp"
    </IfModule>
    <IfModule sapi_apache2.c>
    php_admin_value open_basedir "/home/test:/usr/lib/php:/usr/php4/lib/php:/usr/local/lib/php:/usr/local/php4/lib/php:/tmp"
    </IfModule>
    <IfModule !mod_disable_suexec.c>
    SuexecUserGroup onst onst
    </IfModule>
    CustomLog /usr/local/apache/domlogs/test.com-bytes_log "%{%s}t %I .\n%{%s}t %O ."
    CustomLog /usr/local/apache/domlogs/test.com combined
    Options -ExecCGI -Includes
    RemoveHandler cgi-script .cgi .pl .plx .ppl .perl
    </VirtualHost>
    @

    Let’s take this apart a bit.
    1.365 – this is our revision number. This tells the RCS command to roll back to the version with this data. Location the correct revision to restore is the most important part of the process.

  5. Revert
  6. Now it’s time to go ahead and revert the files. Make sure you’re in /root and not overwriting your existing httpd.conf first.

    cd /root
    co -l -r1.365 httpd.conf

    This will ask you if you wish to replace the existing httpd.conf. Say yes. The /root/httpd.conf file will be overwritten with the RCS version from revision 1.356.

  7. Restore httpd.conf

  8. cp /root/httpd.conf /usr/local/apache/conf
    /etc/init.d/httpd restart

    Overwrite your existing httpd.conf file and restart Apache. That’s it!

    Final notes: since this is cPanel, the httpd.conf you just made will eventually get overwritten with the broken one from cPanel configs. This is just a stop-gap measure to get the sites up while you investigate the real problem. Good luck!

Apr 132012
 

Google’s mod_pagespeed is an Apache module for performance optimization. It can be used to increase the speed of pages served through Apache. This module is compatible with cPanel and WHM’s Apache setup, and it’s pretty easy to install.

  1. Download the correct mod_pagespeed RPM for your architecture.
  2. mod_pagespeed has RPMs available for 32-bit and 64-bit systems. First, let’s download the RPM files.
    For 32-bit:

    cd /usr/local/src
    mkdir mod_pagespeed
    cd mod_pagespeed
    wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_i386.rpm

    For 64-bit:

    cd /usr/local/src/
    mkdir mod_pagespeed
    wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_x86_64.rpm

  3. Extract the necessary files.
  4. I’m going to assume a 64-bit system from here on out. If you’re on a 32-bit system, the extracted files exist in slightly different paths; adjust accordingly.

    rpm2cpio mod-pagespeed-beta_current_x86_64.rpm | cpio -idmv
    cp usr/lib64/httpd/modules/mod_pagespeed.so /usr/local/apache/modules/
    chmod 755 /usr/local/apache/modules/mod_pagespeed.so

  5. Create pagespeed directories.

  6. mkdir -p /var/mod_pagespeed/{cache,files}
    chown nobody:nobody /var/mod_pagespeed/*

  7. Enable mod_deflate (required for mod_pagespeed).
  8. The location of your httpd source directory will vary depending on the version of Apache you have installed. The quickest way to find the correct location is tab completion.

    /usr/local/apache/bin/apxs -c -i /home/cpeasyapache/src/httpd-[tab]/modules/filters/mod_deflate.c

  9. Set up your mod_pagespeed configuration.
  10. Add the following to the Apache configuration files. The simplest way to do this is to create a new configuration file called /usr/local/apache/conf/pagespeed.conf and then include that using the cPanel include files. Place the following in pagespeed.conf:

    LoadModule pagespeed_module modules/mod_pagespeed.so

    # Only attempt to load mod_deflate if it hasn't been loaded already.
    <IfModule !mod_deflate.c>
    LoadModule deflate_module modules/mod_deflate.so
    </IfModule>
    <IfModule pagespeed_module>
    # Turn on mod_pagespeed. To completely disable mod_pagespeed, you
    # can set this to "off".
    ModPagespeed on

    # Direct Apache to send all HTML output to the mod_pagespeed
    # output handler.
    AddOutputFilterByType MOD_PAGESPEED_OUTPUT_FILTER text/html

    # The ModPagespeedFileCachePath and
    # ModPagespeedGeneratedFilePrefix directories must exist and be
    # writable by the apache user (as specified by the User
    # directive).
    ModPagespeedFileCachePath "/var/mod_pagespeed/cache/"
    ModPagespeedGeneratedFilePrefix "/var/mod_pagespeed/files/"

    # Override the mod_pagespeed 'rewrite level'. The default level
    # "CoreFilters" uses a set of rewrite filters that are generally
    # safe for most web pages. Most sites should not need to change
    # this value and can instead fine-tune the configuration using the
    # ModPagespeedDisableFilters and ModPagespeedEnableFilters
    # directives, below. Valid values for ModPagespeedRewriteLevel are
    # PassThrough, CoreFilters and TestingCoreFilters.
    #
    # ModPagespeedRewriteLevel PassThrough

    # Explicitly disables specific filters. This is useful in
    # conjuction with ModPagespeedRewriteLevel. For instance, if one
    # of the filters in the CoreFilters needs to be disabled for a
    # site, that filter can be added to
    # ModPagespeedDisableFilters. This directive contains a
    # comma-separated list of filter names, and can be repeated.
    #
    # ModPagespeedDisableFilters rewrite_images

    # Explicitly enables specific filters. This is useful in
    # conjuction with ModPagespeedRewriteLevel. For instance, filters
    # not included in the CoreFilters may be enabled using this
    # directive. This directive contains a comma-separated list of
    # filter names, and can be repeated.
    #
    # ModPagespeedEnableFilters rewrite_javascript,rewrite_css
    # ModPagespeedEnableFilters collapse_whitespace,elide_attributes

    # ModPagespeedDomain
    # authorizes rewriting of JS, CSS, and Image files found in this
    # domain. By default only resources with the same origin as the
    # HTML file are rewritten. For example:
    #
    # ModPagespeedDomain cdn.myhost.com
    #
    # This will allow resources found on http://cdn.myhost.com to be
    # rewritten in addition to those in the same domain as the HTML.
    #
    # Wildcards (* and ?) are allowed in the domain specification. Be
    # careful when using them as if you rewrite domains that do not
    # send you traffic, then the site receiving the traffic will not
    # know how to serve the rewritten content.

    # Other defaults (cache sizes and thresholds):
    #
    # ModPagespeedFileCacheSizeKb 102400
    # ModPagespeedFileCacheCleanIntervalMs 3600000
    # ModPagespeedLRUCacheKbPerProcess 1024
    # ModPagespeedLRUCacheByteLimit 16384
    # ModPagespeedCssInlineMaxBytes 2048
    # ModPagespeedImageInlineMaxBytes 2048
    # ModPagespeedCssImageInlineMaxBytes 2048
    # ModPagespeedJsInlineMaxBytes 2048
    # ModPagespeedCssOutlineMinBytes 3000
    # ModPagespeedJsOutlineMinBytes 3000

    # Bound the number of images that can be rewritten at any one time; this
    # avoids overloading the CPU. Set this to 0 to remove the bound.
    #
    # ModPagespeedImageMaxRewritesAtOnce 8

    # Settings for image optimization:
    #
    # Jpeg recompression quality (0 to 100, -1 strips metadata):
    # ModPagespeedJpegRecompressionQuality -1
    #
    # Percent of original image size below which optimized images are retained:
    # ModPagespeedImageLimitOptimizedPercent 100
    #
    # Percent of original image area below which image resizing will be
    # attempted:
    # ModPagespeedImageLimitResizeAreaPercent 100

    # When Apache is set up as a browser proxy, mod_pagespeed can record
    # web-sites as they are requested, so that an image of the web is built up
    # in the directory of the proxy administrator's choosing. When ReadOnly is
    # on, only files already present in the SlurpDirectory are served by the
    # proxy.
    #
    # ModPagespeedSlurpDirectory ...
    # ModPagespeedSlurpReadOnly on

    # The maximum URL size is generally limited to about 2k characters
    # due to IE: See http://support.microsoft.com/kb/208427/EN-US.
    # Apache servers by default impose a further limitation of about
    # 250 characters per URL segment (text between slashes).
    # mod_pagespeed circumvents this limitation, but if you employ
    # proxy servers in your path you may need to re-impose it by
    # overriding the setting here. The default setting is 1024
    # characters.
    #
    # ModPagespeedMaxSegmentLength 250

    # Uncomment this if you want to prevent mod_pagespeed from combining files
    # (e.g. CSS files) across paths
    #
    # ModPagespeedCombineAcrossPaths off

    # Explicitly tell mod_pagespeed to load some resources from disk.
    # This will speed up load time and update frequency.
    #
    # This should only be used for static resources which do not need
    # specific headers set or other processing by Apache.
    #
    # Both URL and filesystem path should specify directories and
    # filesystem path must be absolute (for now).
    #
    # ModPagespeedLoadFromFile "http://example.com/static/" "/var/www/static/"

    # Enables server-side instrumentation and statistics. If this rewriter is
    # enabled, then each rewritten HTML page will have instrumentation javacript
    # added that sends latency beacons to /mod_pagespeed_beacon. These
    # statistics can be accessed at /mod_pagespeed_statistics. You must also
    # enable the mod_pagespeed_statistics and mod_pagespeed_beacon handlers
    # below.
    #
    # ModPagespeedEnableFilters add_instrumentation

    # Uncomment the following line so that ModPagespeed will not cache or
    # rewrite resources with Vary: in the header, e.g. Vary: User-Agent.
    # ModPagespeedRespectVary on

    # This handles the client-side instrumentation callbacks which are injected
    # by the add_instrumentation filter.
    # You can use a different location by adding the ModPagespeedBeaconUrl
    # directive; see the documentation on add_instrumentation.
    <Location /mod_pagespeed_beacon>
    SetHandler mod_pagespeed_beacon
    </Location>

    # Uncomment the following line if you want to disable statistics entirely.
    #
    # ModPagespeedStatistics off

    # This page lets you view statistics about the mod_pagespeed module.
    <Location /mod_pagespeed_statistics>
    Order allow,deny
    # You may insert other "Allow from" lines to add hosts you want to
    # allow to look at generated statistics. Another possibility is
    # to comment out the "Order" and "Allow" options from the config
    # file, to allow any client that can reach your server to examine
    # statistics. This might be appropriate in an experimental setup or
    # if the Apache server is protected by a reverse proxy that will
    # filter URLs in some fashion.
    Allow from localhost
    Allow from 127.0.0.1
    SetHandler mod_pagespeed_statistics
    </Location>

    # Page /mod_pagespeed_message lets you view the latest messages from
    # mod_pagespeed, regardless of log-level in your httpd.conf
    # ModPagespeedMessageBufferSize is the maximum number of bytes you would
    # like to dump to your /mod_pagespeed_message page at one time,
    # its default value is 100k bytes.
    # Set it to 0 if you want to disable this feature.

    ModPagespeedMessageBufferSize 100000

    # mod_pagespeed has the ability to collect statistics about page visits as
    # well as page, resource, and div location (see div_structure_filter)
    # referrals. These will eventually be used to speed up pages with at least
    # resource pre-fetch, if not Chrome's new pre-render, technology. See
    # googlewebmastercentral.blogspot.com/2011/06/announcing-instant-pages.html
    # We recommend enabling the div_structure filter if turning on statistics
    # collection below. Enabling the div_structure filter will increase the
    # effectiveness of pre-rendering prediction, because it will take into
    # account both URLs and page locations when aggregating user click through
    # behavior. To enable the div_structure filter, uncomment the appropriate
    # line below or add div_structure to the enabled filters at the top of this
    # configuration file.
    # Page /mod_pagespeed_referer_statistics lets you view the accumulated
    # referral statistics.
    # ModPagespeedCollectRefererStatistics on enables collection (default off)
    # ModPagespeedHashRefererStatistics obscures collected info (default off)
    # ModPagespeedRefererStatisticsOutputLevel can be changed if the page
    # /mod_pagespeed_referer_statistics is slow to load:
    # - Organized (default) is the most readable and ordered logically, but
    # involves computation
    # - Simple is readable but unordered
    # - Fast is the fastest and contains all necessary information, but is
    # fairly unreadable

    # ModPagespeedCollectRefererStatistics on
    # ModPagespeedHashRefererStatistics on
    # ModPagespeedRefererStatisticsOutputLevel Simple
    # ModPagespeedEnableFilters div_structure

    <Location /mod_pagespeed_message>
    Allow from localhost
    Allow from 127.0.0.1
    SetHandler mod_pagespeed_message
    </Location>
    <Location /mod_pagespeed_referer_statistics>
    Allow from localhost
    Allow from 127.0.0.1
    SetHandler mod_pagespeed_referer_statistics
    </Location>
    </IfModule>

    And then open /usr/local/apache/conf/includes/pre_main_global.conf and add:

    Include conf/pagespeed.conf

  11. Rebuild Apache config and restart apache.

  12. /scripts/buildhttpdconf
    /etc/init.d/httpd restart

That’s it!

May 072011
 

By default, cPanel sets up a paltry <512MB /tmp disk. This isn't nearly large enough for large file uploads or other disk-intensive purposes. While it's better to use RAM for temporary storage, sometimes you need a place to dump huge files (such as uploads). Luckily, raising the /tmp disk size has been fairly simple. cPanel's script to secure the /tmp partition against drop-in hacks by making it noexec can also resize the /tmp directory.

The file we'll be modifying is:


/scripts/securetmp

Until recently, modifying one variable was enough to change this, but it seems like there was a change recently that has caused that method to no longer remount /tmp properly. Luckily, the fix for this is two additional small changes to the file.

Let's open up /scripts/securetmp in your favorite editor:


nano /scripts/securetmp

First, we're going to modify line 49:


my $auto = 1

If this isn't already set to 1, set it. Just makes things easier. Next, let's set the /tmp size, line 148:


my $tmpdsksize = 2097152;

This size is in KB - 2GB aught to do it. Now, to fix the issue of mounting /tmp, line 289:


system 'mount', '-o', $mountkeyword . ',loop,noexec,nosuid', $tmpmnt, '/tmp';

We're adding "loop," to the options passed to the mount command to ensure that the system understands /tmp is a loopback device being created on /usr/tmpDSK. Save and exit your file.

Next, we need to shut off anything using /tmp:


/etc/init.d/mysql stop
/etc/init.d/httpd stop

And unmount it and /var/tmp:


umount /tmp
umount /var/tmp

If you get errors, retry a few times, it'll usually unmount after the 2nd or 3rd try. If you're still getting errors, make sure nothing is open in /tmp:


lsof | grep /tmp

Shut it down or delete it. Next, we need to remove the existing /tmp partition file:


rm -f /usr/tmpDSK

And finally, create the new device:


/scripts/securetmp

Depending on the size of your partition, this may take up to 15-20 minutes. After you're done, start everything back up and ensure /tmp is mounted and the right size with a simple:


df -h

Apr 082011
 

So you’ve migrated to a new database server, or a new web server, or you’ve added a new database server to your cluster. The problem is, all of your mySQL users only have grants on the old server. Luckily, the guys at cPanel know your pain and have added an easy way to make sure all of your users have access to their databases.

Add the new hostname

  1. Back up the “mysql” database before making ANY changes.

  2. Log in to WHM as root
  3. Navigate to SQL Services->Additional SQL Access Hosts
  4. Put the new IP address that you’ll be accessing FROM in the box

If you’ve got a deadline, you can add the host % here – this will allow access to mySQL from all hosts. SQL authentication is still required, so you’re not exposing any passwords, but if your clients use insecure mySQL usernames, passwords, and database prefixes, this could still leave you open to a huge SQL injection vulnerability risk, so it is highly not recommended.

Add the grants

  1. Navigate back to the Additional SQL Access Hosts page, and at the bottom of the page, click the link labeled “click here.”
  2. Wait for the process to finish and confirm access.

This quick-and-dirty method will ensure your users will still be able to authenticate using their same passwords, and saves a lot of nasty mySQL batch work.

Apr 012011
 

There are many tutorials on how to install ffmpeg for cPanel. I will be combining one with my own modifications. Please submit modifications or corrections when necessary and I will update this post. The last update to this post was April 8th, 2012.

Some Prerequisites

There are a few things you’ll need to prepare if you’re on a fresh installation.

  1. Subversion
  2. Subversion is required to download and install ffmpeg and mplayer. First, you need to allow yum to install Perl packages.

    nano -w /etc/yum.conf

    In the exclude= line, remove “perl*” – save (CTRL+O) and exit (CTRL+X).

    yum install subversion

    Be sure to add the perl* line back to /etc/yum.conf after you install subversion! This is to prevent yum from accidentally overwriting cPanel’s Perl modules.

  3. Git
  4. Git is required because for some reason, when you install mplayer, it forces you to download a Git repository of ffmpeg. Don’t use this repository for installing ffmpeg – it breaks with a strange error message. How you install Git will vary across OSes. On CentOS 5.5 x64, there are several dependencies as well.

    yum install gettext-devel expat-devel curl-devel zlib-devel openssl-devel
    cd /usr/local/src
    wget http://git-core.googlecode.com/files/git-1.7.7.tar.gz
    tar -zxf git-1.7.7.tar.gz
    cd git-1.7.7
    make prefix=/usr/local all
    make prefix=/usr/local install

  5. Ruby
  6. Ruby is required for flvtool. You can install this using the cPanel script:

    /scripts/installruby

    If you’re not using cPanel, you can probably install this using your package manager.

  7. libXext
  8. libXext is required for MP4Box. It’s in the yum repositories.

    yum install libXext libXext-devel

  9. Remove any other installations
  10. You might already have ffmpeg installed. If it was compiled in, that’s fine, this will overwrite it. But if you have RPM binaries installed, this will cause issues. Run the following:

    rpm -qa | grep ffmpeg
    rpm -qa | grep mplayer
    rpm -qa | grep mencoder
    rpm -qa | grep 264

    Remove with rpm -e any libraries, common files, or binary installations of these packages to prevent conflicts.

Download All The Things

One note; the official distribution release of ffmpeg-php no longer compiles. The SVN version available here works, but the SVN tarball link here can’t easily be downloaded in a terminal session, so I’ve rehosted the file here on this server. This is not my file, I haven’t modified it, and I take no responsibility for it – it’s merely a copy of the file available from the above link.

  1. Let’s get started! This step can and probably should be copy/pasted into your terminal all in one block.

  2. cd /usr/local/src
    wget http://rubyforge.org/frs/download.php/17497/flvtool2-1.0.6.tgz
    tar zxf flvtool2-1.0.6.tgz
    wget http://iweb.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
    tar zxf lame-3.99.5.tar.gz
    wget http://hasaninter.net/ffmpeg-php.tar.gz
    tar xzf ffmpeg-php.tar.gz
    wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
    tar xzf libvorbis-1.3.3.tar.gz
    wget http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz
    tar xzf libogg-1.3.0.tar.gz
    wget http://iweb.dl.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-0.1.3.tar.gz
    tar xzf opencore-amr-0.1.3.tar.gz
    wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2
    tar xjf libtheora-1.1.1.tar.bz2
    wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
    tar zxf xvidcore-1.3.2.tar.gz
    wget http://downloads.sourceforge.net/faac/faad2-2.7.tar.gz
    tar zxf faad2-2.7.tar.gz
    wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
    tar zxf faac-1.28.tar.gz
    mkdir /usr/local/lib/codecs
    wget ftp://ftp.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2
    tar xjf essential-20071007.tar.bz2
    wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
    tar zxf yasm-1.2.0.tar.gz
    cp /usr/local/src/essential-20071007/* /usr/local/lib/codecs/
    chmod -R 755 /usr/local/lib/codecs/
    mkdir /usr/local/src/tmp
    chmod 777 /usr/local/src/tmp
    export TMPDIR=/usr/local/src/tmp
    svn co https://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac gpac
    git clone git://git.videolan.org/x264.git

  3. Now it’s time to grab mplayer and ffmpeg, the latest versions possible.

  4. git clone git://git.videolan.org/ffmpeg.git ffmpeg
    svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer

Let’s Compile This Shit!

Alright, now we’re down to the good stuff – compilation! Hopefully if the above steps went correctly this will just fly by. However I do not recommend that you copy and paste the entire command tree into the terminal at this point. Run everything one step at a time to catch any errors if they do occur. Google is your friend, but feel free to leave a comment here if you run in to any problems.

  1. Lame

  2. cd /usr/local/src/lame-3.99.5/
    ./configure
    make
    make install

  3. Libogg

  4. cd /usr/local/src/libogg-1.3.0
    ./configure
    make
    make install

  5. Libvorbis

  6. cd /usr/local/src/libvorbis-1.3.3
    ./configure
    make
    make install

  7. yasm

  8. cd /usr/local/src/yasm-1.2.0
    ./configure
    make
    make install

  9. Libxvid

  10. cd /usr/local/src/xvidcore/build/generic
    ./configure
    make
    make install

  11. Libx264

  12. cd /usr/local/src/x264
    ./configure --enable-shared
    make
    make install

  13. Flvtool

  14. cd /usr/local/src/flvtool2-1.0.6
    ruby setup.rb config
    ruby setup.rb setup
    ruby setup.rb install

  15. Opencore-amr

  16. cd /usr/local/src/opencore-amr-0.1.3
    ./configure
    make
    make install

  17. Libtheora

  18. cd /usr/local/src/libtheora-1.1.1
    ./configure
    make
    make install

  19. faad2

  20. cd /usr/local/src/faad2-2.7
    ./configure
    make
    make install

  21. faac

  22. cd /usr/local/src/faac-1.28
    ./configure
    make
    make install

  23. MP4Box

  24. cd /usr/local/src/gpac
    ./configure
    make
    make install

  25. ldconfig
  26. To make sure mplayer and ffmpeg install using the correct libs, we need to make sure ld knows where to find our libraries. First, check:

    nano /etc/ld.so.conf

    Make sure that this file contains the line:

    /usr/local/lib

    If you’re on a 64-bit system you should also add:

    /usr/local/lib64

    Save (CTRL+O), exit (CTRL+W), and then update:

    ldconfig

    If you run in to any “file not found” errors, it’s probably ldconfig.

  27. Mplayer – remember, this will download a new version of ffmpeg for some crazy reason. When it asks, just hit enter and allow it to download. It’s only used for compiling mplayer. We must use –yasm=” because we’ve switched from yasm to nasm and mplayer can’t deal with that.

  28. cd /usr/local/src/mplayer/
    ./configure --enable-jpeg
    make
    make install

  29. FFMpeg

  30. cd /usr/local/src/ffmpeg
    ./configure --enable-libmp3lame --enable-libvorbis --enable-shared --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-nonfree --enable-libtheora --enable-version3 --enable-gpl --enable-libxvid
    make
    make install

  31. FFMpeg-PHP – at this point you may receive an error message. To fix this error refer to the second code block.

  32. cd /usr/local/src/ffmpeg-php
    phpize
    ./configure
    make
    make install


    nano -w ffmpeg_frame.c
    CTRL+W CTRL+R PIX_FMT_RGBA32 [enter] PIX_FMT_RGB32
    A
    CTRL+O CTRL+X

    What this does is replaces all instances of PIX_FMT_RGBA32 with PIX_FMT_RGB32, saves, and exits. This will happen after the “make” step – you will need to run “make” again, then “make install.”

  33. php.ini – All that’s left is to modify your php.ini file! Add the following near the top of the file /usr/local/lib/php.ini (to avoid conflicts)

  34. extension=ffmpeg.so

  35. Restart Apache
  36. /etc/init.d/httpd restart

That’s It!

At this point you should have a fully functional ffmpeg installation compiled in to PHP. You can test this with the following:


php -m | grep ffmpeg

You should get the output:

ffmpeg

Thank you very much to serverhostingsecrets.com for providing a very stable base for me to build this tutorial on!