On Unix systems, when a user logs on, their default shell which is set when the account is first created, is spawned for them automatically. We use that to spawn a program instead of a shell by creating a user, in this case named wiz which has its default shell set to some program like /usr/bin/top.
A new user should be added using the adduser utility which makes the appropriate changes. In order to check whether the user has been added correctly the /etc/passwd file should contain an entry like the following for our user wiz:
wiz:*:1000:1000:Wizardry and Steamworks:/home/wiz:/usr/bin/top
We duplicate the Pc console in /etc/gettytab and give it another name, while making sure that it has some new unique identifiers like Pa instead of Pc as well as specifying our username to automatically log on by using the al (automatic login) option.
P|Pc|Pc console:\
:ht:np:sp#9600:
P|Pa|Pa console:\
:ht:np:sp#9600:al=wiz
Then, we add the terminal to the /etc/ttys file which will launch the Po console on the first virtual terminal, then log-in our user named wiz that would launch wiz's shell which is /usr/bin/top:
ttyv0 "/usr/libexec/getty Po" xterm on secure # Virtual terminals ttyv1 "/usr/libexec/getty Pc" xterm on secure
There are instances where certain options from ports are not configurable using the port system. For example, there is a bug in FreeBSD 10.1 that prevents libidn to be installed in case you also have the mono compiler install. The issue stems from the fact that when libidn runs, it will also pick-up the mono install and attempt to install the chsarp bindings. The solution in that case is to go to /usr/ports/dns/libidn and edit the Makefile and add the following option:
CONFIGURE_ARGS= --disable-csharp
where all the parameters passed to the CONFIGURE_ARGS variable will be passed on to the autoconf configure script. Note that CONFIGURE_ARGS can also be passed as a parameter to make using the variable=value format.
A good idea is to keep ports updated and that can be achieved using the portsnap command. First, in order to update your ports, issue:
portsnap fetch extract
and then any time you wish to update the ports, issue:
portsnap fetch update
In order to update packages, you can use portmaster commonly found in /usr/ports/ports-mgmt/portmaster. You can check what new packages are available by issuing:
portmaster -L --index-only| egrep '(ew|ort) version|total install'
and, in order to update a package - say bash, issue:
portmaster bash
Alternatively, to update the whole distribution, you can issue:
portmaster -a
Some packages depend heavily on a time-zone being set. FreeBSD by default assumes UTC, in which case, it considers that no timezone setting is necessary. What happens is that if there is no /etc/localtime installed, then some programs such as the mono c-sharp compiler will bomb out claiming that they were unable to determine the time-zone.
In order to install a time-zone, copy a file (don't copy a directory) from /usr/share/zoneinfo/ to /etc/localtime. For example, to set to UTC time, issue:
cp /usr/share/zoneinfo/UTC /etc/localtime
In order to rebuild a port and the ports it depends on, issue:
portupgrade -Rf <portglob>
or
portmaster -f <portglob>
In order to rebuild a port and the ports that depend on it, issue:
portupgrade -rf <portglob>
or
portmaster -rf <portglob>
where <portglob> is a port path, ie: multimedia/mplayer
In order for an user to be able to elevate its privileges, the user needs to be part of the wheel group. Issue the command:
pw user mod USER -G wheel
as root in order to add USER to the wheel group.
First, install the GeoIP port:
cd /usr/ports/net/GeoIP make config-recursive make install clean
then change directory to /usr/local/share/GeoIP/:
cd /usr/local/share/GeoIP
and download the databases from maxmind.com:
curl -O http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz curl -O http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz curl -O http://download.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz
and extract them:
gunzip GeoIP.dat.gz gunzip GeoIPASNum.dat.gz gunzip GeoLiteCity.dat.gz
which should cover the installation of the databases.
In order to check that they are working correctly, issue, for instance:
/usr/local/bin/geoiplookup -f /usr/local/share/GeoIP/GeoLiteCity.dat 8.8.8.8
which should yield:
GeoIP City Edition, Rev 1: US, CA, California, Mountain View, 94040, 37.386002, -122.083801, 807, 650
| Command | Purpose |
|---|---|
make rmconfig | Removes the configuration of the current port. |
make rmconfig-recursive | Removes the configuration of the current port and all ports depending on the current port. |
make config | Configures the current port. |
make config-recursive | Configures the current port and all ports depending on the current port. |
make depends | Compiles all the ports that the current port depends on. |
make showconfig | Show the build options for the current port. |
make showconfig-recursive | Show the build options for the current port and all ports built by the current port. |
The option:
fsck_y_enable="YES"
can be added to /etc/rc.conf which will make FreeBSD answer yes to all questions when performing the filesystem check (it is the equivalent of fsck -y).
Additionally, by specifying:
background_fsck="NO"
in /etc/rc.conf, the file system check will not run concurrently to the boot process and the file system check will be performed first and then the machine will boot.
In order to remove a user named USER from a group named GROUP, issue:
pw mod group GROUP -d USER
In order to add a user named USER to a group named GROUP, issue:
pw mod user USER -G GROUP
This can be achieved using the command:
setfacl -bn PATH
where PATH is the path to a file or folder.
i2p from security/i2p seems to be very broken on FreeBSD 10 due to a shell script that launches a Java service wrapper to start i2p. To start i2p, you would edit /etc/rc.conf and add the lines:
i2p_enable="YES" i2p_user="i2p"
where i2p must be an user that you have previously configured.
After that, you would issue:
/usr/local/etc/rc.d/i2p install
which will install the service files to the home directory of the i2p from /etc/rc.conf.
Then, if you attempt to start the service:
/usr/local/etc/rc.d/i2p start
and monitor wrapper.log (usually found under the i2p user's home directory in a hidden folder named .i2p/), you will notice that it bombs out with various errors such as:
Launching a JVM... javavm: warning: The use of 'javavm' as a synonym for 'java' is deprecated JVM exited while loading the application. Error: Could not find or load main class org.tanukisoftware.wrapper.WrapperSimpleApp The value of wrapper.java.command does not appear to be a java binary. The use of scripts is not supported. Trying to continue, but some features may not work correctly..
Which is obviously a class-path problem. The officially suggested workaround is to install sysutils/javaservicewrapper and then copy some files into the install path of i2p:
cd $HOME/i2p cp /usr/local/bin/javaservicewrapper i2psvc cp /usr/local/lib/javaservicewrapper/lib/wrapper.jar lib/ cp /usr/local/lib/javaservicewrapper/lib/libwrapper.so lib/
Unfortunately, that does not work either. The deep-magic lies in the wrapper.config file in the i2p install path (the path mentioned where you issued /usr/local/etc/rc.d/i2p install).
You need to edit wrapper.config and then find all occurrences of:
$INSTALL_PATH
and replace that variable with the hard-coded path to where you installed i2p. Apparently the install script does not set the environment variable properly such that you will have to hard-code it this way in order for i2p to start.
In order to have the ACLs applied to new files and folders created under a directory, default ACLs can be used.
The first step is to set the default ACL for the directory:
setfacl -dm u::rwx,m::rwx,g::rx,o::rx DIRECTORY
where:
DIRECTORY is the directory to set the default ACL for.This step is necessary before setting default ACLs that grant other users permissions, otherwise setting default user ACLs directly would result in:
setfacl: DIRECTORY: acl_calc_mask() failed: Invalid argument setfacl: DIRECTORY: failed to set ACL mask
The final step is to set the default ACLs for the users you want:
setfacl -dm u:USER:rwx,g:GROUP:rwx DIRECTORY
where:
USER is an user name,GROUP is a group name,DIRECTORY is the directory to set the ACLs for.
To set these permissions recursively (note that only directories may have default ACLs), you would have to use find:
find . -type d -exec setfacl -dm u:USER:rwx,g:GROUP:rwx '{}' \;
which will set default permissions for all directories and sub-directories starting from the current directory.
For the contact, copyright, license, warranty and privacy terms for the usage of this website please see the contact, license, privacy, copyright.