版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《Linux系統(tǒng)裁減指南(LiPS)目目 引 編寫目 背 定 參考資 總體描 硬件環(huán) 軟件環(huán) 需求規(guī)定和約 總體設 基本設計概 軟件結 內 創(chuàng)建內核的方 內核配 概 Loadablemodule Processortypeand General PlugandPlay Block Multi-devicesupport(RAIDand Networking SCSI Networkdevice Character File Console USB 提 根文件系 根文件系 文件系統(tǒng)的內 應用程序 設備文件(device 腳本和配置文件(scriptsandconfiguration 庫文件 必要的目 初始化RAM盤 操作步 引導選 安 改變根目錄設 使用場 淘汰的根轉換機制 系統(tǒng)初始化 init的任 兩種風格:Slackwarevs. 什么是 配置文 再論 根到底在哪 根轉換機制:新的?舊的 提 文件系統(tǒng)目錄層次結 mklips.sh(制作LiPS的腳本 lips.conf(LiPS配置文件 cp 如何判斷個程序依賴哪些文 帶庫文件復制—— 庫文件的命 引 引導過程概 幾種引導方 grub引導 USB引 制作步 創(chuàng)建文件系 復制文 安裝 提 版本問題 遠程串控制 概 配置方 提 Linux遠程串控制臺指 系統(tǒng)安裝光 概 boot.iso光盤的文件結構分 引言編寫目的LinuxLiPS的詳細設計過程,也可以作為構造一個小型化Linux系統(tǒng)的指南。本文檔內容的組織如下所述:這一部分是引言,第2部分是對項目軟、硬件環(huán)境和需求的總體描述,第3部分說明了裁減LINUX的相關基本概念。后面幾個部分是具體實現(xiàn)7Linux系統(tǒng)安裝光盤的創(chuàng)建方法,8列出了相關華中科技大學計算機存儲系統(tǒng)國家專業(yè)實驗室,NAS項目(2003.3——?ObootloaderOkernel:Orootfilesystem:OUSB:參考資料DIYLinux系統(tǒng)IBMdeveloperWorks中國網(wǎng)站.LinuxFromScratch.Linux啟動過程綜述.TheLinuxBootdiskHOWTO().UsingtheinitialRAMdisk(initrd)./usr/src/linux- Quickmouse2003.1發(fā)表于白云黃鶴BBS(http:///Linux討論區(qū)的帖子“裁減Linux”。KarimYaghmour.BuildingEmbeddedLinuxSystems.O'Reilly,April200AlessandroRubini.TakeCommand:Init.cs/init/,NovemberLinuxPAM體系結構IBMdeveloperWorks中國網(wǎng)站http://www-90/0./developerWorks/cn/linux/l-pam/index.shtml.2003.7.[12]總體描述硬件環(huán)境Intel845芯片組主板,P41.8GHzCPU,256M內存,60GIDE硬盤,RTL8139軟件環(huán)境RedhatLinux7.3kernel2.4.18-3)RedhatLinux9kernel0-8)??梢愿鶕?jù)需要使用其他版本的內核,比如Redhat7.3+kernel2.4.20。需求規(guī)定和約束LiPSLinuxPoweredStorageLinux操作系統(tǒng),主要著眼于提供各種文件服務,不包括XGUI;并且足夠小,可以裝入32MUSB盤或者DOC/DOM等常用設備引導??傮w設計基本設計概念提起“裁減Linux”,最容易想到的方法是以一個已經(jīng)安裝好的系統(tǒng)為基礎,刪除掉不需要的文件,以減小整個系統(tǒng)的尺寸。而事實這個方法幾乎是行不通的,因為通過光盤安裝的一個Redhat9Linux系統(tǒng),即便是只選擇了比較少的軟件包,其所占空間也可以輕300~500MB,想在這個基礎裁減到30MB左右是比較困難的。更困難的是確定另一個途徑是從零開始根據(jù)需要構建整個系統(tǒng)?!癓inuxFromScratch”Linux系統(tǒng),然軟件結構LiPS3部分:Linux本、配置文件和其他特殊文件(比如設備節(jié)點)的地方,也可以安裝各種軟件包。通常根LiPS中應用了initrd(RAM盤)機制,將根文件系統(tǒng)放在RAMDisk中。引導器(BootLoader)的任務是從引導設備裝載內核,引導系統(tǒng)運行。Linux系統(tǒng)常見的引導器包括早期的LILO和近期的GRUB。LiPS用的是GRUB。內核創(chuàng)建內核的方法Linux提供了方便靈活的方法來定制內核,主要步驟包括:下載安裝內核源代碼樹,cd/usr/src/linux-2.4makemenuconfigmakedep;makeclean;make編譯成功的內核文件為內核配置makemenuconfig之后可以看到類似如下的內容(編號是為了描述方便而加的)。補丁面,其實標準內核是比較穩(wěn)定的。補丁一般是對標準內核錯誤的修正和新增的功能。與2.4.20內核配置選項比較會發(fā)現(xiàn),[10,25,30]都屬于Redhat的補丁。一般地,這些補丁選項都不是必須的,因此我們的LiPS內核中都沒有包括這些選項。其實,完全可以通過直接配置一個標準的內核版本(比如 LinuxKernelv2.4.20-8-R2LipsCodematurityleveloptionsLoadablemodulesupportProcessortypeandfeaturesGeneralsetupMemoryTechnologyDevices(MTD)ParallelportsupportPlugandPlayconfigurationBlockdevicesMulti-devicesupport(RAIDandLVM)Cryptographysupport(CryptoAPI)NetworkingoptionsTelephonySupportSCSIsupportFusionMPTdevicesupportI2OdevicesupportNetworkdevicesupportAmateurRadiosupportIrDA(infrared)supportISDNsubsystemOldCD-ROMdrivers(notSCSI,notIDE)InputcoresupportCharacterdevicesMultimediadevicesCryptoHardwaresupportFilesystemsConsoledriversSoundUSBsupportAdditionaldevicedriversupportBluetoothsupportKernelhackingLibraryroutinesLoadanAlternateConfigurationFileSaveConfigurationtoanAlternateFile <Exit <Help東西。沒有說明的選項,比如“Codematurityleveloptions”,表示不選?Loadablemodule[*]Enableloadablemodule[]Setversioninformationonallmodule[*]Kernelmodule慮將一些硬件設備的驅動程序編譯為模塊,從而減小內核尺寸,同時增加適應不同硬件Processortypeand[*]MachineCheckException<>ToshibaLaptop<>Delllaptop<>/dev/cpu/microcode-IntelIA32CPUmicrocode<>/dev/cpu/*/msr-Model-specificregister<>/dev/cpu/*/cpuid-CPUinformationsupport(off)HighMemorySupport[]Math[]MTRR(MemoryTypeRangeRegister)support[]Symmetricmulti-processingsupport[]LocalAPICsupportonuniprocessors[]UnsyncedTSCsupport處理器特性。選擇一下Processorfamily,其余基本都沒有選。HighMemoryGeneral[*]Networkingsupport[*]PCIsupport(Any)PCIaccessmode[*]ISAbussupport[*]PCIdevicenamedatabase[]EISAsupport[]MCA[]Supportforhot-pluggabledevices[*]SystemVIPC[*]BSDProcessAccounting[*]Sysctlsupport(ELF)Kernelcore(/proc/kcore)<>Kernelsupportfora.out<*>KernelsupportforELF<>KernelsupportforMISCbinaries[*]PowerManagementsupport<>KernelsupportforMISCbinaries[*]PowerManagementsupport<*>AdvancedPowerManagementBIOSsupport IgnoreUSERSUSPEND EnablePMatboot MakeCPUIdlecallswhen EnableconsoleblankingusingAPM RTCstorestimeinGMT[*]AllowinterruptsduringAPMBIOScallsUserealmodeAPMBIOScalltopower其中APM相關的選項比較搞不清楚,有時候halt–p命令不能關閉系統(tǒng)電源跟這里有關系。PlugandPlay<*>PlugandPlay<>ISAPlugandPlayBlock<*>Normalfloppydisk<>XTharddisk<>CompaqSMART2<>CompaqSmartArray5xxx<>MylexDAC960/DAC1100PCIRAIDController<*>Loopbackdevice<>Networkblockdevice<*>RAMdisk(4096)DefaultRAMdisk[*]InitialRAMdisk(initrd)[*]Perpartitionstatisticsin塊設備。軟驅也可以不選。這里的關鍵選項是Loopbackdevice,RAMdisk和initrd,一定要選中。DefaultRAMdisksize多少都沒有關系。Multi-devicesupport(RAIDand[*]Multipledevicesdriversupport(RAIDand<*>RAID<*>Linear(append)<*>RAID-0(striping)<*>RAID-1(mirroring)<*>RAID-4/RAID-5<*>MultipathI/O<*>Logicalvolumemanager(LVM)MD支持。軟RAIDLVMNetworking<*>Packet[*]Packetsocket:mmapped<>Netlinkdevice[*]Networkpacketfiltering(replacesipchains)[]Networkpacketfilteringdebugging[*]Socket<*>Unixdomainsockets[*]TCP/IPnetworking[*]IP:[*]IP:advancedrouter[] IP:policyrouting[ IP:equalcost[] IP:useTOSvalueasroutingkey[] IP:verboseroutemonitoring[ IP:largerouting[*]IP:kernellevelautoconfiguration IP:DHCPsupport IP:RARPsupport<*>IP:<>IP:GREtunnelsoverIP[]IP:multicastrouting[]IP:TCPExplicitCongestionNotificationsupport[]IP:TCPsyncookiesupport(disabledperIP:NetfilterConfiguration<>802.1QVLAN<>TheIPX<>AppletalkprotocolsupportAppletalkdevices><>DECnet<>802.1dEthernetBridgingQoSand/orfairqueueing>Networktesting>意義,基本可以用缺省設置。注意DHCP選項,如果要用到的話要記得選中這個。IP:NetfilterConfiguration(iptables有關)PleaseseeDocumentation/ide.txtforhelp/infoonIDEdrives[]Useolddisk-onlydriveronprimaryinterface<*>IncludeIDE/ATA-2DISKsupport Usemulti-modebydefault Auto-GeometryResizing<*>IncludeIDE/ATAPICDROM<>IncludeIDE/ATAPITAPE<>IncludeIDE/ATAPIFLOPPY<*>SCSIemulationsupport[]IDETaskfileAccessIDEchipset[]CMD640chipset[]RZ1000chipsetbugfix/supportGenericPCIIDEchipset SharingPCIIDEinterruptssupport GenericPCIbus-masterDMAsupport[] Bootoff-boardchipsetsfirstsupport[] Forceenablelegacy2.0.XHOSTStouseDMA UsePCIDMAbydefaultwhenavailable[]EnableDMAonlyfordisks[]AEC62XXchipsetsupport[]ALIM15x3chipsetsupport[]AMDVipersupport[]CMD64XandCMD680chipsetsupport[]CY82C693chipsetsupport[] CyrixCS5530MediaGXchipsetsupport[] HPT34Xchipsetsupport[] IntelPIIXnchipsetssupport PIIXnTuning[ [] [] SiS5513chipsetsupport[ SLC90E66chipset[] []OtherIDEchipsetsupport[]IGNOREword93ValidationIDE設備支持。要用IDE硬盤,當然要選中。CDROM選項看情況也可以不要。SCSIemulation似乎對使用USB盤有影響。剩下的很多都是跟IDEchipset有關的。最好是用deg命令找出目標系統(tǒng)主板芯片組,然后選中對應的芯片組支持,這樣ESCSI<*>SCSISCSIsupporttype(disk,tape,CD-<*>SCSIdisk(40)MaximumnumberofSCSIdisksthatcanbeloadedas<>SCSItape<>SCSIOnStreamSC-x0tape<>SCSICD-ROM<*>SCSIgenericSomeSCSIdevices(e.g.CDjukebox)supportmultipleLUNs[]Enableextrachecksinnewqueueingcode[]ProbeallLUNsoneachSCSI[]VerboseSCSIerrorreporting(kernelsize+=12K)[]SCSIloggingfacilitySCSIlow-leveldriversSCSISCSI硬盤等SCSI設備,這里當然要選。目前我們的目標系統(tǒng)其實沒有SCSI硬盤,但是為了使用USB盤,也要選中SCSI支持。SCSIlow-leveldrivers子選項中是一些SCSINetworkdevice[*]NetworkdeviceARCnetdevices<>Dummynetdriver<>Bondingdriver<>EQL(seriallineloadbalancing)<>UniversalTUN/TAPdevicedriversupportEthernet(10or100Mbit)>[*]Ethernet(10or[*]EISA,VLB,PCIandonboard EtherExpressPro/100support(eepro100,originalBecker RealTekRTL-8139PCIFastEthernetAdaptersupportEthernet(1000Mbit)>[]FDDIdriver<>PPP(point-to-pointprotocol)<>SLIP(serialline)supportWirelessLAN(non-hamradio)>TokenRingdevices>[]FibreChanneldriversupportWaninterfaces>網(wǎng)絡設備支持。主要選擇網(wǎng)卡類型,Ethernet10or100Mbit)Character[*]Virtual[*]Supportforconsoleonvirtual<*>Standard/generic(8250/16550andcompatibleUARTs)serial[*]Supportforconsoleonserialport[]Extendeddumbserialdriveroptions[]Non-standardserialportsupport[]Unix98PTYsupportI2Csupport>Mice>Joysticks><>QIC-02tapesupportWatchdogCards><>AMD768RandomNumberGenerator<>Inteli8x0RandomNumberGenerator<>AMD76xnativepowermanagement<>/dev/nvram<>EnhancedRealTimeClock<>DoubleTalkPCinternalspeechcard<>SiemensR3964line<>ApplicomintelligentfieldbuscardsupportFtape,thefloppytapedevicedriver><>/dev/agpgart(AGP[]DirectRenderingManager(XFree86DRI<>ACPModem(Mwave)File[*]Quota<>Kernelautomounter<*>Kernelautomounterversion4support(alsosupports<*>Reiserfs[]Enablereiserfsdebugmode[*]Statsin/proc/fs/reiserfs<*>Ext3journallingfilesystemsupport[]JBD(ext3)debuggingsupport<*>MSDOSfs< UMSDOS:Unix-likefilesystemontopofstandardMSDOS<*>VFAT(Windows-95)fs<>CompressedROMfilesystem[*]Virtualmemoryfilesystemsupport(formershm<*>ISO9660CDROMfilesystemsupport[*]MicrosoftJolietCDROMextensions[]Transparentdecompression<>JFSfilesystem<>Minixfs<>FreeVxFSfilesystemsupport(VERITASVxFS(TM)<>NTFSfilesystemsupport(read<>OS/2HPFSfilesystemsupport[*]/procfilesystemsupport<>QNX4filesystemsupport(read<>ROMfilesystem<*>Secondextendedfs<>SystemV/Xenix/V7/Coherentfilesystem<>UDFfilesystemsupport(read<>UFSfilesystemsupport(readonly)NetworkFileSystems><>Codafilesystemsupport(advancednetwork<*>NFSfilesystem[*]ProvideNFSv3clientsupport[]RootfilesystemonNFS<*>NFSserver[*]ProvideNFSv3server<*>SMBfilesystemsupport(tomountWindowssharesetc.)[]UseadefaultNLS<>NCPfilesystemsupport(tomountNetWarevolumes)PartitionTypes>NativeLanguageSupport>DefaultNLSOption:"iso8859-1"<*>Codepage437(UnitedStates,<*>SimplifiedChinesecharset(CP936,<*>TraditionalChinesecharsetReiserfs,Ext3,F(xiàn)AT,ISO9660,JFS等等,可以根據(jù)情況選擇。/procext2一定要選中。還有NetworkFileSystems子選項,可以選擇是否支持NFS和SMB。NativeLanguageSupport子選項跟所支持的語言有關,這里沒有全部列出來,我們選中了英語和簡體、繁Console[*]VGAtext[]VideomodeselectionUSB<*>Supportfor[]USBverbosedebugMiscellaneousUSB[*]PreliminaryUSBdevice[]Longtimeoutforslow-respondingdevices(someMGEEllipseUSBHostController<*>UHCIAlternateDriver(JE)<*>OHCI(Compaq,iMacs,OPTi,SiS,ALi,...)USBDeviceClass<>USBMIDI<*>USBMassStorage USBMassStorageverbose[] [] ISD-200USB/ATABridgesupport[ <>USBModem(CDCACM)<>USBPrinterUSBHumanInterfaceDevices<*>USBHumanInterfaceDevice(fullHID) InputcoresupportisneededforUSBHIDinputlayerorHIDBP[] /dev/hiddevrawHIDdevicesupportUSBImaging<>USBKodakDC-2xxCamera<>USBScanner<>MicrotekX6USBscannerUSBMultimediaVideo4LinuxsupportisneededforUSBMultimediadeviceUSBNetworkUSBportUSBSerialConvertersupportUSBMiscellaneous<>TexasInstrumentsGraphLinkUSB(akaSilverLink)cable<>USBLCDdeviceUSB支持。如果沒有使用USB設備,這部分可以不選。要使用USBUSBMassStoragesupport在系統(tǒng)中使用uname可以獲得系統(tǒng)版本信息。比如Redhat9:[root@lipsroot]#uname-r[root@lipsLiPS的系統(tǒng)中,我們也需要確定當前使用的內核版本,通過版本信息來?/usr/src/linux-2.4/Makefile中的變量EXTRAVERSION面是MakefileVERSION=SUBLEVEL=EXTRAVERSION=-8現(xiàn)在KERNELRELEASE2.4.20-8。這個信息會被編譯到內核中,uname工具會從內核文件中提取出版本號。如果將Makefile做一些修改,比如,EXTRAVERSION=-8-2.4.20-8-R2LipsLiPS而編譯的一個特定配置的內核,這個內核是以2.4.20-8為基礎,R2Lips(Release2Lips)即第二個版本。對Makefile內核配置(makemenuconfig)完成之后,會詢問:Doyouwishtosaveyournewkernelconfiguration? <No個隱藏文件,要用ls–a才看的到。.config是個文本文件,內容類似下面:##Loadablemodulesupport#CONFIG_MODVERSIONSisnotsetcp.config~/config-2.4.20-8-根文件系統(tǒng)initrd(初始化RAM盤)的使用方法。根文件系統(tǒng)Linux文件系統(tǒng)的內容應用程序(應用程序大致可以分為3部分,第一是操作系統(tǒng)正常運行所需的基本工具軟件,比如bash,cp,rmhttpd,telnetd,proftpd等;第OOEmbutils(http://www.fefe.de/embutils/)其詳細使用方法請參考相關資料,此處不再贅述。LIPS的實現(xiàn)目前沒有使用這些軟設備文件(device設備文件也可以稱作設備節(jié)點(devicenode)。設備文件非常重要,缺少某些有些設比如硬盤的設備文件,在完整的系統(tǒng)中一般有da,db,……,dt,即最多支持20個IE硬盤,每個硬盤有d1,d2,……,d2,(其中X表示t),即支持個分區(qū),另外還有表示I設備文件描述/dev/console /dev/hda[1-8]IDE/dev/initctl實際是一個FIFO設備,跟init有關(init與原init通/dev/initrdInitialRAM/dev/input(目錄)Inputcore(包括游戲桿、鼠標等/dev/kmem]/dev/mem/dev/nullNULL/dev/psauxPS/2/dev/ptmxUNIX98PTY/dev/pts(目錄)UNIX98PTY/dev/ptyp[0-7]偽終端主設備(遠程登錄使用/dev/ramRAMDisk設備。至少/dev/ram0是應用initrd/dev/ram鏈接到/dev/ram1/dev/random/dev/sda[1-8]SCSI/dev/shm/dev/systty指向系統(tǒng)tty設備的符號鏈接,一般是tty0/dev/ttyTTY/dev/tty[0-7]虛控制臺(Virtual/dev/ttyp[0-7]/dev/ttyS1串口(COM1/dev/urandom腳本和配置文件(scriptsandconfiguration系統(tǒng)和各種應用程序用到的幾乎所有的配置文件都位于/etcLinux最麻配置文件描述/etc/default(目錄)某個命令(比如useradd)的缺省設置(man/etc/ld.so.cacheldconfig命令根據(jù)/etc/ld.so.conf/etc/ld.so.conf庫文件路徑配置文件,ldconfig命令根據(jù)該配置文件生成/etc/fstab文件系統(tǒng)列表(man/etc/group組文件(man/etc/init.d符號鏈接到/etc/initlog.confInitlog日志配置文件(man/etc/inittabInit配置文件(man/etc/ioctl.save該文件包含了用于單用戶模式的串口和終端參數(shù),因為這些參數(shù)是由而在單用戶模式時沒有運行getty,所以用該文件保存參數(shù)。單用戶模式對系統(tǒng)安全是個威脅,我們應該禁止使用單用戶模式,因此這個文件實際并沒有必要復制過來。/etc/issue登錄信息和標識文件(man/etc/modules.conf模塊的配置文件(man/etc/mtab已經(jīng)掛載的文件系統(tǒng)列表(man/etc/nsswitch.confNameServiceSwitch的配置文件(配置名稱服務數(shù)據(jù)源和查詢的順序(mannss/etc/passwd用戶口令文件(man/etc/profile/etc/rc.d/etc/services列出可用的網(wǎng)絡服務及其端口(man/etc/termcap終端(terminal)功能數(shù)據(jù)庫(manapache/etc/httpd/conf/httpd.conf庫文件(程序用ldd工具來確定的。比如,要知道/bin/bash需要哪些庫文件,使用如下命[root@lipsxmdong]#lddlibtermcap.so.2=>/lib/libtermcap.so.2(0x40020000)libdl.so.2=>/lib/libdl.so.2(0x40024000)libc.so.6=>/lib/tls/libc.so.6/lib/ld-linux.so.2=>/lib/ld-linux.so.2對復制到新的根文件系統(tǒng)的每個可執(zhí)行程序,都要使用這種方法來確定其所需要的庫,然后把這些庫文件也復制過來。需要注意的是,有些庫文件使用/lib/libnss_files*這個庫是跟/etc/nsswitch.conf(man必要的目錄RAM盤(參考資料(mount)initrd技術主要設計用來讓系統(tǒng)啟動過程可以分兩個階段進行,首先讓內核以一組最小的、被編譯進內核里的驅動程序來啟動,然后從initrd中加載其他的模塊。操作步驟使用initrd引導器加載內核和初始化RAM內核把initrd轉到一個一般的RAM盤中,并且釋放原來被initrd占用的initrd執(zhí)行/linuxrc(linuxrc可以是任何可執(zhí)行文件,包括shell腳本在內;它具有uid0即超級用戶的權限,基本可以做init程序中能夠做的任何事情);在linuxrclinuxrc使用pivot_root在根文件系統(tǒng)執(zhí)行通常的引導過程(比如執(zhí)行initrd程在initrd 運行。另外,掛載在initrd目錄下的根文件系統(tǒng)仍然是可用的。引導選項initrd裝入指定的文件作為初始化RAM盤。當使用LILO當引導器時,你可以用/etc/lilo.conf文件中INITRD這個配置參數(shù),來指定初始化RAM盤文件。initrd的數(shù)據(jù)仍會保留,但不會裝入到一個RAM盤里,真正使用的根文件系統(tǒng)將會被掛載。initrd/dev/initrd這個設備中被讀出來。注意,initrd的數(shù)據(jù)可以是任注意:/dev/initrd是一個只讀并且只能使用一次的設備,最后一個程序一旦關閉它,initrd先被掛載成根目錄,接著進行正常的啟動過程(這時RAM盤仍被掛載成根)首先:我們要在正常的根文件系統(tǒng)中創(chuàng)建一個容納initrd#mkdir對目錄名稱并沒有特別的限制,在pivot_root(2)man手冊頁中有更詳細的說明。/initrd在某些情況下initrd(devfs下使用#mknod/dev/initrdb1250#chmod400/dev/initrd第二:支持初始化RAM盤的能力,及所有執(zhí)行格式和文件系統(tǒng)模塊,都必須直接編第三:必須制作一個RAM盤映像文件。大概的步驟是,在一個塊設備創(chuàng)建一個文件系統(tǒng),把需要的文件復制進去,然后把這個塊設備的內容輸出成一個initrd文件。目前至少有3種設備適合作為這種塊設備:O軟盤(能拿到任何地方試驗,但速度太慢ORAM盤(最快,但浪費內存OLoopback設備(比較合適的解決方案)下面,我們將討論使用loopback設備創(chuàng)建initrd1)確認lookback設備已經(jīng)配置到內核里。2)創(chuàng)建一個適當大小的空白文件系統(tǒng),例如:#ddif=/dev/zeroof=initrdbs=300kcount=1#mke2fs-F-m0#mount-text2-oloopinitrd#mkdir#mknod/mnt/dev/consolec5復制所有可能在initrd環(huán)境中用到的文件到/mnt目錄中。(別忘了/linuxrc件#chroot/mnt當然這樣啟用initrd還是有限制的,就是不能干擾正常系統(tǒng)的執(zhí)行狀態(tài)(比如重新配置網(wǎng)絡接口等等。如果在一個用pivot_root指令轉換根目錄的執(zhí)行環(huán)境中,就可以做這些#umount這時,初始化RAM盤系統(tǒng)就在“initrd”#gzip-9最后,必須啟動內核并載入initrdroot=/dev/ram0init=/linuxrc(只有需要寫入initrdrw參數(shù))。使用LOADLIN當引導器時,可以執(zhí)行:LOADLINC:\LINUX\BZIMAGEinitrd=C:\LINUX\INITRD.GZroot=/dev/ram0init=/linuxrcrwLILO/etc/lilo.confimage=/boot/bzImageinitrd=/boot/initrd.gzappend="root=/dev/ram0init=/linuxrc改變根目錄設備在執(zhí)行完重要任務的尾聲,linuxrc一般會執(zhí)行改變根目錄設備的動作,并讓所有程OO把initrdO結束所有舊的對initrdO卸載initrd文件系統(tǒng)并釋放RAM#mkdir/new-#mount-oro/dev/hda1/new-最終改變根文件系統(tǒng)由pivot_root()系統(tǒng)調用或者pivot_root工具來完成(參考手冊頁pivot_root(8))。pivot_root可以把當前根文件系統(tǒng)轉移到新根的一個目錄中,然后把指定的目錄當作新的根。在調用pivot_root之前,必須先為舊根準備目錄,例如:#cd/new-root#mkdir#pivot_root.#execchroot.what-follows<dev/console>dev/console其中what-follows是新根下面的一個程序,比如/sbin/init。(O在調用pivot_rootO使用“.”(當前目錄)作為pivot_root的第一個參數(shù)(新根),為舊根指定目錄OchrootO然后調用chrootO在execdev/console特別提示:讓initrd文件系統(tǒng)的目錄結構與新根文件系統(tǒng)的結構一致,有利于轉換過這時,initrd可以卸載,RAM#umount#blockdev--flushbufs注意:如果linuxrcchange_root使用場合實現(xiàn)initrd系統(tǒng)可以用一個最小配置的內核從軟盤或者其他存儲媒體啟動,然后載入initrd/linuxrc來決定需要什么來進一步掛載真實的根文件系統(tǒng)(如設備類型、驅動程序等)或者支持發(fā)行版媒體(CD-ROM,網(wǎng)絡,磁帶等);/linuxrc/linuxrc/linuxrc調用pivot_root改變根文件系統(tǒng),并通過chroot一個程序(繼續(xù)安裝過程引導器被配置成裝入initrdInitrd的關鍵作用是能夠多重配置一個正常操作的系統(tǒng),而不需要用一個龐大淘汰的根轉換機制(#echo0x301>/proc/sys/kernel/real-root-系統(tǒng)初始化(參考資料init的任務UNIX的init指的不是一個程序、而是一類程序。Init一般是指系統(tǒng)引導時執(zhí)行的第一產生init這一個進程,而系統(tǒng)中其他所有進程都是由init負責產生(spawn),主要包括OOO負責清理系統(tǒng)中的“僵尸”進程(init是所有其他進程的祖先O處理系統(tǒng)關機(stop所有進程,unmount文件系統(tǒng)內核并不關心拿什么來作為系統(tǒng)的initOSysVinit(作者:MiquelvanSmoorenburg),或者Osimpleinit(作者:PeterOrbaek),或者O一個shellO不過路徑名字必須是/b/t,//t,或b/t(因為已經(jīng)編譯到內核里面了)。定tt。Linux發(fā)行版使用的init是SysVinit,也就是SystemVUNIX的實現(xiàn)。其主要思細節(jié)請參考手冊頁inittab(5)整個過程中用到的腳本都放在/etc/rc.dSlackwarevs關于配置文件/etc/inittab和腳本/etc/rc.d的實現(xiàn)和組織主要有兩種不同的風格,其有代表性的發(fā)行版分別為SlackwareDebian(RedhatDebian)。這兩種風格之間有幾個例如在/etc/inittab中,定義進入運行級別0時運行的腳本分別為/etc/rc.d/rc.0和/etc/init.d/rc0(Redhat中/etc/init.d是指向/etc/rc.d/init.d0rc的命令行參數(shù))。因此,Slackware風格的/etc/rc.d中應該是一系列相對獨立的腳本,對應于配置文件中每個動作的定義(我沒有見過Slackware哦)。在我們所熟悉的Redhat中,/etc/rc.d的組織要復雜的多,每個運行級別對應一個子目錄/etc/rc.d/rcX.d(X0~6),下面放的是一系列形如SXXfooKXXbar(S表示Start某個服務,K表示Kill某個服務,XX是兩位數(shù)字,決定了該腳本執(zhí)行的順序)的符號鏈接,指向/etc/rc.d/init.d中的腳本,每個腳本對應一項服務程序。另外,還有兩個重要腳本值得一提 (完成系統(tǒng)初始化的各項工作)/etc/rc.d/rc.local在最后執(zhí)行(DOS讀一下/etc/rc.d/rc.sysinit,/etc/rc.d/rc和/etc/rc.d/init.d/Redhat的據(jù)說Slackware風格比Debian的速度要快一些。可能是后者的組織結構比較復雜的緣PAM(PluggableAuthenticationModules)是為了解決計算機系統(tǒng)中用戶認證的問題而引入的一種實現(xiàn)方案。PAM的目標為:O為這些認證模塊建立標準API;O認證機制對其層用戶(包括應用程序和最終用戶)PAM機制由SUN設計并首先在Solaris2.3 部分實現(xiàn),后來逐漸在其他UNIX平臺實現(xiàn),包括Linux(其實現(xiàn)稱為Linux-PAM)。PAM的結構PAM采用分層的體系結構。最下面是模塊層,負責實現(xiàn)具體的認證功能,包括帳戶管理(account)、口令鑒別(auth)、口令管理(password)和會話管理(session)4個模應用接口層位于模塊層之,調用下層提供的服務,并向(應用程序)隱藏配置文件/etc/pam.d(如果存在這個目錄,則忽略/etc/pam.conf5項(Linux-PAM的手冊頁pam(8)中有更詳細的描述servicetypecontrolmodule-pathmodule-Service是服務的名字,比如login,su等。注意,/etc/pam.d目錄下面有許多配置文件,分別對應某項系統(tǒng)服務,文件名即等于service,因此每行只有4項。e為coutathaodeon使用多個認證模塊,或者說可以將模塊“堆疊”使用,但是每一行只能定義一個,因此一Control規(guī)定了如何處理模塊認證失敗或成功,可以是requisite、required、sufficientModule-pathPAM庫文件的文件名。缺省路徑是/lib/security/服務的規(guī)則,就用otherPAM的最簡配置為,只有/etc/pam.d/other這一個配置文件,即可處理所有的認證請求。下面是我們用過的一個other[xmdong@lipspam.d]$catother accountrequired passwordrequired sessionrequired 5.3節(jié)中,對initrd機制已經(jīng)有了比較詳細的討論。準確的說,該部分內容來適用。是新版本內核的變化造成的(內核實現(xiàn)與文檔不同步),還是2.4版內核的后來我又專門讀了2.2版內核中所附帶的initrd.txt文件。我感覺實際的情況似乎更接近于這個老文檔的描述。我還看到一個有關的patch文件,從該文件中可以明確看到新的UsingtheinitialRAMdiskinitrd) HansLermen> HansLermen-initrdaddsthecapabilitytoloadaRAMdiskbythebootloader.-RAMdiskcanthenbemountedastherootfilesystemandprogramscanbe-runfromit.Afterwards,anewrootfilesystemcanbemounted
-differentdevice.Thepreviousroot(frominitrd)istheneither-tothedirectory/initrdoritis+initrdprovidesthecapabilitytoloadaRAMdiskbytheboot+ThisRAMdiskcanthenbemountedastherootfilesystemand+canberunfromit.Afterwards,anewrootfilesystemcanbe+fromadifferentdevice.Thepreviousroot(frominitrd)isthen+toadirectoryandcanbesubsequently、老文檔為initrd.txt-2000和initrd.txt-根到底在哪里在配置使用initrd之前,首先你要清楚,系統(tǒng)正常運行時,根文件系統(tǒng)掛載在什么設備(也就是說,rootdevice是什么——root在哪里?)。我們知道,使用initrd機制的話,系統(tǒng)啟動時先以RAMDisk(/dev/ram0)作為根,然后通過某種方法將根轉換到“真實的根(real-root-dev)”(之所以說real,是與前面的RAM里臨時的根比較而言)initrd,然后切換到一個硬盤分事實,這個根轉換不是必須的。我們完全可以就把/dev/ram0作為我們真實的根設備。這時,系統(tǒng)啟動之后所有的操作都在RAMDisk中進行。當然這樣做也有一個明顯的缺點,即無法保存數(shù)據(jù)。比如對系統(tǒng)配置進行的修改(象IP地址),重新啟動之后就丟LiPS目前的做法就是這一種(沒有根轉換,initrd就是真實的根)。為了在重新啟動之后保持配置文件的修改,我們將目錄/etc鏈接到了其他非易失存儲器(例如,一個硬盤分區(qū),或者USB盤的分區(qū))。kernel/boot/bzImageroramdisk_size=65536root=/dev/ram0initrd/boot/initrd.imgramdisk_size=65536說明初始RAM64MB,root=/dev/ram0說明根的位置。下面第二個例子來自一臺在hda1安裝了Redhat9的機子:kernel/boot/vmlinuz-2.4.20-8roroot=/dev/hda1initrd/boot/initrd-2.4.20-8.img很明顯,這里root=/dev/hda1指定了真實的根,其啟動過程包含根的轉換。但是這里沒有指定ramdisk_size,因為initrd的缺省大小是4MB,而initrd-2.4.20-8.img比較小,所(root,rootfilesystemrootdevice,自己體會吧。initrd機制的設計中,初始RAM盤只是作為一個過渡性質的根設備,由/linuxrc來Linuxrc的執(zhí)行是自動的,即內核掛載initrd盤作為根,如果根下面有這個文件(也就是/linuxrc),就執(zhí)行它。(linuxrc也并不是必不可接下來說說linuxrc的內容。下面的例子是從initrd-2.4.20-8.img[root@lipsinitrd]#catlinuxrcecho"Loadingjbd.omodule"insmod/lib/jbd.oecho"Loadingext3.omodule"insmod/lib/ext3.oechoMounting/procfilesystemmount-tproc/proc/procechoCreatingblockdevicesmkdevices/devechoCreatingrootdevicemkrootdev/dev/rootecho0x0100>/proc/sys/kernel/real-root-devechoMountingrootfilesystemmount-odefaults--ro-text3/dev/root/sysrootpivot_root/sysroot/sysroot/initrdumount該腳本中首先加載了支持et3文件系統(tǒng)所需的模塊,然后掛載真實的根文件系統(tǒng),并進行轉換。特別需要注意的是,iuc腳本一般是用ah解釋執(zhí)行的,而不是通常的ahh的詳情請看手冊頁as8ah內置實現(xiàn)了多數(shù)在執(zhí)行iuc這個階段可能用到的命令,比如out,ptoout;而如果使用ash,象out外部命令”b/ot到td,在td.2-.gbn中只有sod和ahopbe符號鏈接到so[root@lipsinitrd]#lsbin/insmodmodprobenash5.3.4節(jié)描述的方法測試linuxrcmount–oro/dev/hda11/sysrootcd/sysroot第一,nash實現(xiàn)的mount命令語法與我們常用的/bin/mount并不完全兼容;第二,nash根本沒有實現(xiàn)cd命令。因此,可以推斷initrd.txt-2000中講linuxrc時所舉例子不是用的nash。實際在該文檔中根本沒有指明用什么shell。再回頭仔細看才發(fā)現(xiàn),所有例句都是在rootshell命令提示符“#”后面的,那么它用的是bash之類了。但是令人迷惑的是,同樣在該小節(jié)中稍后出現(xiàn)如下例句:#execchroot.what-follows<dev/console>dev/console2>&1為什么用exec執(zhí)行chroot呢?chroot可以在命令行直接用啊。文檔中講到,what-follows可以是/sbin/init。我用nash試了下面這個句子(nash中用exec執(zhí)行外部命令):execchroot./sbin/init<dev/console>dev/consoleUsage:init開始我還以為后面那一串是個“magicnumber”,后來想以Usage開頭應該是講使用這init(8)手冊頁,果然要求給一個參數(shù),0~6當然是運行級別啦,試了一個init3也還是不行。尤其搞不明白后面那些個console什么意思。根轉換機制:新的?舊的?initrd.txt的兩個版本中,分別描述了兩種根轉換機制,其中2000版中稱1996版的內容已經(jīng)“過時”,不推薦使用。然而事實要麻煩的多,O使用initrd機制,已經(jīng)準備好了根文件系統(tǒng)映像文件initrd.imgOinitrd.img的所有內容釋放到一個硬盤分區(qū)/dev/hda11,ext2O在 面增加一個/boot目錄,存放bzImage和initrd.img文件O以/dev/ram0作為根啟動,然后以某種機制轉換到“真實的根”/dev/hda11系統(tǒng)的引導器是GRUB,安裝在硬盤MBR,grub.conf位于/dev/hda1(也就是做測試的實際的根文件系統(tǒng))。按照述環(huán)境配置,在grub.conf中增加如下內容:titlelips rootkernel/boot/bzImageroroot=/dev/hda11ramdisk_size=65536initrd/boot/initrd.img第一,如果沒有/linuxrc會怎么樣呢?結果是系統(tǒng)能夠成功啟動到以/dev/hda11作為根,并且把initrd(也就是舊根文件系統(tǒng))的內容移到了/initrd目錄。這是符合initrd.txt-1996文檔中第一段的描述的。所以只要你使用了initrd,指定了新的根,并且準備好了/initrd目錄(已經(jīng)在/dev/hda11創(chuàng)建了/initrd),內核可以自動完成根的轉換工作。終端面有如Tryingtomoveoldrootto 這里有個小問題,即最后/initrd沒有卸載,這意味著initrd所分配內存也沒有釋放。因此umount/initrd不是內核自動完成的,而應該在/linuxrc中的某個位置進行。如果linuxrc僅包含卸載/initrd的命令,如下:umount/initrd則執(zhí)行情況是這樣的:umount命令報錯(返回錯誤碼22),然后出現(xiàn)前面所示Trying…linuxrc如果沒有/initrd目錄會怎樣?我們把 面的/initrd目錄刪除,重新啟(沒有/linuxrc),結果是可以啟動到以/dev/hda11為根,且看不到原來的initrd。該過程中Tryingtomoveoldrootto UnmoutingoldTryingtofreeramdisk 第二,pivot_root可以用,但是chroot在nash中不能用cd命令造成的困惑(這個問題前面已經(jīng)說明)pivot_root基本是成功的。/linuxrc腳本的主要內容如下:mount-odefaults--ro-text2/dev/hda11/sysrootpivot_root/sysroot/sysroot/initrdVFS:Cannotopenrootdevice“hda11”or03:0bPleaseappendacorrect“root=”bootoptionKernelpanic:VFS:Unabletomountrootfson如果按照initrd.txt-2000的指導,pivot_root之后應該執(zhí)行chroot,但是我始終沒有辦法使chroot成功執(zhí)行(有關情況前面已經(jīng)說明)。不過可以肯定的是,pivot_root執(zhí)行成initrd.txt的新版本中最后一節(jié)專門指出,向/proc/sys/kernel/real-root-ev文件中echo數(shù)字的方法(change_root機制)是過時的。然而令人迷惑的是,Redhat9的缺省安裝產生的initrd-2.4.20-8.img中(前面已經(jīng)列出了其/linuxrc文件內容),同時使用了pivot_root和change_root機制。測試下列/linuxrc腳本,系統(tǒng)可以啟動到/dev/hda11,但是/initrd沒有卸載。如果在腳本末尾umount/initrd,會返回錯誤碼16。mount-tproc/proc/procmkrootdev/dev/rootecho0x0100>/proc/sys/kernel/real-root-dev#echo0x030b>/proc/sys/kernel/real-root-devmount-odefaults--ro-text2/dev/hda11/sysrootpivot_root/sysroot/sysroot/initrdumountreal-root-devreal-root-dev的值是什么東西的正式文檔,根據(jù)情況判斷的話,如果述判斷準確的話,那么寫入0100就表示/dev/ram0。這就奇怪了,“真實的根設備”應該是/dev/hda11030b030b同樣會導致Kernelpanic:VFS:Unabletomountrootfson文件系統(tǒng)目錄層次結構根文件系統(tǒng)的目錄結構最好符合FilesystemHierarchyStandard(文件系統(tǒng)層次標順便說一下,象這種情況:/bin,/sbin,usr/binusr/sbin4個目錄都可以放應用程序,用程序放在/bin,只能給超級用戶root訪問的關鍵應用程序放在/sbin,相比之下比較次要的應用程序和root應用程序分別放在/usr/bin和/usr/sbin。mklips.sh(LiPS的腳本)復制文件的工作全部可以手工進行,但是做一個shell腳本來完成所有工作顯然是一在我們的項目中,制作LiPS(也就是完成裁減Linux)的工作,除了編譯內核之外,都可以通過mklips.sh腳本完成。lips.conf(LiPS配置文件)lips.confLiPS的配置文件,由mklips.shLiPS系通過一系列的INCLUDE_?=yes或者no,可以實現(xiàn)LIPS的模塊化。在mklips.sh腳本中,判斷每個INCLUDE的值,來確定是否復制某個模塊相關的文件。cp復制文件請使用“cp–dpR”命令,可以保留文件的屬性(特別是對于設備節(jié)點和符號如何判斷一個程序依賴哪些文件重要依據(jù)。我們以安裝ApacheServer為例來說明判斷復制哪些文件的過程。首先確定其可執(zhí)行文件是/usr/sbin/httpd。然后看httpd[root@lipslips]#manhttpdhttpd-Apachehypertexttransferprotocol…………(略February們就知道了httpd要在目標系統(tǒng)中運行,這幾個配置文件是必不可少的。把httpd和用ldd找出的庫文件以及述配置文件復制到目標系統(tǒng),運行httpd試一下,httpd比較特殊,除了ldd找出的庫文件外,查看日志中的信息,/var/log/messages或者應用程序日志),httpd報告缺少什么;還可以看看相關的配置文件httpd.conf,也能找到有用的信息。然后我們發(fā)現(xiàn)需要/usr/lib/httpd帶庫文件復制——在復制可執(zhí)行文件(軟件)的過程中,如果沒有正確復制相關的庫文件,該軟件肯定不能在目標系統(tǒng)中正常運行。而通過d命令手工確定每個軟件的庫文件,是一個繁瑣應的庫文件是否需要刪除呢?如果刪除了,而該庫文件是其他軟件也需要的,會導致其()#BINBINPATH:可執(zhí)行文件的目標路徑(復制到哪里)#LIBPATH:相關庫文件的目標路徑run()shell命令,并在遇到錯誤時報錯、寫錯#首先復制BINrun"$CP$BIN使用ldd找出與BIN相關的庫文件,把lddLDDSTRLDDSTR=`ldd$BIN`forSTRin$LDDSTR;do#判斷出庫文件路徑LIB=`echo$STR|grep"/lib/"`if[-z"$LIB"];then復制LIBLIBPATH,除非要復制的庫文件在目標路徑中已經(jīng)存在LIBNAME=`basename$LIB`run"$CP$LIB$LIBPATH"run"cp$LIB}
庫文件的命名(參考資料[9]6.2節(jié)我們這里所說的“庫”都是指的GNUCLibraryglibc。在/lib下面可以看到很多庫文件,主要分為4類:O實際的共享庫(Actualshared文件名格式為libLIBRARY_NAME-GLIBC_VERSION.soLIBRARY_NAME是庫的真正名稱,GLIBC_VERSION是glibcglibc2.2.3math(數(shù)學)庫的文O主修訂版本符號鏈接(Majorrevisionversionsymbolic庫的主修訂版本號與glibc版本號不同。比如,glibc2.2.3的C共享庫libc-2.2.3的6,libdl-2.2.32O版本無關的符號鏈接(Version-independentsymboliclinkstothemajorrevisionversionsymboliclinks)鏈接到libm.so.6,libm.so.6又鏈接到libm-2.2.3.so。唯一的例外是libc.so,是個腳本。連接O靜態(tài)庫文件(Staticlibrary這些庫是應用程序靜態(tài)連接用的。格式為引導引導過程概述幾種引導方式grub引導器制作引導盤之前,最好先了解一下grub引導器。Grub是一個通用的多引導加載軟件,與較早期多數(shù)Linux本文檔不是grub的教學文檔,所以有關grub的詳細用法,請參考其他有關文檔。這O引導盤的文件系統(tǒng)可以是ext2,ext3,msdosFAT),vfatFAT32)Ogrub表示硬盤、分區(qū)的方式與Linux的方式不同。Linux系統(tǒng)的IDE硬盤表示為/dev/hd{a,b,c,d},SCSI設備表示為/dev/sd{a,b,c,d,…}1開始編號,比如PrimaryMasterIDE硬盤的第二個分區(qū)是/dev/hda2;而grub的硬盤(包括IDESCSI)0開始編號,分區(qū)也是從0開始編號,比如系統(tǒng)中的第一個硬盤是(hd0),其第一個分區(qū)是O在grub的提示符下面輸入命令和參數(shù)時,按TABUSB使用USBIDE接口,攜制作步驟創(chuàng)建文件系統(tǒng)首先,必須在USB盤面創(chuàng)建文件系統(tǒng)(也就是格式化)。你幾乎可以使用grub支持的所有文件系統(tǒng),包括常見的各種文件系統(tǒng),比如ext2,ext3,F(xiàn)AT,F(xiàn)AT32等。但是根O最好不要使用FATmsdos,因為FAT的文件名有“8.3”的限制,所以象“grub.conf”這OFAT和FAT32都不能表示符號鏈接文件,雖然有變通的方法,即將文件再復制一份。順便說一下在Linux下面怎么訪問USB盤。如果系統(tǒng)中沒有其他的SCSI設備,那么插在USB1接口面的USB/dev/sda,其分區(qū)為/dev/sda1。依此類推。一般插入USB盤后,窗口中會出現(xiàn)驅動#mke2fs#mount–text2/dev/sda1注意:Redhat7.3Intel845復制文件按照下面的列表,復制文件(包括目錄結構)USB/boot/bzImage或者vmlinuzmenu.lst符號鏈接安裝grubUSBIDE硬盤,這時USB盤是grub看到grub>root(hd1,0)grub>setuproot命令告訴grub,內核文件所在的位置。Setup命令安裝grub到hd1的引導扇區(qū),如果是setup(hd1,0),則安裝到第一個分區(qū)(即/dev/sda1)。USB在用新制作的USB引導盤引導之前,還需要確認BIOS的一個設置,即第一個啟動OK,插USB版本問題?我們的項目開始的時候用Redhat7.3,但是后來做USB引導盤時發(fā)現(xiàn),我們的環(huán)境不支持USB盤。我想Redhat7.3應該是支持USB7.1下面就用過。那么有可能是主板的問題,i845的芯片組比Redhat7.3要新,也許是沒有該芯片組的正確驅后來在Redhat0Linux內核即可正常支持USB盤。然而還有一個問題,Redhat7.3GRUB版本是0.91,在使用中發(fā)現(xiàn),制作USB引導盤沒有問題,但是一旦你改變USB盤的文件(比如復制一個新的文件去),本來可以引導的USB盤就不行了。Redhat9.0使用的是GRUB0.93,就沒有述問題,并且使用USB盤也沒有問題。也就是說,使用Redhat9就可以了。不過Redhat9集成的其他很多軟件也有變化,比如Apache升級到了2.0版本,以前的httpd.conf配置文件要修改過之后才能正常使用;另外quota接口也有變化。遠程串口控制臺配置方法Linux遠程串口控制臺指南(這是我以前寫的一份簡單的文檔,曾經(jīng)貼到網(wǎng),附在這里供參考Linuxdot<anonymou@163.com>Dec27,200222年圣誕節(jié)期間,我在Rdatnx.0(eel..-2)平臺配置了遠程串口首先參考"Linux-Remote-Serial-Console-HOWTO",該文檔已經(jīng)足夠詳盡,按要求一Redhat7.27.0有些差異,不過問題不開始我并沒有在意這個問題,我手頭有一根以前做的直連電纜,是只用了3根線的那種(23交叉,5對接)HOWTO文檔中講電
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 服飾業(yè)企業(yè)營銷創(chuàng)新策略研究考核試卷
- 儀器儀表制造業(yè)的協(xié)同創(chuàng)新考核試卷
- 塑料制品在通風設備上的應用考核試卷
- 婚禮現(xiàn)場攝像師聘請合同
- 漁業(yè)機械焊接施工合同
- 醫(yī)院檢驗科主任合同
- 智能交通通訊指南
- 攝影攝像預付卡拍攝須知
- 樓宇拆遷挖掘合作協(xié)議
- 供熱工程安裝合同
- 小企業(yè)會計準則財務報表
- 澄明之境:青澤談投資之道
- 無人機基礎 教案
- 機電運輸專項檢查實施方案
- 服裝公司組織架構及崗位職責
- 英語語法與長難句理解知到章節(jié)答案智慧樹2023年山東石油化工學院
- 體育館防雷接地方案
- 淮劇專題講座
- 電影院信息管理系統(tǒng)設計Word
- 兒科學教學課件:兒童股骨干骨折
- 手機攝影入門演示文稿
評論
0/150
提交評論