Daniel Stinebaugh
(34 comments, 112 posts)
Home page: http://danstinebaugh.com
Jabber/GTalk: daniels@italktomachines.com
Posts by Daniel Stinebaugh
Vanity Bitcoin Keys
1So it’s been a while since I’ve talked about bitcoin and I’ve recently gotten more interested now that the prices have grown significantly. So I started explaining it to some friends at school and have gotten them interested as well. So of course I wanted a nice and custom key to show off, and it’s really quite easy with tools like vanitygen by samr7 over on the bitcoin forums which is the tool that we will be using for this post.
Because it’s actually doing alot of math to figure out (or more correctly guess) at the key, the longer you want your custom key to be, the longer you will have to crunch these numbers so don’t get too crazy with it.
The tool has several options but most of them won’t be used, in fact I only use one of the possible flags below, but there are more, you can view them by running vanitygen.exe with the “-h” flag, or just save this as something like help.bat in the same folder as vanitygen.exe and double-click the .bat file to run the help command for you.
|
1 2 3 |
@echo off vanitygen.exe -h pause |
Now that you have read the options the batch file below might make more sense, we are going to ask you for the pattern you want your custom key to have, and decided if you want it case-sensitive which takes MUCH longer, and might have strings that are not allowed, but it’ll error out if it does so you can try something different.
So save this file as something like vanity.bat in the same folder as vanitygen and run it. (Change the highlighted lines 19 and 23 to reflect the executable you are going to use for your system. (ie: if on a 64 bit system you would use vanitygen64.exe, on a gpu you would use oclvanitygen.exe)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
@echo off echo You can always press ctrl+c to stop this script from running. CALL :GETINPUT GOTO :EOF :GETINPUT set /p Name=Enter your desiered pattern (The leading 1 has been added for you): 1 set /p ConfirmName=Your pattern will be 1%name% Is this correct [y/n]?: if "%ConfirmName%"=="" (GOTO GETINPUT) if "%ConfirmName%"=="y" (GOTO STRICTNESS) else (GOTO EXIT) :STRICTNESS set /p Eieye=Do you require your pattern to be CaSe SenSitvE [y/n]? if "%Eieye%"=="y" (GOTO CASEYES) if "%Eieye%"=="n" (GOTO CASENO) else (GOTO EXIT) :CASEYES vanitygen.exe 1%name% (GOTO EOF) :CASENO vanitygen.exe -i 1%name% (GOTO EOF) :EOF pause :EXIT exit |
Here is what the output of the script does (note, I’ve highlighted the user input for clarity, there is no color in the actual script results, and No this key should NOT be used!):
Then create a shortcut on your desktop for vanity.bat and change the icon to something that you prefer, I’ve added the image I use below for fun, and then just run this anytime you (or a friend) want a custom wallet key!
As for wallet’s, I use the Armory wallet but for most users I would recommend multibit as it’s much faster, and much smaller, but you do give up some freedom and security relying on others where armory can offer a true TNO security standpoint, just my 2 bitcents on that topic, now get mining!
All in one webserver from the ground up. A Virtualized Debian How-to
2< This is the only image you get, as this is going to be a very text centered post.
I figured after virtualizing my entire network a few weeks ago and while learning alot, I also rebuilt several machines, and documented the rebuild. So from those notes, I’m going to finally get around to how to securely host and build a website, from the ground up.
We’ll start with a bare bones debian 6 install (this guide will work for ubuntu server 12.04 as well) on a virtual host.
I’m also using this guide as a walk-through for myself, so I’ve included the instructions on getting vmware-tools installed, if you’re doing this on bare metal, skip that part.
Most of this should be done as the root user. In ubuntu, to gain root use the command:
|
1 |
sudo su |
Also to get the basics out of the way I will be using nano as my text editor, to save in nano use the keys
|
1 |
Ctrl+o |
or to save and exit use the command
|
1 |
Ctrl+x |
I will assume you know how to save a file from this point forward.
To get started let’s get our environment setup, it makes life easier in the end.
|
1 2 |
cd ~ nano .bashrc |
Uncomment the lines in the root .bashrc file
|
1 2 3 4 5 6 7 8 9 |
export LS-OPTIONS=' --color=auto' eval "'dircolors'" alias ls='ls $LS-OPTIONS' alias ll='ls $LS_OPTIONS -lha' * < I added the letters 'ha' to this, I just prefer it YMMV* alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias nano='nano -c' alias arestart='/etc/init.d/apache2 restart' |
Save and exit * I won’t be telling you this again, if the files done being edited, save and close it!
*
Force your current session to use the new .bashrc file.
|
1 |
source .bashrc |
You should now have colors when displaying the contents of your directories and have a shortcut to restart apache once we have it installed.
But before we install the web server let’s finish getting prepped. (ubuntu users, don’t add the netselect-apt in the next command, it’s not available in your repos.)
|
1 |
apt-get install sudo most ntp ntpdate unzip denyhosts htop curl clamav netselect-apt screen byobu build-essential linux-headers-`uname -r` psmisc |
If your curious on how any of these programs work in more detail, you can always turn to the “man” command. I do often, so I like my man pages in color. If you do as well, use this, and select the option that references “most” (usually 3 in my experience)
|
1 |
update-alternatives --config pager |
Now let’s create a normal user (ubuntu users will already have a normal user, and can skip this part)
*replace <yourname> with Your name.*
|
1 |
adduser |
and then answer the questions it asks as best you want.
Now let’s also give this user the ability to manage this server using sudo.
|
1 |
nano /etc/sudoers |
Copy the syntax for the root user replacing root with your username from above.
Now Debian users with netselect installed, use this list of commands:
|
1 2 3 4 |
netselect-apt -n squeeze cp /etc/apt/source.list /etc/apt/source.list.bak cp sources.list /etc/apt/source.list nano /etc/apt/source.list #*Uncomment the line's you want, probably wanting all 3 *# |
then
|
1 |
apt-get update |
Now we can start installing the vmware-tools. First click the option on your vmware console to install tools or guest additions. This will insert a virtual cd-rom in your virtual machine. I know right!?! How deep DOES the rabbit hole go?! Anyways.
|
1 2 3 4 5 6 7 8 9 |
mount /dev/cdrom /media/cdrom cd /tmp/ cp /media/cdrom/VMWareTools*.tar.gz . tar xvf VMwareTools*.tar.gz cd vmware-tools-distrib ./vmware-install.pl #* Answer the questions *# umount /media/cdrom reboot |
Welcome back
Login as your normal user from here on out and gain root using “sudo su“. It’s just good practice.
|
1 2 |
sudo su nano /etc/network/interfaces |
Comment out the default settings for the eth0 interface as we want a static IP address for a server and add something like this (changing the values as needed for your network of course!)
|
1 2 3 4 5 6 7 8 9 |
auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 192.168.0.111 8.8.8.8 dns-search foo.org bar.com |
Then restart your network.
|
1 |
/etc/init.d/networking restart |
You will probably get disconnected if you’re using ssh to connect. This is to be expected and you should now be able to ssh to the IP address you just set.
Now let’s set the hostname of the server.
|
1 2 3 4 |
nano /etc/hosts #* Should look something like this *# 127.0.0.1 localhost.localdomain localhost 192.168.0.100 server1.example.com server1 |
And append the same name to the hostname file and restart the service.
|
1 2 |
echo server1.example.com > /etc/hostname /etc/init.d/hostname.sh start |
Being ssh is probably going to be left open, let’s start to automate banning of brute force attempts for our ssh login (moving ssh to a non standard port is also a good idea!)
|
1 |
nano /etc/denyhosts.conf |
Setup the times and purge options as you see fit and then restart denyhosts.
|
1 |
/etc/init.d/denyhosts restart |
And let’s FINALLY get to installing that webserver like I promised!
|
1 |
apt-get install apache2 |
That’s it! your webserver’s installed! Now let’s configure it!
|
1 2 3 4 |
a2enmod rewrite a2enmod ssl a2enmod include /etc/init.d/apache2 restart |
Now let’s build the config for the website you’ll be hosting.
|
1 |
cd /etc/apache2/sites-available/ |
|
1 2 |
touch example.com nano example.com |
There are alot of options you can define in here, but to get you started make sure you have the DocumentRoot, ErrorLog and CustomLog defined in this config file.
|
1 2 3 4 5 6 7 |
<VirtualHost *:80> ServerAdmin webmaster@domain.com ServerName domain.com ServerAlias www.domain.com DocumentRoot /var/www/example.com/public_html/ ErrorLog /var/log/example.com/logs/error.log CustomLog /var/log/example.com/logs/access.log combined |
Using our example above, let’s create those directories.
|
1 2 |
mkdir -p /var/www/example.com/public_html mkdir -p /var/log/example.com/logs |
And bring this site online, and remove the default site
|
1 2 |
a2ensite domain.com a2dissite default |
Your website should now be online! w00t!
Let’s get the rest going so we can get something more dynamic then html websites.
|
1 |
apt-get install mysql-server |
Enter in a SQL root password when prompted. (SHOULDNT BE THE SAME AS YOUR ROOT PASSWORD!!!!!!!!!!!!!)
And let’s harden our SQL environment as this is not a developer server.
|
1 |
mysql_secure_installation |
You don’t need to change your SQL root password if you set a good one above. if it’s the same as your normal root user’s password, change it ffs! Answer yes to the rest of the questions.
Now this next line will install php. Lot’s of php. This command should be entered in as one single line!
|
1 |
apt-get install php-pear php5-suhosin php5-mysql libapache2-mod-php5 libapache2-mod-ruby libapache2-mod-python php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-mysql php5-pspell php5-recode php5-intl php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl memcached |
These settings will get you off to a good start, but more tuning can be done. Search for the following and make the needed changes in this file. (search in nano using “Ctrl+w” and typing in the keyword.
|
1 |
nano /etc/php5/apache2/php.ini |
|
1 2 3 4 5 6 7 |
max_execution_time = 30 memory_limit = 64M error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR display_errors = Off log_errors = On error_log = /var/log/php.log register_globals = Off |
|
1 |
/etc/init.d/apache2 restart |
(You do remember you can type in ^ arestart ^ instead of that line throughout this gude if you used my .bashrc edits, right?
)
And of course a web-gui to your SQL server is super handy, so let’s add that as well.
|
1 |
apt-get install phpmyadmin |
Select apache2 when asked, and choose yes to create the default database. Enter in the SQL root password, and then leave the next password prompt blank to have a random one generated, as you won’t need it.
Almost done!
Let’s set the permissions on the folders we created.
|
1 2 |
chown -R www-data:www-data /var/www/example.com/public_html chmod 774 /var/www/example.com/public_html |
And your set!
Let’s go one step further and setup a firewall to finish it up, just in case you’re not behind a seperate firewall (Check out untangle if you’re looking for a good one!)
|
1 |
apt-get install ufw |
This will install the “Uncomplicated Firewall” that works with iptables, and makes life alot easier!
For more help with ufw settings check out this guys site, it’s got a pretty good rundown and examples.
|
1 2 3 4 5 6 7 8 |
ufw logging on ufw default deny ufw allow ssh ufw allow www ufw allow https ufw enable #* Answer yes when it asks to proceed *# ufw status |
You should now get a result that says the following:
|
1 2 3 4 5 6 7 |
Status: active To Action From -- ------ ---- 22 ALLOW Anywhere 80 ALLOW Anywhere 443 ALLOW Anywhere |
Of course this is the basic setup, you can further limit ssh to local connections only etc.
And your website is ready for stage 2, Content! You now have a memcached apache http server with php5 and mysql ready for the world wide web! Good luck!
(The stage 2 post will come soon!)
** EDIT **
After a few month’s with this setup I’ve started getting several mail objects that say:
This is a RAID status update from mpt-statusd.
The mpt-status program reports that one of the RAIDs changed state:Report from /etc/init.d/mpt-statusd on virtual-proxy
Being it’s a virtual machine there’s no raid state to worry about (at least not from the guest side…) so unless you have a reason for it, just stop the mpt-status daemon. Do the following:
|
1 |
sudo /etc/init.d/mpt-statusd stop |
to stop it from it’s currently running state, and then
|
1 |
sudo update-rc.d-insserv -f mpt-statusd remove |
which will remove it from several startup scripts that run on boot.
That’s it, no more mail from that problem
Hope your install is running as smoothly as mine has been!
Remotely add a domian user to the local machines remote desktop group (win7)
0So here’s another problem that I’ve run into at work, that I just wasn’t able to find a good resource to answer, so I’ll go ahead and post my workaround so that it might help someone, or myself sometime later.
Let me first explain the problem I was running into so that you get an idea of why and how this happened.
I work for a managed service provider, and we were just getting ready to migrate them away from their old POP3 email to office365′s hosted exchange server, and at the same time we were replacing about 20 pc’s.
The computers were built in house, and most of the work, adding updates, software, users, and enabling remote desktop etc was done locally before the computers got delivered to the remote offices as well.
The computers were delivered, and installed, and everything was going fine, their old email was setup in outlook, and they were able to connect to the main remote desktop server running a few select pieces of software just fine. Sweet!
A week goes by and it’s time to start making sure all of my ducks are in a row before pushing out the new settings for outlook to connect to the new email service, so I tried to use remote desktop (RDP herein) just to test it out. I get an error along the line’s of:
To log on to this computer, you must be granted the Allow log on through Terminal Services right. By default, members of the Remote Desktop Users group have this right…
Now first, understand I was logged in as a domain admin. This error was definitely unexpected.
I try logging in as the local machine’s admin account, and get the same error message. Now I’m starting to get worried, these remote offices are not exactly close, and I really don’t want to spend the next 2 days running all over the place to add the user to the local machines Remote Desktop Users group, but it’s starting to look like that’s what’s going to have to be done, as I can’t just call the end-user, give them the local admin’s login info, then have them start a teamviewer session so that I can add the users to the local RDP group.
But wait! Now I remember, there’s a “Run As” option in windows!
We’re going to need some kind of remote access to the machine to get this configured so I call the user, have them run the teamviewer quick support app (No I don’t get paid by them I just really love the service!) while still logged in as the domain user.
Then here’s the workaround.
Click the start button, type in powershell, but DONT click it yet!
Hold down “Shift” then right-click it. You should see an option for “Run As a different user”
Then you will get a login prompt!
Sweet! Go ahead and enter in your cred’s.
This will open a powershell prompt as the user you just entered the creds for (in my case the domain admin). Neat! Now I just need to open the local machines user and groups settings to add the users. Type in “lusrmgr”.
This will open a window I hope your familiar with,
Now you should be able to add users the same way you usually do! Nice!
If you need a hand actually adding the users to the RDP group, I’ll go ahead and finish walking you through adding a user, but for everyone else, you should be good to go! Enjoy!
To add someone to the RDP group, first click Groups in the left side window (1) in the Local Users and Groups window, then in the main window section, double-click Remote Desktop Users (2).
From this next window, Click Add:
This will open up another window, if you already know the name’s go ahead and start typing them in, click “Check names”(1) and “OK” this will add a user, I don’t usually know all the name’s so I go this route:
Click “Advanced…” (2)
Then hit the “Find Now” button to populate the list with all of the members and groups of your domain (I’ve already done this in the following picture).
Select all of the users and groups you want added and click “OK” and viola! They’ve now been added to the local machines Remote Desktop Users group, remotely, and without giving up the admin’s account info to the end-user! Yea! You should now be able to login as the users you selected to that machine, and can disconnect your teamviewer session, and continue administering that machine via RDP like you wanted to before.
Good Luck!
Also a side note, I don’t believe that Windows XP had the command “lusrmgr” so you might need some tweaking of this to make it work for you. But then again, it’s time to upgrade if you’re still using XP anyways, End of life support for XP is April 8, 2014 just in case you needed to start thinking of that!
My Five Dollar Raspberry Pi Case Build
1So I just posted the pictures to Google+ and of course wanted to post them to my site as well, and of course in much better detail.
I just wanted something easy to take apart, and didn’t cost alot because I knew my friends would want one. (I’ve built 3 now, and more people keep asking..) and was strong, as I do alot of running around, and project fairs.
This has turned out better then I had expected, and am really quite pleased. It starts with a few off the shelf parts (I got mine from Lowes) and consist’s of:
- (2) PVC Romex Handy Box Covers (with the knockout option)
- (4) Nylon 1/4″ x .104 x 1″ spacers (two packs of two)
- (4) 6-32 x 1 1/2″ Pan Head Steel Bolts (one bag of eight, I’ve got extras)
- (optional) Spray Paint, Rounded 6-32 end caps (Pictured at the end)
Stream My Pi
2Alright, so most of my friends already know, I’ve recieved one of my Raspberry Pi computers!
w00t!
So being my old love is streaming radio, I figured why not get this little guy pushing out some tunes for me!
MPD To the rescue!
Now I did a post for Ubuntu 10.04 a while ago where I had custom compiled a .deb file that included mp3 support, however the new version of MPD for the pi has it already built in! Double sweet!
So here’s how to get it started.
First install a few apps. I personally prefer ncmpcpp as my local client to control my MPD stream from the cli. And of course you’ll need to install MPD.
|
1 |
sudo apt-get update ; sudo apt-get install mpd ncmpcpp |
Type in “Y” when it asks if you would like to install the dependencies as well, let it run and install your requested apps.
Shucks, you’re already half way done!
Now you just need to configure your server (mpd) and client (ncmpcpp) to cut down on overhead I’ll just be using the built in httpd stream as well as the alsa mixer, however the config files are much more built out with better examples then they had on my last post, so configuring them should be quite simple these days.
In order to get MPD working as your local user “pi” in this case, we’ll first need to create some directories and files. Enter in the following commands one at a time from the pi user’s home directory.
|
1 2 3 4 5 |
mkdir -p .mpd/db cd .mpd touch state pid cd db touch cache sticker.sql |
That will create the “state” and “pid” file in your .mpd folder and the “cache” and “sticker.sql” files in your .mpd/db folder.
Now let’s backup the original mpd.conf file and then edit the original file.
|
1 2 |
sudo cp /etc/mpd.conf /etc/mpd.conf.org sudo nano /etc/mpd.conf |
You can copy it straight up if you like, as your username is most likely “pi” as well. I’ve set my default music folder to “/home/pi/Music” and Playlists to “/home/pi/Playlists” if you don’t have these directories either, go ahead and make them with the mkdir command, I’ll wait.
Alright, here’s my /etc/mpd.conf file (click it to expand, it’s kinda long):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 |
# An example configuration file for MPD # See the mpd.conf man page for a more detailed description of each parameter. # Files and directories ####################################################### # # This setting controls the top directory which MPD will search to discover the # available audio files and add them to the daemon's online database. This # setting defaults to the XDG directory, otherwise the music directory will be # be disabled and audio files will only be accepted over ipc socket (using # file:// protocol) or streaming files over an accepted protocol. # music_directory "/home/pi/Music" # # This setting sets the MPD internal playlist directory. The purpose of this # directory is storage for playlists created by MPD. The server will use # playlist files not created by the server but only if they are in the MPD # format. This setting defaults to playlist saving being disabled. # playlist_directory "/home/pi/Playlists" # # This setting sets the location of the MPD database. This file is used to # load the database at server start up and store the database while the # server is not up. This setting defaults to disabled which will allow # MPD to accept files over ipc socket (using file:// protocol) or streaming # files over an accepted protocol. # db_file "/home/pi/.mpd/db/cache" # # These settings are the locations for the daemon log files for the daemon. # These logs are great for troubleshooting, depending on your log_level # settings. # # The special value "syslog" makes MPD use the local syslog daemon. This # setting defaults to logging to syslog, otherwise logging is disabled. # log_file "/var/log/mpd/mpd.log" # # This setting sets the location of the file which stores the process ID # for use of mpd --kill and some init scripts. This setting is disabled by # default and the pid file will not be stored. # pid_file "/home/pi/.mpd/pid" # # This setting sets the location of the file which contains information about # most variables to get MPD back into the same general shape it was in before # it was brought down. This setting is disabled by default and the server # state will be reset on server start up. # state_file "/home/pi/.mpd/state" # # The location of the sticker database. This is a database which # manages dynamic information attached to songs. # sticker_file "/home/pi/.mpd/db/sticker.sql" # ############################################################################### # General music daemon options ################################################ # # This setting specifies the user that MPD will run as. MPD should never run as # root and you may use this setting to make MPD change its user ID after # initialization. This setting is disabled by default and MPD is run as the # current user. # user "pi" # # This setting specifies the group that MPD will run as. If not specified # primary group of user specified with "user" setting will be used (if set). # This is useful if MPD needs to be a member of group such as "audio" to # have permission to use sound card. # #group "nogroup" # # This setting sets the address for the daemon to listen on. Careful attention # should be paid if this is assigned to anything other then the default, any. # This setting can deny access to control of the daemon. Choose any if you want # to have mpd listen on every address # # For network #bind_to_address "localhost" bind_to_address "any" # # And for Unix Socket #bind_to_address "/var/run/mpd/socket" # # This setting is the TCP port that is desired for the daemon to get assigned # to. # port "6666" # # This setting controls the type of information which is logged. Available # setting arguments are "default", "secure" or "verbose". The "verbose" setting # argument is recommended for troubleshooting, though can quickly stretch # available resources on limited hardware storage. # #log_level "default" # # If you have a problem with your MP3s ending abruptly it is recommended that # you set this argument to "no" to attempt to fix the problem. If this solves # the problem, it is highly recommended to fix the MP3 files with vbrfix # (available as vbrfix in the debian archive), at which # point gapless MP3 playback can be enabled. # gapless_mp3_playback "yes" # # This setting enables MPD to create playlists in a format usable by other # music players. # #save_absolute_paths_in_playlists "no" # # This setting defines a list of tag types that will be extracted during the # audio file discovery process. Optionally, 'comment' can be added to this # list. # #metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" # # This setting enables automatic update of MPD's database when files in # music_directory are changed. # auto_update "yes" # # Limit the depth of the directories being watched, 0 means only watch # the music directory itself. There is no limit by default. # auto_update_depth "3" # ############################################################################### # Symbolic link behavior ###################################################### # # If this setting is set to "yes", MPD will discover audio files by following # symbolic links outside of the configured music_directory. # #follow_outside_symlinks "yes" # # If this setting is set to "yes", MPD will discover audio files by following # symbolic links inside of the configured music_directory. # #follow_inside_symlinks "yes" # ############################################################################### # Zeroconf / Avahi Service Discovery ########################################## # # If this setting is set to "yes", service information will be published with # Zeroconf / Avahi. # zeroconf_enabled "yes" # # The argument to this setting will be the Zeroconf / Avahi unique name for # this MPD server on the network. # zeroconf_name "Music Player" # ############################################################################### # Permissions ################################################################# # # If this setting is set, MPD will require password authorization. The password # can setting can be specified multiple times for different password profiles. # #password "password@read,add,control,admin" # # This setting specifies the permissions a user has who has not yet logged in. # default_permissions "read,add,control,admin" # ############################################################################### # Input ####################################################################### # input { plugin "curl" # proxy "proxy.isp.com:8080" # proxy_user "user" # proxy_password "password" } # ############################################################################### # Audio Output ################################################################ # # MPD supports various audio output types, as well as playing through multiple # audio outputs at the same time, through multiple audio_output settings # blocks. Setting this block is optional, though the server will only attempt # autodetection for one sound card. # # See <http://mpd.wikia.com/wiki/Configuration#Audio_Outputs> for examples of # other audio outputs. # # An example of an ALSA output: # audio_output { type "alsa" name "My ALSA Device" device "hw:0,0" # optional format "44100:16:2" # optional mixer_device "default" # optional mixer_control "PCM" # optional mixer_index "0" # optional } # # An example of an OSS output: # #audio_output { # type "oss" # name "My OSS Device" # device "/dev/dsp" # optional # format "44100:16:2" # optional # mixer_device "/dev/mixer" # optional # mixer_control "PCM" # optional #} # # An example of a shout output (for streaming to Icecast): # #audio_output { # type "shout" # encoding "ogg" # optional # name "My Shout Stream" # host "localhost" # port "8000" # mount "/mpd.ogg" # password "hackme" # quality "5.0" # bitrate "128" # format "44100:16:1" # protocol "icecast2" # optional # user "source" # optional # description "My Stream Description" # optional # genre "jazz" # optional # public "no" # optional # timeout "2" # optional #} # # An example of a recorder output: # #audio_output { # type "recorder" # name "My recorder" # encoder "vorbis" # optional, vorbis or lame # path "/var/lib/mpd/recorder/mpd.ogg" ## quality "5.0" # do not define if bitrate is defined # bitrate "128" # do not define if quality is defined # format "44100:16:1" #} # # An example of a httpd output (built-in HTTP streaming server): # audio_output { type "httpd" name "Stream of Pi" encoder "lame" # optional, vorbis or lame port "8000" # quality "5.0" # do not define if bitrate is defined bitrate "128" # do not define if quality is defined format "44100:16:1" } # # An example of a pulseaudio output (streaming to a remote pulseaudio server) # #audio_output { # type "pulse" # name "My Pulse Output" # server "remote_server" # optional # sink "remote_server_sink" # optional #} # ## Example "pipe" output: # #audio_output { # type "pipe" # name "my pipe" # command "aplay -f cd 2>/dev/null" ## Or if you're want to use AudioCompress # command "AudioCompress -m | aplay -f cd 2>/dev/null" ## Or to send raw PCM stream through PCM: # command "nc example.org 8765" # format "44100:16:2" #} # ## An example of a null output (for no audio output): # #audio_output { # type "null" # name "My Null Output" #} # # This setting will change all decoded audio to be converted to the specified # format before being passed to the audio outputs. By default, this setting is # disabled. # #audio_output_format "44100:16:2" # # If MPD has been compiled with libsamplerate support, this setting specifies # the sample rate converter to use. Possible values can be found in the # mpd.conf man page or the libsamplerate documentation. By default, this is # setting is disabled. # #samplerate_converter "Fastest Sinc Interpolator" # ############################################################################### # Volume control mixer ######################################################## # # These are the global volume control settings. By default, this setting will # be detected to the available audio output device, with preference going to # hardware mixing. Hardware and software mixers for individual audio_output # sections cannot yet be mixed. # # An example for controlling an ALSA, OSS or Pulseaudio mixer; If this # setting is used other sound applications will be affected by the volume # being controlled by MPD. # mixer_type "hardware" # # An example for controlling all mixers through software. This will control # all controls, even if the mixer is not supported by the device and will not # affect any other sound producing applications. # #mixer_type "software" # # This example will not allow MPD to touch the mixer at all and will disable # all volume controls. # #mixer_type "disabled" # ############################################################################### # Normalization automatic volume adjustments ################################## # # This setting specifies the type of ReplayGain to use. This setting can have # the argument "album" or "track". See <http://www.replaygain.org> for more # details. This setting is disabled by default. # #replaygain "album" # # This setting sets the pre-amp used for files that have ReplayGain tags. By # default this setting is disabled. # #replaygain_preamp "0" # # This setting enables on-the-fly normalization volume adjustment. This will # result in the volume of all playing audio to be adjusted so the output has # equal "loudness". This setting is disabled by default. # #volume_normalization "no" # ############################################################################### # MPD Internal Buffering ###################################################### # # This setting adjusts the size of internal decoded audio buffering. Changing # this may have undesired effects. Don't change this if you don't know what you # are doing. # #audio_buffer_size "2048" # # This setting controls the percentage of the buffer which is filled before # beginning to play. Increasing this reduces the chance of audio file skipping, # at the cost of increased time prior to audio playback. # buffer_before_play "8%" # ############################################################################### # Resource Limitations ######################################################## # # These settings are various limitations to prevent MPD from using too many # resources. Generally, these settings should be minimized to prevent security # risks, depending on the operating resources. # connection_timeout "60" max_connections "10" max_playlist_length "1634" max_command_list_size "2048" max_output_buffer_size "8192" # ############################################################################### # Character Encoding ########################################################## # # If file or directory names do not display correctly for your locale then you # may need to modify this setting. After modification of this setting mpd # --create-db must be run to change the database. # filesystem_charset "UTF-8" # # This setting controls the encoding that ID3v1 tags should be converted from. # id3v1_encoding "UTF-8" # ############################################################################### # SIDPlay decoder ############################################################# # # songlength_database: # Location of your songlengths file, as distributed with the HVSC. # The sidplay plugin checks this for matching MD5 fingerprints. # See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq # # default_songlength: # This is the default playing time in seconds for songs not in the # songlength database, or in case you're not using a database. # A value of 0 means play indefinitely. # # filter: # Turns the SID filter emulation on or off. # #decoder { # plugin "sidplay" # songlength_database "/media/C64Music/DOCUMENTS/Songlengths.txt" # default_songlength "120" # filter "true" #} # ############################################################################### |
I went and left all of the default comments in there, but of course if you want to make it more readable feel free to remove what you don’t use.
So, yea. MPD’s ready. Just restart it.
|
1 |
sudo /etc/init.d/mpd restart |
Now let’s get our client up and running so we can start playing some music!
This one’s a little more tricky as the default config file is hiding and compressed.
First let’s create the local config directory like we did for MPD.
|
1 |
mkdir ~/.ncmpcpp |
and let’s copy the example config over to our new directory.
|
1 |
cp /usr/share/doc/ncmpcpp/config /home/pi/.ncmpcpp |
and then extract it.
|
1 |
gzip -d ~/.ncmpcpp/config.gz |
Now go ahead and edit that file.
|
1 |
nano ~/.ncmpcpp/config |
Again, these are the settings I used, but it’s well documented so feel free to make changes as well. Here is my config for ncmpcpp (again, click it to expand it, it’s even longer…)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 |
#################################################### ## this is example configuration file, copy it to ## ## ~/.ncmpcpp/config and set up your preferences ## #################################################### # ##### directories ###### ## ## Directory for storing ncmpcpp related files. ## Changing it is useful if you want to store ## everything somewhere else and provide command ## line setting for alternative location to config ## file which defines that while launching ncmpcpp. ## # ncmpcpp_directory = "~/.ncmpcpp" # ## ## Directory for storing downloaded lyrics. It ## defaults to ~/.lyrics since other MPD clients ## (eg. ncmpc) also use that location. ## # lyrics_directory = "~/.lyrics" # ##### connection settings ##### # ## set it in order to make tag editor and renaming files work properly # mpd_host = "localhost" # mpd_port = "6666" # mpd_music_dir = "/home/pi/Music" # mpd_connection_timeout = "5" # mpd_crossfade_time = "5" # #mpd_communication_mode = "notifications" (polling/notifications) # ##### music visualizer ##### ## ## Note: In order to make music visualizer work you'll ## need to use mpd fifo output, whose format parameter ## has to be set to 44100:16:1 for mono visualization ## or 44100:16:2 for stereo visualization. Example ## configuration (it has to be put into mpd.conf): ## ## audio_output { ## type "fifo" ## name "My FIFO" ## path "/tmp/mpd.fifo" ## format "44100:16:2" ## } ## # ## ## If you set format to 44100:16:2, make it 'yes'. ## # #visualizer_in_stereo = "no" # #visualizer_fifo_path = "" # ## ## Note: Below parameter is needed for ncmpcpp ## to determine which output provides data for ## visualizer and thus allow syncing between ## visualization and sound as currently there ## are some problems with it. ## # #visualizer_output_name = "" # ## ## Note: Below parameter defines how often ncmpcpp ## has to "synchronize" visualizer and audio outputs. ## 30 seconds is optimal value, but if you experience ## synchronization problems, set it to lower value. ## Keep in mind that sane values start with >=10. ## # #visualizer_sync_interval = "30" # ## ## Note: To enable spectrum frequency visualization ## you need to compile ncmpcpp with fftw3 support. ## # #visualizer_type = "wave" (spectrum/wave) # #visualizer_look = "◆│" # ##### system encoding ##### ## ## ncmpcpp should detect your charset encoding ## but if it failed to do so, you can specify ## charset encoding you are using here. ## ## Note: You can see whether your ncmpcpp build ## supports charset detection by checking output ## of `ncmpcpp --version`. ## ## Note: Since MPD uses utf8 by default, setting ## this option makes sense only if your encoding ## is different. ## # #system_encoding = "" # ##### delays ##### # ## delay after playlist highlighting will be disabled (0 = don't disable) # playlist_disable_highlight_delay = "5" # ## defines how long various messages are supposed to be visible # message_delay_time = "4" # ##### song format ##### ## ## for song format you can use: ## ## %l - length ## %f - filename ## %D - directory ## %a - artist ## %A - album artist ## %t - title ## %b - album ## %y - year ## %n - track number (01/12 -> 01) ## %N - full track info (01/12 -> 01/12) ## %g - genre ## %c - composer ## %p - performer ## %d - disc ## %C - comment ## $R - begin right alignment ## ## you can also put them in { } and then it will be displayed ## only if all requested values are available and/or define alternate ## value with { }|{ } eg. {%a - %t}|{%f} ## ## Note: If you want to set limit on maximal length of a tag, just ## put the appropriate number between % and character that defines ## tag type, e.g. to make album take max. 20 terminal cells, use '%20b'. ## ## Note: Format that is similar to "%a - %t" (i.e. without any additional ## braces) is equal to "{%a - %t}", so if one of the tags is missing, ## you'll get nothing. ## ## text can also have different color than the main window has, ## eg. if you want length to be green, write $3%l$9 ## ## available values: ## ## - 0 - default window color (discards all other colors) ## - 1 - black ## - 2 - red ## - 3 - green ## - 4 - yellow ## - 5 - blue ## - 6 - magenta ## - 7 - cyan ## - 8 - white ## - 9 - end of current color ## ## Note: colors can be nested. ## # #song_list_format = "{%a - }{%t}|{$8%f$9}$R{$3(%l)$9}" # #song_status_format = "{{%a{ \"%b\"{ (%y)}} - }{%t}}|{%f}" # #song_library_format = "{%n - }{%t}|{%f}" # #tag_editor_album_format = "{(%y) }%b" # ## ## Note: Below variables are for alternative version of user's interface. ## Their syntax supports all tags and colors listed above plus some extra ## markers used for text attributes. They are followed by character '$'. ## After that you can put: ## ## - b - bold text ## - u - underline text ## - r - reverse colors ## - a - use alternative character set ## ## If you don't want to use an attribute anymore, just put it again, but ## this time insert character '/' between '$' and attribute character, ## e.g. {$b%t$/b}|{$r%f$/r} will display bolded title tag or filename ## with reversed colors. ## # #alternative_header_first_line_format = "$b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b" # #alternative_header_second_line_format = "{{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D}" # ## ## Note: Below variables also supports ## text attributes listed above. ## # #now_playing_prefix = "$b" # #now_playing_suffix = "$/b" # #browser_playlist_prefix = "$2playlist$9 " # #selected_item_prefix = "$6" # #selected_item_suffix = "$9" # ## colors are not supported for below variable # #song_window_title_format = "{%a - }{%t}|{%f}" # ##### columns settings ##### ## ## syntax of song columns list format is "column column etc." ## ## - syntax for each column is: ## ## (width of column)[column's color]{displayed tag} ## ## Note: Width is by default in %, if you want a column to ## have fixed size, add 'f' after the value, e.g. (10)[white]{a} ## will be the column that take 10% of screen (so the real column's ## width will depend on actual screen size), whereas (10f)[white]{a} ## will take 10 terminal cells, no matter how wide the screen is. ## ## - color is optional (if you want the default one, type []) ## ## Note: You can give a column additional attributes by putting appropriate ## character after displayed tag character. Available attributes are: ## ## - r - column will be right aligned ## - E - if tag is empty, empty tag marker won't be displayed ## ## You can also: ## ## - give a column custom name by putting it after attributes, ## separated with character ':', e.g. {lr:Length} gives you ## right aligned column of lengths named "Length". ## ## - define sequence of tags, that have to be displayed in case ## predecessor is empty in a way similar to the one in classic ## song format, i.e. using '|' character, e.g. {a|c|p:Owner} ## creates column named "Owner" that tries to display artist ## tag and then composer and performer if previous ones are ## not available. ## # #song_columns_list_format = "(7f)[green]{l} (25)[cyan]{a} (40)[]{t|f} (30)[red]{b}" # ##### various settings ##### # ## ## Note: Custom command that will be executed each ## time song changes. Useful for notifications etc. ## ## Attention: It doesn't support song format anymore. ## Use `ncmpcpp --now-playing SONG_FORMAT` instead. ## #execute_on_song_change = "" # #playlist_show_remaining_time = "no" # #playlist_shorten_total_times = "no" # #playlist_separate_albums = "no" # #playlist_display_mode = "classic" (classic/columns) # #browser_display_mode = "classic" (classic/columns) # #search_engine_display_mode = "classic" (classic/columns) # #playlist_editor_display_mode = "classic" (classic/columns) # #discard_colors_if_item_is_selected = "yes" # #incremental_seeking = "yes" # #seek_time = "1" # #autocenter_mode = "no" # #centered_cursor = "no" # ## ## Note: You can specify third character which will ## be used to build 'empty' part of progressbar. ## #progressbar_look = "=>" # #default_place_to_search_in = "database" (database/playlist) # #user_interface = "classic" (classic/alternative) # #media_library_left_column = "a" (possible values: a,y,g,c,p, legend above) # #default_find_mode = "wrapped" (wrapped/normal) # #default_space_mode = "add" (add/select) # #default_tag_editor_left_col = "albums" (albums/dirs) # #default_tag_editor_pattern = "%n - %t" # #header_visibility = "yes" # #statusbar_visibility = "yes" # #titles_visibility = "yes" # #header_text_scrolling = "yes" # #fancy_scrolling = "yes" # #cyclic_scrolling = "no" # #lines_scrolled = "2" # #follow_now_playing_lyrics = "no" # #fetch_lyrics_for_current_song_in_background = "no" # #store_lyrics_in_song_dir = "no" # ## ## Note: If you set this variable, ncmpcpp will try to ## get info from last.fm in language you set and if it ## fails, it will fall back to english. Otherwise it will ## use english the first time. ## ## Note: Language has to be expressed as an ISO 639 alpha-2 code. ## #lastfm_preferred_language = "" # #ncmpc_like_songs_adding = "no" (enabled - add/remove, disabled - always add) # #show_hidden_files_in_local_browser = "no" # #display_screens_numbers_on_start = "yes" # ## ## How shall key_screen_switcher work? ## ## - "previous" - switch between current and last used screen ## - "sequence: 2 -> 9 -> 5" - switch between given sequence of screens. ## ## Screen numbers you can use after 'sequence' keyword are: ## ## - 1 - help ## - 2 - playlist ## - 3 - browser ## - 4 - search engine ## - 5 - media library ## - 6 - playlist editor ## - 7 - tag editor ## - 8 - outputs ## - 9 - visualizer ## - 10 - clock ## ## As you can see, above example will switch between ## playlist, visualizer and media library screens. ## #screen_switcher_mode = "sequence: 2 -> 3" # ## ## Default width of locked screen (in %). ## Acceptable values are from 20 to 80. ## # #locked_screen_width_part = "50" # #ask_for_locked_screen_width_part = "yes" # ## ## Note: You can define startup screen for ncmpcpp ## by choosing screen number from the list above. ## #startup_screen = "2" # #jump_to_now_playing_song_at_start = "yes" # #ask_before_clearing_main_playlist = "no" # #clock_display_seconds = "no" # #display_volume_level = "yes" # #display_bitrate = "no" # #display_remaining_time = "no" # #regular_expressions = "basic" (basic/extended) # ## ## Note: If below is enabled, ncmpcpp will ignore leading ## "The" word while sorting items in browser, tags in ## media library, etc. ## #ignore_leading_the = "no" # #block_search_constraints_change_if_items_found = "yes" # #mouse_support = "yes" # #mouse_list_scroll_whole_page = "yes" # #empty_tag_marker = "<empty>" # #tag_editor_extended_numeration = "no" # #media_library_display_date = "yes" # #media_library_display_empty_tag = "yes" # #media_library_disable_two_column_mode = "no" # #enable_window_title = "yes" # ## ## Note: You can choose default search mode for search ## engine. Available modes are: ## ## - 1 - use mpd built-in searching (no regexes, pattern matching) ## - 2 - use ncmpcpp searching (pattern matching with support for regexes, ## but if your mpd is on a remote machine, downloading big database ## to process it can take a while ## - 3 - match only exact values (this mode uses mpd function for searching ## in database and local one for searching in current playlist) ## # #search_engine_default_search_mode = "1" # ## ## Note: Below variables can allow you to physically ## remove files and directories from your hdd using ## ncmpcpp's browser screen. ## # #allow_physical_files_deletion = "no" # #allow_physical_directories_deletion = "no" # #external_editor = "" # #use_console_editor = "no" (set to yes, if your editor is console app) # ##### colors definitions ##### # #colors_enabled = "yes" # #empty_tag_color = "cyan" # #header_window_color = "default" # #volume_color = "default" # #state_line_color = "default" # #state_flags_color = "default" # #main_window_color = "yellow" # #color1 = "white" # #color2 = "green" # #main_window_highlight_color = "yellow" # #progressbar_color = "default" # #statusbar_color = "default" # #alternative_ui_separator_color = "black" # #active_column_color = "red" # #visualizer_color = "yellow" # #window_border_color = "green" # #active_window_border = "red" # |
So yea. That’s it! You should be up and running!
Start ncmpcpp in a tty with the logical command of “ncmpcpp” This will open the client app and allow you to start playing music! Being it’s a command line app, most of the work is done with keyboard commands. Press the number “1″ on your keyboard (NOT on the 10key if you have one to the right of your normal keyboard but the numbers above the qwerty row) and you will be shown a VERY long list of keyboard commands to control ncmpcpp, however the arrow and space and enter key’s will get you through most of it easily.
Plug it in to your amplifier, or better yet, grab your android phone and grab the free app called “MPDroid” it’s the best app I’ve found to interface with MPD. Now you can control your music from your phone, and get a stream of it sent TO your phone as well! No wires needed! (however it will be significantly buffered, so be patient when you first choose to start your stream)
Not too bad right!
Enjoy and if you have any questions, feel free to post a comment, here or in our forums, or even in my IRC hangout at italktomachines.com !









































