安装PHP7和Apache

怎样在Ubuntu上安装PHP7,和选装Apache

首先你系统应该已经有add-apt-repository命令,如果没有,则:

sudo apt-get install software-properties-common
sudo apt-get install python-software-properties

上面两个根据Ubuntu版本不同可能一个会失败,不过只要运行了总会得到add-apt-repository

PHP7

如果你只要PHP7,比如你只需命令行php-cli,或者你用nginx,只需要PHP-fpm后台:

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update

然后选装PHP7组件,如:

sudo apt-get install php7.0-cli php7.0-fpm
php -v  # 测试

你也可以试试PHP7.1,虽然现在(2016/9)它还是Beta,没有正式发布,但应该很快了:

sudo apt-get install php7.1-cli php7.1-fpm

PHP7和Apache

先把以前的apache卸载:

sudo apt-get purge 'apache2*'

加ppa后安装:

sudo add-apt-repository ppa:ondrej/apache2
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install apache2
sudo apt-get install libapache2-mod-php7.0

apache/php7就装好了。到/var/www/html下,新建文件info.php,内容为:

<?php echo phpinfo();

在浏览器地址打入 机器ip/info.php 就会看到php配置信息。

一般我们都要加装一些常用的PHP包:

sudo apt-get install php7.0-mysql php7.0-mbstring php7.0-gd php7.0-xml

重启apapche:sudo service apache2 restart,重新加载info.php页会发现这些包都装好了。

安装TaskWarrior Server

TaskWarrior是款命令行的任务管理软件。

taskd 是taskwarrior的同步服务器。

准备

参看安装TaskWarrior先装taskwarrior(即客户端)。

安装必要软件包:

sudo apt-get install uuid-dev libgmp-dev libreadline-dev

装taskd

TaskWarrior网站上的taskd下载此时(2016/9/3)是1.1.0,有些老,我们将用1.2.0:

git clone https://git.tasktools.org/scm/tm/taskd.git
cd taskd
git checkout 1.2.0
cd src
git clone https://git.tasktools.org/scm/tm/libshared.git
cd ..
cmake -DCMAKE_BUILD_TYPE=release .
make
sudo make install

配置taskd

mkdir ~/taskd_data
export TASKDDATA=~/taskd_data
taskd init

# 现在仍在taskd目录下
cd pki
vi vars

把CN=localhost的localhost改成你的服务器域名或IP, 假设我们改成了your_server,

(其他的内容也可以酌情改)

./generate
cp client.cert.pem $TASKDDATA
cp client.key.pem  $TASKDDATA
cp server.cert.pem $TASKDDATA
cp server.key.pem  $TASKDDATA
cp server.crl.pem  $TASKDDATA
cp ca.cert.pem     $TASKDDATA
taskd config --force client.cert $TASKDDATA/client.cert.pem
taskd config --force client.key $TASKDDATA/client.key.pem
taskd config --force server.cert $TASKDDATA/server.cert.pem
taskd config --force server.key $TASKDDATA/server.key.pem
taskd config --force server.crl $TASKDDATA/server.crl.pem
taskd config --force ca.cert $TASKDDATA/ca.cert.pem
cd $TASKDDATA
taskd config --force log $PWD/taskd.log
taskd config --force pid.file $PWD/taskd.pid
taskd config --force server your_server:53589  # your_server和上面vars里CN一致

启动taskd

taskdctl start
taskdctl status

配置task用户, 指向本地服务器

# 回到taskd/pki目录
cd ~/taskd/pki
taskd add org Public
taskd add user 'Public' 'your_name'  # your_name是用户名

这里会产生一个New user key, 比如94ba61f8-5065-43d7-8dac-7c02523b0133

./generate.client your_name

会产生两个文件:your_name.key.pemyour_name.cert.pem, 将这两个文件和ca.cert.pem拷贝到~/.task里:

cp your_name.key.pem ~/.task
cp your_name.cert.pem ~/.task
cp ca.cert.pem ~/.task
task config taskd.certificate -- ~/.task/your_name.cert.pem
task config taskd.key -- ~/.task/your_name.key.pem
task config taskd.ca -- ~/.task/ca.cert.pem
task config taskd.server  -- your_server:53589
task config taskd.credentials -- Public/your_name/new_user_key

your_server仍是vars里CN的域名或IP.

new_user_key就是task add user那步得到的字串.

开始同步任务

task sync init
task

如果没有错误,把~/.task目录和~/.taskrc打包:

cd
tar cfz task.tgz .task .taskrc

把task.tgz拷到其他机器上:

scp task.tgz remote_ip:/home/your_name/

我们把装了taskd的机器叫机器1,其他的机器为机器2、机器3等, 机器2、3上应该已经安装了taskwarrior.

登录机器2,解压task.tgz:

tar xfz task.tgz
task

task会显示和机器1 task一样的任务列表。

回到机器1,添加一项新任务:

task add 机器1上的新任务
task sync

回到机器2,由于没有同步,task显示的还是原来的内容,只需运行:

task sync

再打task,会看到机器1上的新任务已经被同步过来了。

同样的,在机器2上添加任务后sync, 回到机器1后sync,也能看到机器2的添加和修改。

机器2上的配置可以复制到机器3上。

安装TaskWarrior

TaskWarrior是款命令行的任务管理软件。

准备

Ubuntu:

sudo apt-get install pkg-config autoconf autogen cmake
sudo apt-get install uuid-dev libgmp-dev libreadline-dev

Mac:

brew install gnutls
brew install cmake

装nettle>=3.1 (Mac不需要)

Ubuntun > 16.04 只需: sudo apt install nettle-dev

wget https://ftp.gnu.org/gnu/nettle/nettle-3.1.tar.gz
tar xfz nettle-3.1.tar.gz
cd nettle-3.1/
./configure
make
sudo make install

装gnutls 3.5.4 (Mac不需要)

Ubuntun > 16.04 只需: sudo apt install gnutls-bin

wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.5/gnutls-3.5.4.tar.xz
tar xfJ gnutls-3.5.4.tar.xz
cd gnutls-3.5.4/
./configure --with-included-libtasn1 --without-p11-kit
make
sudo make install

装taskwarrior 2.5.1

Ubuntun > 16.04 只需: sudo apt install task

wget https://taskwarrior.org/download/task-2.5.1.tar.gz
tar xzf task-2.5.1.tar.gz
cd task-2.5.1
cmake -DCMAKE_BUILD_TYPE=release .
make
sudo make install

配置taskwarrior

export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib  # 最好加到你的~/.bashrc里
task version  # 打y后回车

使用

task add write setting up server article due:tomorrow
task add 给wendy买生日蛋糕 due:2016-10-18 project:GF priority:H
task add 和jessica说分手 project:GF priority:L
task add 给小明打电话 due:eom project:基友
# 列出next tasks
task
# 只列出GF任务
task project:GF

具体使用方法看文档

安装tasksh

wget http://taskwarrior.org/download/tasksh-latest.tar.gz
tar xfz tasksh-latest.tar.gz
cd tasksh-1.1.0/
cmake -DCMAKE_BUILD_TYPE=release .
make
sudo make install

升级gcc和g++

先看你现有的gcc版本:

gcc --version

如果你满意,则不需要升级,一般也真没必要升级。也许你要编译一个软件需要升级的gcc,或者你想试试一些c++14的新特性,你可以按以下步骤升级:

添加ppa

sudo add-apt-repository ppa:ubuntu-toolchain-r/test  # 按回车
sudo apt-get update

去掉现有的缺省

sudo update-alternatives --remove-all gcc

安装新版gcc和g++

以下版本选一个或多个安装, 一般就选一个

sudo apt-get install gcc-4.9 g++-4.9
sudo apt-get install gcc-5 g++-5
sudo apt-get install gcc-6 g++-6

设置缺省

下面执行一个或多个.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60 --slave /usr/bin/g++ g++ /usr/bin/g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 80 --slave /usr/bin/g++ g++ /usr/bin/g++-6

如果上面执行了多于一次:

sudo update-alternatives --config gcc  # 选择一个回车

以后如果要切换gcc缺省版本,就再执行:

sudo update-alternatives --config gcc

确认

gcc --version
g++ --version

新Ubuntu开发环境的准备

你刚装了一台Ubuntu机器或者新买了一个Ubuntu云主机,第一步做什么?

如果在中国,最好把apt的源换成国内的。

打开/etc/apt/sources.list,把里面的us.archive.ubuntu.comsecurity.ubuntu.com等换成mirrors.aliyun.commirrors.163.com等国内的镜像地址。有时候你在国内买云主机如阿里云的,那里面的源已经换过了,这一步是不需要的。

一般作为开发机,C和C++编译器是必不可少的,所以第一个安装的包是build-essential:

sudo apt-get install build-essential

然后再按需要装一些常用的工具和库:

sudo apt-get install git wget dpkg htop cloc tree lsof lynx sqlite3
sudo apt-get install dnsutils whois unzip unrar
sudo apt-get install language-pack-zh-hans language-pack-zh-hant
sudo apt-get install ncurses-term software-properties-common
sudo apt-get install cmake autogen autoconf
sudo apt-get install libz-dev libssl-dev libxml2-dev
sudo apt-get install libpng-dev libgif-dev libjpeg-dev libfreetype6-dev

为了方便阅读分了几行,这些都是可以一次安装的。 有些工具可能你暂时用不上,不过装了又没有坏处,以后说不定就用上了。

Example content

Howdy! This is an example blog post that shows several types of HTML content supported in this theme.

这是Poole带的,里面有书写范例,保留。

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Inline HTML elements

HTML defines a long list of available inline tags, a complete list of which can be found on the Mozilla Developer Network.

  • To bold text, use <strong>.
  • To italicize text, use <em>.
  • Abbreviations, like HTML should use <abbr>, with an optional title attribute for the full phrase.
  • Citations, like — Mark otto, should use <cite>.
  • Deleted text should use <del> and inserted text should use <ins>.
  • Superscript text uses <sup> and subscript text uses <sub>.

Most of these elements are styled by browsers with few modifications on our part.

Footnotes

Footnotes are supported as part of the Markdown syntax. Here’s one in action. Clicking this number1 will lead you to a footnote. The syntax looks like:

Clicking this number[^fn-sample_footnote]

Each footnote needs the ^fn- prefix and a unique ID to be referenced for the footnoted content. The syntax for that list looks something like this:

[^fn-sample_footnote]: Handy! Now click the return link to go back.

You can place the footnoted content wherever you like. Markdown parsers should properly place it at the bottom of the post.

Heading

Vivamus sagittis lacus vel augue rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Code

Inline code is available with the <code> element. Snippets of multiple lines of code are supported through Pygments. Longer lines will automatically scroll horizontally when needed.

// Example can be run directly in your JavaScript console


// Create a function that takes two arguments and returns the sum of those arguments

var adder = new Function("a", "b", "return a + b");

// Call the function

adder(2, 6);
// > 8

You may also optionally show code snippets with line numbers. Add linenos to the Pygments tags.

1
2
3
4
5
6
7
8
// Example can be run directly in your JavaScript console


// Create a function that takes two arguments and returns the sum of those arguments

var adder = new Function("a", "b", "return a + b");

// Call the function

adder(2, 6);
// > 8

Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.

Gists via GitHub Pages

Vestibulum id ligula porta felis euismod semper. Nullam quis risus eget urna mollis ornare vel eu leo. Donec sed odio dui.

{ % gist 13f94b734a4ddb132735 gist.md % } gist好像在国内看不见

Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec sed odio dui. Vestibulum id ligula porta felis euismod semper.

Lists

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

  • Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
  • Donec id elit non mi porta gravida at eget metus.
  • Nulla vitae elit libero, a pharetra augue.

Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.

  1. Vestibulum id ligula porta felis euismod semper.
  2. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
  3. Maecenas sed diam eget risus varius blandit sit amet non magna.

Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.

HyperText Markup Language (HTML)
The language used to describe and define the content of a Web page
Cascading Style Sheets (CSS)
Used to describe the appearance of Web content
JavaScript (JS)
The programming language used to build advanced Web sites and applications

Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Nullam quis risus eget urna mollis ornare vel eu leo.

Images

Quisque consequat sapien eget quam rhoncus, sit amet laoreet diam tempus. Aliquam aliquam metus erat, a pulvinar turpis suscipit at.

placeholder placeholder placeholder

Tables

Aenean lacinia bibendum nulla sed consectetur. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Name Upvotes Downvotes
Totals 21 23
Alice 10 11
Bob 4 3
Charlie 7 9

Nullam id dolor id nibh ultricies vehicula ut id elit. Sed posuere consectetur est at lobortis. Nullam quis risus eget urna mollis ornare vel eu leo.


Want to see something else added? Open an issue.

  1. Handy! Now click the return link to go back. 

开篇:介绍

无论问题多小,方法多简单,过程多明显,都记下来,因为不知道什么时候就用的着了,不管是对笔者自己还是对别人。