感谢支持
我们一直在努力

Gentoo Linux入门教程

Gentoo Linux入门教程


   Linux爱好者都希望有一个量身定制、完全自主的Linux系统。Gentoo Linux就是为了满足大家这样的要求而出现的,本文就介绍如何从内核开始定制系统,通过Emerge安装自己所需要的软件,这样定制好的Gentoo Linux就是一个高速、稳定的Linux系统。


  Gentoo最初由Daniel Robbins创建。由于开发者对FreeBSD的熟识,所以Gentoo拥有媲美FreeBSD的广受美誉的Ports系统——Portage(Ports和Portage都是用于在线更新软件的系统,类似apt-get,但还是有很大不同)。Gentoo的首个稳定版本发布于2002年。


  Gentoo的出名是因为其高度的自定制性,由于它是一个基于源代码(source-based)的发行版。虽然安装时可以选择预先编译好的软件包,但是大部分Gentoo用户都选择自己手动编译安装。这也是为什么Gentoo比较适合有Linux使用经验的老手使用的原因。但是要注意的是,由于编译软件需要消耗大量的时间,所以如果所有软件都自己编译,并安装KDE桌面系统等比较大的软件包,可能需要几天时间才能编译完成。本文选择Gentoo2005.1版,手把手教大家打造一个属于自己的Gentoo Linux。


  Gentoo安装前的准备


  安装Gentoo选择非常多,可以下载使用安装光盘进行安装,也可以从其它版本,如某种LiveCD进行安装。Gentoo还可以通过网络开机的环境进行安装,甚至可以通过一张救援软盘完成安装。本文将以Universal光盘的方式进行安装,它其实就是Gentoo的LiveCD,包含了可以让Gentoo Linux启动并执行所需要的全部东西。


  1.使用Universal安装光盘


  ◆下载并刻录Universal光盘


在Gentoo的镜像站点http://www.gentoo.org/main/en/mirrors.xml?style=printable可以下载Universal Install CD。笔者推荐从http://mirrors1.mirrors. 64hosting.com/pub/mirrors/gentoo/releases/x86/2005.1/installcd/install-x86-universal-2005.1.iso下载,该站点速度比较快。下载完成后,需要确认此ISO文件的完整性,以免在刻录、安装过程中带来不必要的麻烦。校验方法如下:


#md5sun install-x86-universal-2005.1.iso


  将校验出的MD5值和站点提供的MD5值进行比较,完全相同就可以进行刻录,具体刻录方法请参阅相关文档,这里就不介绍了。


  ◆使用Universal光盘引导系统


  系统重新启动后,按下“Del”键进入计算机的BIOS,将计算机启动顺序设置为从CD-ROM引导系统,插入刚刻录好的Universal光盘即可引导系统。


  在引导系统时可以选择提供的核心参数,下面给出系统所提供的一些核心参数:


-agpgart 加载agpgart,在有图形问题、锁屏的情况下使用。


-doscsi 扫描SCSI设备,注意这样会中断网卡。


-nodetect 产生hwsetup/kudzu,并且不运行hotplug。


-dofirewire 检测initrd里的Firewire模块,用于Firewire光驱等。


-nousb 从initrd里取消使用USB模块的加载,取消hotplug。


-nodhcp 如果检测到NIC,不自动运行DHCP。


-doataraid 从initrd里加载IDE磁盘阵列模块。


-dopcmcia 启动PCMCIA设备。


-noapm 取消加载APM模块。


-noraid 取消加载EVMS模块。


-nohotplug 取消加载hotplug设备。


-ide=nodma 对非IDE设备强行关掉DMA。


-docache 在RAM里对这个实时的CD部分进行缓冲,允许卸载/mnt/cdrom用于挂载其他的光驱。


-dokeymap 对于非US标准键盘,启动键盘选择。


-noapic 如果有硬件问题、NICS、SCSI等情况下尝试。


-hdx=stroke 仅用于SMP/SMP-NOFB内核,即使BIOS不支持大驱动器,也可以对整个硬盘驱动器分区。


假如笔者需要在启动时加载PCMCIA设备的支持,可以在启动时输入如下参数:


boot: gentoo dopcmcia

  ◆其它的一些设定


当Universal启动时,它会尝试着检测所有系统上的硬件,然后载入相应的核心模块来支持系统中的硬件。但在某些时候它也许无法正确地载入相关的核心模块,那就需要用户手动载入。例如要载入8139网卡的模块,可以使用如下命令:


#modprobe 8139too


如果用户希望给予他人安装环境的权限,或者希望使用非root权限来完成系统的安装,则需要为root账号设置密码,或者建立相应的使用者账号,使用如下命令更改root密码:


#passwd


二次输入root密码后即可更改。然后使用如下命令创建一个使用者账号:


#useradd -m -G users kennycx


#passwd kennycx


创建账号后还需要启动SSH服务,以便其他使用者远程进行控制,具体操作如下:


#/etc/init.d/sshd start


  2.设定网络


  ◆自动检测网络


如果用户的计算机是以DHCP的方式接入到网络中的,那非常有可能系统已经自动检测并设定好了网络。这时用户就不需要其他的设置就可以使用Install CD上的网络命令,如ssh、wget和lynx等。如果网络已经设置好,用户就可以通过“/sbin/ifconfig”命令查看,通常情况下都会显示除去lo以外的一个网络设备,如eth0。网络自动检测到后,需要用户手动检测下网络是否畅通,具体操作如下:


# ping www.chinaunix.com


  ◆自动设定网络


如果用户的网络不能自动检测到,就需要通过命令手动设置网络,通常有三种方法。第一种方法是对静态IP进行设置,Gentoo下设置网络简单的方式就是使用“net-setup”命令自动进行设置,“net-setup”将会问用户一些用户网络环境的相关问题,用户只需要一步一步进行回答,完成后就会得到一个可连通的网络。


笔者设置的网络设备为eth0,具体操作如下:


#net-setup eth0


第二种方法是对RP-PPPoE进行设置,假设用户使用的是ADSL,需要通过PPPoE连接到网络的,就将用到adsl-setup程序来设定网络。adsl-setup程序会把用户带入一个设置ADSL相关信息的页面,包括账号、密码、DNS等相关信息。具体设置操作如下:


#adsl-setup


#adsl-start


如果设置完了还无法连通网络,请检查/etc/ppp/pap-secrets或/etc/ppp/chap-secrets文件中保存的账号和密码。


  第三种方法是对PPTP进行设置,如果用户的网络需要PPTP的支持,则可以使用“pptp”命令连接到服务器。在连接之前,请修改一些相关的网络设定,编辑/etc/ppp/pap-secrets或/etc/ppp/chap-secrets文件,确保里面包含了用户正确的账号和密码。具体操作如下:


#nano -w /etc/ppp/pap-secrets


#nano -w /etc/ppp/chap-secrets


根据实际需要调整/etc/ppp/options.pptp,操作如下:


#nano -w /etc/ppp/options.pptp


设定完成后,使用如下命令运行PPTP连接到服务器:


#pptp

◆设定代理服务器


有的用户网络环境需要使用到代理服务器,在Gentoo下设置代理服务器非常简单。如果是HTTP的代理服务器,请按照下列操作进行:


#export http_proxy=http://www.proxy.com:8080


如果是FTP或RSYNC的代理服务器,则使用如下命令:


#export ftp_proxy=ftp://www.proxy.com:8080


#export RSYNC_PROXY=www.proxy.com:8080


如果代理服务器需要进行身份验证,请使用如下命令来解决:


#export http_proxy=http://username:password@www.proxy.com:8080


  3.安装前的磁盘准备


  ◆分割磁盘


  Gentoo Linux和其他发行版的Linux的分区基本相同,在分区前应该对自己的硬盘有个规划,需要分几个区,每个区的空间为多大。在此笔者用fdisk分区工具对硬盘进行分区,准备分三个区,一个/boot分区,大小为32MB;一个Swap交换分区,大小为512MB;一个根分区,使用硬盘剩余的空间。


下面是fdisk的一些主要命令:


b 设置卷标;


d 删除一个分区;


l 显示知道的分取类型;


m 提供帮助;


n 建立一个新的分区;


p 显示分区表;


q 不保存退出;


t 修改分区的系统ID号;


v 检测分取是否损坏;


w 保存退出。


下面写出笔者实现上述要求的分区过程:


#fdsik /dev/hda1


Command (m for help):


  输入“p”命令,查看当前分区情况。如果需要删除某个分区,则输入“d”命令。接着输入需要删除的分区序号,删除多个分区重复上面的步骤便可。现在来实现分区计划,输入“n”命令来创建一个新分区,接着输入“p”命令(e为扩展分区,p为基本分区),然后输入“1”,当出现“First cylinder”提示时按下回车键,接着看到“last cylinder”提示时输入“+32M”,创建32MB大小boot分区的步骤就完成了。建立Swap交换分区的步骤基本相似。需要注意的是,在交换分区被创建后输入“t”命令来选择分区类型,接着输入“82”,将分区类型设置为“Linux Swap”。根分区的建立与boot分区的建立完全一样,在最后选择分区大小时直接按下回车键,就使用剩余的所有空间作为根分区。创建完成后输入“p”命令查看分区是否合乎要求,最后输入“wq”命令,保存分区并退出。


◆创建文件系统


  分区已经顺利完成,就在需要用户选择合适的文件系统格式化分区。常见的Linux文件系统有ext2、ext3、ReiserFS、XFS和JFS等,这几个文件系统的区别大家可以自行查看相关文档。


  在创建文件系统之前,笔者先介绍创建上述几个文件系统的不同命令。创建ext2文件系统命令为“mke2fs”;创建ext3文件系统命令为“mke2fs -j”;创建ReiserFS文件系统命令为“mkreiserfs”;创建XFS文件系统命令为mkfs.xfs;创建JFS文件系统命令为mkfs.jfs。笔者为boot分区(/dev/hda1)选用ext2文件系统,根分区(/dev/hda3)选用ResserFS文件系统,具体操作如下:


#mke2fs /dev/hda1


#mkreiserfs /dev/hda3


  执行完上述命令,文件系统就创建成功了。现在需要启用Swap交换分区,使用如下命令初始化交换分区:


#mkswap /dev/hda2


然后,使用如下命令激活交换分区:


#swapon /dev/hda2


◆挂载分区


  文件系统创建立后,用户需要用“mount”命令把这些分区全部挂载起来,在挂载之前请确保挂载目录的存在,具体操作如下:


#mount /dev/hda3 /mnt/gentoo


#mkdir /mnt/gentoo/boot


#mount /dev/hda1 /mnt/gentoo/boot

 4.安装Genntoo的安装文件


  ◆正确设置系统时间和日期


  在安装Gentoo安装文件之前,用户需要检查本系统的日期时间是否正确,以免在安装过程发生意想不到的错误。“date”命令可以查询当前系统时间日期。如显示错误,则需要使用“date MMDDhhmmYYYY”命令进行更改,命令中字母的意义为,M表示月份、D表示日期、h表示时,m表示分,Y表示年份。例如,笔者设定当前时间为2005年12月31日9时45分,需要运行如下命令:


#date 103109452005


设定完成后,在使用“date”命令查看时间日期是否设置正确。


  ◆下载并解开Stage包


  更换到用户之前将文件系统挂载的Gentoo的挂载点,笔者的为/mnt/gentoo,操作如下:


#cd /mnt/gentoo


通过lynx文本浏览器访问Gentoo的镜像列表选择一个stage文档,输入“D”命令下载,输入“Q”命令退出lynx浏览器,具体操作如下:


#lynx http://www.gentoo.org/main/en/mirrors.xml


下载后使用如下命令解压解包:


#tar -jxvf stage-*.tar.bz2


  ◆安装Portage


  在安装Portage快照之前,请先查看Live中有哪些快照可供选择:


#ls /mnt/cdrom/snapshots


  选定Portage后,用如下命令解开Portage快照:


#tar -jxvf /mnt/cdrom/snapshots/portage-20040413.tar.bz2 -C /mnt/gentoo/usr/


  解压后还需要将源代码复制到挂载的目录下:


#mkdir /mnt/gentoo/usr/portage/distfiles


#cp /mnt/cdrom/distfiles/* /mnt/gentoo/usr/portage/distfiles/


◆配置编译参数


  Portage提供了配置文件/etc/make.conf,可以编辑该文档来优化Gentoo的编译,所有可以使用的变量带注释的列表可以在/mnt/gentoo/etc/make.conf.example中找到,可以根据各自的情况自行配置或使用默认的配置,具体操作如下:


#nano -w /mnt/gentoo/etc/make.conf


编译安装Gentoo


1.编译安装Gentoo基本系统


◆进入新环境


为了在安装过程中即使转换目录的环境也能使用核心提供的信息,需要挂载/proc文档到/mnt/gentoo/proc:


#mkdir /mnt/gentoo/proc


#mount -t proc none /mnt/gentoo/proc


在安装过程中需要用到网络,可以使用“mirrorselect”命令来更新/etc/make.conf文件,使得下载Portage和源代码可以使用更快的镜像,具体操作如下:


#mirrorselect -a -s4 -o | grep -ve ‘^Netselect’ >> /mnt/gentoo/etc/make.conf


  在进入新环境前,用户需要复制DNS信息,以便进入新的环境后也能正常使用网络:


#cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf


  所有的分区和需要的环境都已经准备好了,用户可以使用“chrooting”命令进入新的安装环境,也就是说,从当前的安装环境(LiveCD或者其他的安装介质)转移到安装系统(也就是初始后的分区)。首先使用“chroot”命令将根目录从/转移到/mnt/gentoo。然后使用“env-update”命令创建一个新环境,主要是创建环境变量。最后使用source将这些变量载入内存中,具体操作如下:


#chroot /mnt/gentoo /bin/bash


#env-update


#source /etc/profile


◆从Stage1进行到Stage2


如果在前面选择的是Stage1文档,那么需要Bootstrapping Gentoo系统,其实也就是选择从源码编译任何东西。Bootstrapping的意思就是编译GNU C库、GNU编译器和几个其他的关键系统程序。这个过程耗时也许会长一点,具体操作如下:


#cd /usr/portage


#scripts/bootstrap.sh


  完成后需要使用如下命令重新设置一下环境变量:


#source /etc/profile


  ◆从Stage2进行到Stage3


如果前面选择的是Stage2档案文件,那么现在已经有一个bootstrap过的系统。在这一步用户需要编辑所有没有其它选择的系统软件包,执行“emerge system”命令开始编译系统。这个步骤也需要花掉很长的时间来完成,操作如下:


#emerge system

  2.配置内核


  ◆设定时区


  为了让系统知道用户的所在位置,需要合理的选择时区。在/usr/share/zoneinfo里查看所有时区,然后使用“ln”命令做一个符号链接到/etc/localtime中。笔者选择为shanghai,操作如下:


#ls /usr/share/zoneinfo


#ln -sf /usr/share/zoneinfo/Asia/shanghai /etc/localtime


  ◆安装内核源代码


  Linux的内核是所有版本的中心,也是最为重要的,它位于使用者程序和系统硬件之间。Gentoo为用户提供了很多可用的内核源代码,对于x86系统的使用者,Gentoo主要提供了gentoo-sources,这个内核是以正式的Linux源代码为基础,加上了许多增强性能和安全补丁的内核源码。vanilla-sources为开发者提供默认的、没有任何补丁的内核源码。笔者选择gentoo-sources内核源码,通过“emerge”命令安装:


#emerge gentoo-sources


  安装完内核源码后,可以在/usr/src下查看是否有个“linux”的符号,链接所选的内核源码,操作如下:


#ls -l /usr/src/linux


lrwxrwxrwx 1 root root 12 jan 3 10:34 /usr/src/linux -> linux-2.6.14-gentoo-r4


  如果出现错误,需要修改这个符号链接:


#rm /usr/src/linux


#cd /usr/src


#ln -s linux-2.6.14-gentoo-r4 linux


  ◆配置编译内核


  安装完内核源码后,用户需要配置内核,可以选择手动配置内核,或者使用genkernel脚本来配置内核。手动配置内核是每个Linux用户必修的一课,多配置几次后就会发现手动配置内核也是如此的轻松。


由于手动配置内核需要说明的参数很多,而这篇文章并不是单纯的介绍配置内核的文章,所以想手动配置内核的用户可以参照Gentoo提供的文档。笔者在此主要介绍使用genkernel脚本来配置内核。使用genkernel配置内核就同LiveCD内核的配置几乎一样,这意味着使用genkernel来编译的内核,系统将会在启动时检测出所有的硬件。首先,需要使用如下命令安装genkernel:


#emerge genkernel


将installation CD上的核心设定复制到genkernel找寻预设内核设定的位置:


#zcat /proc/config.gz > /usr/share/genkernel/x86/kernel-config-2.6


运行genkernel脚本来编译内核:


#genkernel –udev all


  当genkernel完成的时候将建立一个模块很全的内核和一个initrd文档。


  用户将在文档后面的配置启动程序时使用这个内核和initrd。initrd将系统启动前运行,执行硬件的自动检测、检查新创建的内核镜像和initrd的名字:


#ls /boot/kernel* /boot/initrd*


  此外,还需要安装coldplug,initrd自动检测到系统启动需要的硬件时,coldplug会自动检测到其他所有的东西,使用如下命令安装coldplug:


#emerge -k coldplug


#rc-update add coldplug boot

   ◆配置模块


  配置完内核后,用户可以将想要开机时自动载入的模块放到/etc/modules.autoload.d/kernel-2.6目录下,可以使用如下命令查看所有可用模块:


# find /lib/modules// -type f -iname ‘*.o’ -or -iname ‘*.ko’


  例如,为自动加载3c59x.o模块,编辑kernel-2.6文件,并输入3c59x的名字:


#nano -w /etc/modules.autoload.d/kernel-2.6


运行“modules-update”命令来提交对/etc/modules.conf文件的修改:


#modules-update ]


  3.配置系统


  ◆配置文件系统信息


  在Linux下,系统所要用的分区都必须列表于文件/etc/fstab中。这个文件包含了这些分区的挂载点、挂载方法和挂载的时间等信息。关于/etc/fstab的具体语法格式,用户可以查看相关文档。笔者在此根据前面的磁盘分区给出/etc/fstab的范例,读者可根据实际的分区情况进行调整:


       #nano -w /etc/fstab


       /dev/hda1 /boot ext2 defaults,noatime 1 2


       /dev/hda2 none swap sw 0 0


       /dev/hda3 / ext3 noatime 0 1


       none /proc proc defaults 0 0


       none /dev/shm tmpfs nodev,nosuid,noexec 0 0


       /dev/cdroms/cdrom0 /mnt/cdrom auto noauto,user 0 0


       ◆配置网络信息


  接下来为Gentoo配置相应的网络信息,包括主机名、域名、IP地址等相关信息,以便让Gentoo能够访问网络。具体操作如下:


       #echo kennycx > /etc/hostname #设定主机名称#


       #echo kennycx.info > /etc/dnsdomainname #设定域名#


       然后添加domainname到默认运行级别:


       #rc-update add domainname default


       Gentoo所有的网络信息都包括在/etc/conf.d/net文件中,用户可以通过修改这个文件,完成对Gentoo网络的配置。笔者根据所在的网络环境做个范例:


       #nano -w /etc/conf.d/net


       iface_eth0=”10.1.72.30 broadcast 10.1.72.255 netmask 255.255.255.0″


       gateway=”eth0/10.1.72.1″


  如果是DHCP的用户,需要设置为iface_eth0=”dhcp”;如果使用RP-PPPOE,则需设置为iface_eth0=”up”。用户一般都希望在系统启动的时候自动启动网络,所以需要将网络设置添加到默认的运行级别:


#rc-update add net.eth0 default

 4.安装必须的系统工具


  ◆系统日志工具


  用户需要安装一个系统日志工具为系统提供日志服务,它可以在日志文件中记录下系统所发生的任何事。Gentoo提供了几个非常好的系统日志工具供大家选择,例如sysklogd、syslog-ng和metalog等。如果没有特殊的要求,建议安装syslog-ng,因为它非常的强大,而且默认设置也不错,安装操作如下:


       #emerge syslog-ng


       #rc-update add syslog-ng default


  ◆安装cron守护进程


  如果用户需要有规律地执行一些命令,安装cron守护进程将会很方便,有点类似于Windows下的计划任务。Gentoo提供了三个cron守护进程,分别是dcron、fcron和vixie-cron。笔者在此选择了vixie-cron,其安装方法如下:


       #emerge vixie-cron


       #rc-update add vixie-cron default


  ◆安装DHCP客户端 如果网络环境需要Gentoo自动取得IP地址,需要安装DHCP客户端dhcpcd:


       #emerge dhcpcd


  ◆安装PPPoE客户端 如果需要使用rp-pppoe来连接到网络,需要安装rp-pppoe:


       #USE=“-X” emerge rp-pppoe


       使用USE=“-x”将会阻止xorg-x11因为依赖性而被安装至系统。


  5.安装开机管理程序


  Linux强大的开机程序有GRUB和LILO,它们各有各的特点,笔者在此选用GRUB作为开机管理程序,使用如下命令安装GRUB:


       #emerge grub


       输入如下命令开始配置GRUB:


       #grub


       安装GRUB后,它将从boot分区/dev/hda1读出它的信息,把GRUB的启动记录安装到MBR上,这样用户打开电脑立刻看到的就是GRUB提示符:


       grub> root (hd0,0)


       grub> setup (hd0)


       grub> quit


       root(hda0,0)是boot分区的位置,setup(hd0,0)是安装GRUB到MBR上。安装上GRUB后,还需创建一份配置文件,让GRUB能自动启动内核,笔者在此写出根据前面的安装创建GRUB的配置文档:


       #nano -w /boot/grub/grub.conf


       default 0


       timeout 30


       splashimage=(hd0,0)/grub/splash.xpm.gz


       title=Gentoo Linux 2.6.14


       root (hd0,0)


       kernel /kernel-2.6.14-gentoo-r4 root=/dev/ram0 init=/linuxrc real_root=/dev/hda3


       initrd /initrd-2.6.14-gentoo-r4


       保存退出,此时GRUB的配置也就完成了。

        使用Gentoo Linux


       1.配置Gentoo


  ◆用户管理


       使用如下命令设置Gentoo的root密码:


       #passwd


       在日常的使用中以root账号工作是非常危险的,所以需要添加一个日常用户:       


       #useradd kennycx


       #passwd kennycx


  如果在使用中需要用到超级用户的权限,可以使用“su”命令获得超级用户权限。


  ◆重启系统


  至此,Gentoo的安装已经完成,退出chroot环境,卸载掉所有已挂载的分区,重新启动进入期待已久的Gentoo系统(如图8)。


       整个操作步骤如下:


       #exit


       cdimage ~#cd


       cdimage ~#umount /mnt/gentoo/boot /mnt/gentoo/proc /mnt/gentoo


       cdimage ~#reboot


       2.安装配置GNOME桌面


       对于桌面用户,选择一个适合自己的桌面环境是十分必要的。Gentoo为用户提供了Linux下常见的桌面环境GNOME、KDE和Xfce等。笔者在此选择GNOME为桌面环境,完成Gentoo的最终安装。


  ◆安装GNOME


       在安装GNOME之前,用户需要编辑USE变量,确认Gtk和GNOME在/etc/make.conf中的USE变量列表中。如果不需要KDE的支持,去掉Qt和KDE,具体设置如下:


       USE=”-qt -kde gtk gnome”


       设置好USE变量,用户可以通过“emerge”命令完成GNOME的安装:


       #emerge gnome xscreensaver


       经过漫长的等待,GNOME已经安装到了系统中,现在需要更新环境变量:


       #env-update && source /etc/profile


       将famd添加到默认的运行级别中:


       #/etc/init.d/famd start


       #rc-update add famd default


       ◆对GNOME进行初始化


       安装好GNOME后,需要配置session,使用户执行“startx”命令后系统会运行GNOME:


       $echo “exec gnome-session” > ~/.xinitrc


  ◆配置图形化登录管理器


       如果希望系统启动时自动进入GNOME的登录管理器,则需要将xdm启动脚本添加到默认的运行级别中,具体操作如下:


       #rc-update add xdm default


       编辑/etc/rc.conf,将gdm设置成为默认的图形登录管理器,操作如下:


       #nano -w /etc/rc.conf


       DISPLAYMANAGER=”gdm”


       XSESSION=”Gnome”


  终于完成了GNOME的安装,现在只须重新启动系统,在图形登录管理器中输入用户名和密码,就可启动GNOME桌面环境


  至此,Gentoo Linux的安装已经全部完成。想必各位读者已经跃跃欲试了吧,那就赶快行动Emerge一个属于自己的世界。

赞(0) 打赏
转载请注明出处:服务器评测 » Gentoo Linux入门教程
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏