≡ Menu

FreeBSD changing pkg_add package ftp site location

pkg_add is a utility for installing software package distributions. It works like Linux apt-get command. It can download package from freebsd ftp site with the remote fetching feature. This will determine the appropriate objformat and release and then fetch and install the package. You can use following syntax:
pkg_add -v -r {package-name}

For example, you can install vim package:

# pkg_add -v -r vim

By default it downloads, the package from ftp.freebsd.org if this site is too busy then you need to use other ftp site location. You can define the environment variable PACKAGEROOT specifies an alternate location for pkg_add to fetch from. The fetch URL is built using this environment variable and the automatic directory logic that pkg_add uses when the -r option is used. For example:

# export PACKAGEROOT=ftp://ftp3.FreeBSD.org
# pkg_add -v -r vim 

You can select FreeBSD ftp mirror sites list. At the writing of this HONG KONG is nearest mirror for me so I will use ftp://ftp.hk.freebsd.org/

# export PACKAGEROOT=ftp://ftp.hk.freebsd.org
# pkg_add -v -r zip

Besides environment variable PACKAGESITE specifies an alternate location for
pkg_add to fetch from. By default, ftp server uses directory path /pub/FreeBSD/ports/i386/packages-VERSION-release/Latest/. This variable subverts the automatic directory logic that pkg_add uses when the -r option is used. Thus it should be a complete URL to the remote package file(s).

Share this on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:

{ 11 comments… add one }
  • Anonymous January 14, 2006, 8:31 am

    I’ve found that portupgrade suite of tools is a nice alternative to pkg_add, etc… A good starting point is HERE

  • Anonymous January 14, 2006, 12:04 pm

    Well that method is bit old, it better to use portsnap or cvsup-without-gui. Both are easy for newbie, IMPO

  • Another Anonymous February 9, 2009, 12:57 pm

    For the record:

    Portsnap and cvsup are entirely different operations than pkg_add and portupgrade, and they cannot be compared at all. It’s like comparing apples to oranges.

    The first 2 programs updates the ports tree, and the other 2 installs packages (portupgrade -P can also start compiling a port if it fails to find a package)

  • Mehul Ved February 16, 2009, 6:15 am

    If I am not wrong, export command will work for bourne and bash, but FreeBSD defaults to csh. csh doesn’t support export, one has to use set command in that case. This part has been missed out in the tip.
    It should be, for instance

    set PACKAGEROOT=”ftp://ftp.hk.freebsd.org”

    set PACKAGESITE=”ftp://ftp.hk.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest”

  • Mehul Ved February 16, 2009, 6:18 am

    Sorry, that was a careless mistake, the actual syntax is

    setenv PACKAGEROOT ”ftp://ftp.hk.freebsd.org”

    setenv PACKAGESITE ”ftp://ftp.hk.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/

    Remember the trailing /, I did forget to add it :D

  • Vaggelis Typaldos August 27, 2009, 9:56 am

    When installing from the Ports Collection with – make install clean – , there is some way to set your preferred mirror locations? PACKAGEROOT and PACKAGESITE variables serve only for the pkg command?

  • Adam September 3, 2009, 5:05 pm

    Great tip. Thanks Mehul

  • SIFE November 7, 2009, 10:00 am

    Salamo Alikom
    is there way to setup default mirror for ports ?

  • Kuris April 5, 2010, 5:44 am

    Excuse me,
    it is possible to set it pernamently?
    To work it also after restart of server?
    I think, that setting of variables is functional only for session…
    There must be some file, where you can write it…
    I will investigate it…

  • Kuris April 5, 2010, 4:24 pm

    Excuse me, I forgot, It can be easily set in file .profile at users directory…

  • Evildog May 10, 2011, 11:44 pm

    IMHO, this could be done by editing /etc/csh.cshrc, if you are usinsg a c shell. csh.cshrc as i understand runs every time c shell is started.

Leave a Comment