https://wiki.archlinux.org/api.php?action=feedcontributions&user=Archvill&feedformat=atomArchWiki - User contributions [en]2024-03-19T07:00:11ZUser contributionsMediaWiki 1.41.0https://wiki.archlinux.org/index.php?title=Simple_stateful_firewall&diff=320970Simple stateful firewall2014-06-21T13:38:19Z<p>Archvill: /* UDP scans */ fixed reject-with message names</p>
<hr />
<div>[[Category:Firewalls]]<br />
[[ru:Simple stateful firewall]]<br />
This page explains how to set up a stateful firewall using [[iptables]]. It also explains what the rules mean and why they are needed. For simplicity, it is split into two major sections. The first section deals with a firewall for a single machine, the second sets up a NAT gateway in addition to the firewall from the first section.<br />
<br />
{{Warning| The rules are given in the order that they are executed. If you are logged into a remote machine, you may be locked out of the machine while setting up the rules. You should only follow the steps below while you are logged in locally.<br />
<br />
The [https://wiki.archlinux.org/index.php/Simple_Stateful_Firewall#Example_iptables.rules_file example config file] can be used to get around this problem.<br />
}}<br />
<br />
== Prerequisites ==<br />
<br />
{{Note|Your kernel needs to be compiled with iptables support. All stock Arch Linux kernels have iptables support.}}<br />
<br />
First, install the userland utilities {{Pkg|iptables}} or verify that they are already installed.<br />
<br />
This article assumes that there are currently no iptables rules set. To check the current ruleset and verify that there are currently no rules run the following:<br />
<br />
{{hc|# iptables-save|<nowiki><br />
# Generated by iptables-save v1.4.19.1 on Thu Aug 1 19:28:53 2013<br />
*filter<br />
:INPUT ACCEPT [50:3763]<br />
:FORWARD ACCEPT [0:0]<br />
:OUTPUT ACCEPT [30:3472]<br />
COMMIT<br />
# Completed on Thu Aug 1 19:28:53 2013<br />
</nowiki>}}<br />
<br />
or<br />
<br />
{{hc|# iptables -nvL --line-numbers|<nowiki><br />
Chain INPUT (policy ACCEPT 156 packets, 12541 bytes)<br />
num pkts bytes target prot opt in out source destination<br />
<br />
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)<br />
num pkts bytes target prot opt in out source destination<br />
<br />
Chain OUTPUT (policy ACCEPT 82 packets, 8672 bytes)<br />
num pkts bytes target prot opt in out source destination<br />
</nowiki>}}<br />
<br />
If there are rules, you may be able to reset the rules by loading a default rule set:<br />
<br />
# iptables-restore < /etc/iptables/empty.rules<br />
<br />
Otherwise, see [[Iptables#Resetting_rules]].<br />
<br />
== Firewall for a single machine ==<br />
<br />
{{Note|Because iptables processes rules in linear order, from top to bottom within a chain, it is advised to put frequently-hit rules near the start of the chain. Of course there is a limit, depending on the logic that is being implemented. Also, rules have an associated runtime cost, so rules should not be reordered solely based upon empirical observations of the byte/packet counters.}}<br />
<br />
=== Creating necessary chains ===<br />
<br />
For this basic setup, we will create two user-defined chains that we will use to open up ports in the firewall.<br />
<br />
# iptables -N TCP<br />
# iptables -N UDP<br />
<br />
The chains can of course have arbitrary names. We pick these just to match the protocols we want handle with them in the later rules, which are specified with the protocol options, e.g. {{ic|-p tcp}}, always.<br />
<br />
=== The FORWARD chain ===<br />
<br />
If you want to set up your machine as a NAT gateway, please look at the [[#Setting up a NAT gateway|second section of this guide]]. For a single machine, however, we simply set the policy of the '''FORWARD''' chain to '''DROP''' and move on:<br />
<br />
# iptables -P FORWARD DROP<br />
<br />
=== The OUTPUT chain ===<br />
<br />
We have no intention of filtering any outgoing traffic, as this would make the setup much more complicated and would require some extra thought. In this simple case, we set the '''OUTPUT''' policy to '''ACCEPT'''.<br />
<br />
# iptables -P OUTPUT ACCEPT<br />
<br />
=== The INPUT chain ===<br />
<br />
First, we set the default policy for the '''INPUT''' chain to '''DROP''' in case something somehow slips by our rules. Dropping all traffic and specifying what is allowed is the best way to make a secure firewall.<br />
{{Warning|This is the step where you will be locked out if you are logged in via SSH. Therefore do this step following your rule regarding port 22 (or whatever port you're using for SSH) to prevent being locked out.}}<br />
<br />
# iptables -P INPUT DROP<br />
<br />
Every packet that is received by any network interface will pass the '''INPUT''' chain first, if it is destined for this machine. In this chain, we make sure that only the packets that we want are accepted.<br />
<br />
The first rule will allow traffic that belongs to established connections, or new valid traffic that is related to these connections such as ICMP errors, or echo replies (the packets a host returns when pinged). '''ICMP''' stands for '''Internet Control Message Protocol'''. Some ICMP messages are very important and help to manage congestion and MTU, and are accepted by this rule.<br />
<br />
# iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT<br />
<br />
The second rule will accept all traffic from the "loopback" (lo) interface, which is necessary for many applications and services.<br />
<br />
{{Note|You can add more trusted interfaces here such as "eth1" if you do not want/need the traffic filtered by the firewall, but be warned that if you have a NAT setup that redirects any kind of traffic to this interface from anywhere else in the network (let's say a router), it'll get through, regardless of any other settings you may have.}}<br />
<br />
# iptables -A INPUT -i lo -j ACCEPT<br />
<br />
The third rule will drop all traffic with an "INVALID" state match. Traffic can fall into four "state" categories: NEW, ESTABLISHED, RELATED or INVALID and this is what makes this a "stateful" firewall rather than a less secure "stateless" one. States are tracked using the "nf_conntrack_*" kernel modules which are loaded automatically by the kernel as you add rules.<br />
<br />
{{Note|<br />
* This rule will drop all packets with invalid headers or checksums, invalid TCP flags, invalid ICMP messages (such as a port unreachable when we did not send anything to the host), and out of sequence packets which can be caused by sequence prediction or other similar attacks. The "DROP" target will drop a packet without any response, contrary to REJECT which politely refuses the packet. We use DROP because there is no proper "REJECT" response to packets that are INVALID, and we do not want to acknowledge that we received these packets.<br />
* ICMPv6 Neighbor Discovery packets remain untracked, and will always be classified "INVALID" though they are not corrupted or the like. Keep this in mind, and accept them before this rule! iptables -A INPUT -p 41 -j ACCEPT<br />
}}<br />
<br />
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP<br />
<br />
The next rule will accept all new incoming '''ICMP echo requests''', also known as pings. Only the first packet will count as NEW, the rest will be handled by the RELATED,ESTABLISHED rule. Since the computer is not a router, no other ICMP traffic with state NEW needs to be allowed.<br />
<br />
# iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT<br />
<br />
Now we attach the TCP and UDP chains to the INPUT chain to handle all new incoming connections. Once a connection is accepted by either TCP or UDP chain, it is handled by the RELATED/ESTABLISHED traffic rule. The TCP and UDP chains will either accept new incoming connections, or politely reject them. New TCP connections must be started with SYN packets.<br />
<br />
{{Note| NEW but not SYN is the only invalid TCP flag not covered by the INVALID state. The reason is because they are rarely malicious packets, and they should not just be dropped. Instead, we simply do not accept them, so they are rejected with a TCP RST by the next rule.}}<br />
<br />
# iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP<br />
# iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP<br />
<br />
We reject TCP connections with TCP RST packets and UDP streams with ICMP port unreachable messages if the ports are not opened. This imitates default Linux behavior (RFC compliant), and it allows the sender to quickly close the connection and clean up.<br />
<br />
# iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable<br />
# iptables -A INPUT -p tcp -j REJECT --reject-with tcp-rst<br />
<br />
For other protocols, we add a final rule to the INPUT chain to reject all remaining incoming traffic with icmp protocol unreachable messages. This imitates Linux's default behavior.<br />
<br />
# iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable<br />
<br />
=== Example iptables.rules file===<br />
<br />
Example of {{ic|iptables.rules}} file after running all the commands from above:<br />
<br />
{{hc|/etc/iptables/iptables.rules|<br />
# Generated by iptables-save v1.4.18 on Sun Mar 17 14:21:12 2013<br />
*filter<br />
:INPUT DROP [0:0]<br />
:FORWARD DROP [0:0]<br />
:OUTPUT ACCEPT [0:0]<br />
:TCP - [0:0]<br />
:UDP - [0:0]<br />
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT<br />
-A INPUT -i lo -j ACCEPT<br />
-A INPUT -m conntrack --ctstate INVALID -j DROP<br />
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT<br />
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP<br />
-A INPUT -p tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP<br />
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable<br />
-A INPUT -p tcp -j REJECT --reject-with tcp-reset<br />
-A INPUT -j REJECT --reject-with icmp-proto-unreachable<br />
COMMIT<br />
# Completed on Sun Mar 17 14:21:12 2013<br />
}}<br />
<br />
This file can be generated with:<br />
<br />
# iptables-save > /etc/iptables/iptables.rules<br />
<br />
and can be used to prevent blocking yourself out if you are setting up the firewall remotely, just remember to append this line to allow SSH connections on port 22:<br />
<br />
-A TCP -p tcp --dport 22 -j ACCEPT<br />
<br />
=== The TCP and UDP chains ===<br />
<br />
The TCP and UDP chains contain rules for accepting new incoming TCP connections and UDP streams to specific ports.<br />
<br />
{{Note|This is where you need to add rules to accept incoming connections, such as SSH, HTTP or other services that you want to access remotely.}}<br />
<br />
==== Opening ports to incoming connections ====<br />
<br />
To accept incoming TCP connections on port 80 for a web server:<br />
<br />
# iptables -A TCP -p tcp --dport 80 -j ACCEPT<br />
<br />
To accept incoming TCP connections on port 443 for a web server (HTTPS):<br />
<br />
# iptables -A TCP -p tcp --dport 443 -j ACCEPT<br />
<br />
To allow remote SSH connections (on port 22):<br />
<br />
# iptables -A TCP -p tcp --dport 22 -j ACCEPT<br />
<br />
To accept incoming UDP streams on port 53 for a DNS server:<br />
<br />
# iptables -A UDP -p udp --dport 53 -j ACCEPT<br />
<br />
See {{Ic|man iptables}} for more advanced rules, like matching multiple ports.<br />
<br />
==== Port knocking ====<br />
Port knocking is a method to externally open ports that, by default, the firewall keeps closed. It works by requiring connection attempts to a series of predefined closed ports. When the correct sequence of port "knocks" (connection attempts) is received, the firewall opens certain port(s) to allow a connection. See [[Port Knocking]] for more information.<br />
<br />
=== Protection against spoofing attacks ===<br />
<br />
{{Note|{{ic|rp_filter}} is currently set to {{ic|1}} by default in {{ic|/usr/lib/sysctl.d/50-default.conf}}, so the following step is not necessary.}}<br />
<br />
Blocking reserved local addresses incoming from the internet or local network is normally done through setting the {{Ic|rp_filter}} sysctl to 1. To do so, add the following line to your {{Ic|/etc/sysctl.d/90-firewall.conf}} file (see [[sysctl]] for details) to enable source address verification which is built into Linux kernel itself. The verification by the kernel will handle spoofing better than individual iptables rules for each case.<br />
<br />
net.ipv4.conf.all.rp_filter=1<br />
<br />
Only when asynchronous routing or {{ic|1=rp_filter=0}} is used, extra checks are necessary:<br />
<br />
# iptables -I INPUT ! -i lo -s 127.0.0.0/8 -j DROP<br />
<br />
=== "Hide" your computer ===<br />
<br />
If you are running a desktop machine, it might be a good idea to block some incoming requests.<br />
<br />
==== Block ping request ====<br />
<br />
A 'Ping' request is an ICMP packet sent to the destination address to ensure connectivity between the devices. If your network works well, you can safely block all ping requests. It is important to note that this ''does not'' actually hide your computer — any packet sent to you is rejected, so you will still show up in a simple nmap "ping scan" of an IP range.<br />
<br />
This is rudimentary "protection" and makes life difficult when debugging issues in the future. You should only do this for education purposes.<br />
<br />
To block echo requests, add the following line to your {{Ic|/etc/sysctl.d/90-firewall.conf}} file (see [[sysctl]] for details):<br />
<br />
net.ipv4.icmp_echo_ignore_all = 1<br />
<br />
Rate-limiting is a better way to control possible abuse. This first method implements a global limit (ie, only X packets per minute for all source addresses):<br />
<br />
# iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 30/min --limit-burst 8 -j ACCEPT<br />
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP<br />
<br />
Or using the 'recent' module, you can impose a limit per source address:<br />
<br />
# iptables -A INPUT -p icmp --icmp-type echo-request -m recent --name ping_limiter --set<br />
# iptables -A INPUT -p icmp --icmp-type echo-request -m recent --name ping_limiter --update --hitcount 6 --seconds 4 -j DROP<br />
# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT<br />
<br />
If you choose to use either the rate limiting or the source limiting rules the PING rule that already exists in the INPUT chain needs to be deleted. This can be done as shown below, or alternatively don't use it in the first place. <br />
# iptables -D INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT<br />
<br />
Next you need to decide where you wish to place the rate limiting or source limiting rules. If you place the rules below the RELATED,ESTABLISHED rule then you will be counting and limiting new ping connections, not each ping sent to your machine. If you place them before the RELATED,ESTABLISHED rule then these rules will count and limit each ping sent to your machine, not each ping connection made. <br />
<br />
More information is in the iptables man page, or reading the docs and examples on the webpage http://snowman.net/projects/ipt_recent/<br />
<br />
==== Tricking port scanners ====<br />
<br />
{{Note|This opens you up to a form of [[Wikipedia:Denial-of-service attack|DoS]]. An attack can send packets with spoofed IPs and get them blocked from connecting to your services.}}<br />
<br />
Port scans are used by attackers to identify open ports on your computer. This allows them to identify and fingerprint your running services and possibly launch exploits against them.<br />
<br />
The INVALID state rule will take care of every type of port scan except UDP, ACK and SYN scans (-sU, -sA and -sS in nmap respectively). <br />
<br />
''ACK scans'' are not used to identify open ports, but to identify ports filtered by a firewall. Due to the SYN check for all TCP connections with the state NEW, every single packet sent by an ACK scan will be correctly rejected by a TCP RST packet. Some firewalls drop these packets instead, and this allows an attacker to map out the firewall rules.<br />
<br />
The recent module can be used to trick the remaining two types of port scans. The recent module is used to add hosts to a "recent" list which can be used to fingerprint and stop certain types of attacks. Current recent lists can be viewed in {{Ic|/proc/net/xt_recent/}}.<br />
<br />
===== SYN scans =====<br />
<br />
In a SYN scan, the port scanner sends SYN packet to every port. Closed ports return a TCP RST packet, or get dropped by a strict firewall. Open ports return a SYN ACK packet regardless of the presence of a firewall.<br />
<br />
The recent module can be used to keep track of hosts with rejected connection attempts and return a TCP RST for any SYN packet they send to open ports as if the port was closed. If an open port is the first to be scanned, a SYN ACK will still be returned, so running applications such as ssh on non-standard ports is required for this to work consistently.<br />
<br />
First, insert a rule at the top of the TCP chain. This rule responds with a TCP RST to any host that got onto the TCP-PORTSCAN list in the past sixty seconds. The {{Ic|--update}} switch causes the recent list to be updated, meaning the 60 second counter is reset.<br />
<br />
# iptables -I TCP -p tcp -m recent --update --seconds 60 --name TCP-PORTSCAN -j REJECT --reject-with tcp-rst<br />
<br />
Next, the rule for rejecting TCP packets need to be modified to add hosts with rejected packets to the TCP-PORTSCAN list.<br />
<br />
# iptables -D INPUT -p tcp -j REJECT --reject-with tcp-rst<br />
# iptables -A INPUT -p tcp -m recent --set --name TCP-PORTSCAN -j REJECT --reject-with tcp-rst<br />
<br />
===== UDP scans =====<br />
<br />
UDP port scans are similar to TCP SYN scans except that UDP is a "connectionless" protocol. There are no handshakes or acknowledgements. Instead, the scanner sends UDP packets to each UDP port. Closed ports should return ICMP port unreachable messages, and open ports do not return a response. Since UDP is not a "reliable" protocol, the scanner has no way of knowing if packets were lost, and has to do multiple checks for each port that does not return a response.<br />
<br />
The Linux kernel sends out ICMP port unreachable messages very slowly, so a full UDP scan against a Linux machine would take over 10 hours. However, common ports could still be identified, so applying the same countermeasures against UDP scans as SYN scans is a good idea.<br />
<br />
First, add a rule to reject packets from hosts on the UDP-PORTSCAN list to the top of the UDP chain.<br />
<br />
# iptables -I UDP -p udp -m recent --update --seconds 60 --name UDP-PORTSCAN -j REJECT --reject-with icmp-port-unreachable<br />
<br />
Next, modify the reject packets rule for UDP:<br />
<br />
# iptables -D INPUT -p udp -j REJECT --reject-with icmp-port-unreachable<br />
# iptables -A INPUT -p udp -m recent --set --name UDP-PORTSCAN -j REJECT --reject-with icmp-port-unreachable<br />
<br />
===== Restore the Final Rule =====<br />
<br />
If either or both of the portscanning tricks above were used the final default rule is no longer the last rule in the INPUT chain. It needs to be the last rule otherwise it will intercept the trick port scanner rules you just added and they will never be used. Simply delete the rule (-D), then add it once again using append (-A) which will place it at the end of the chain.<br />
<br />
# iptables -D INPUT -j REJECT --reject-with icmp-proto-unreachable<br />
# iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable<br />
<br />
=== Protection against other attacks ===<br />
<br />
See the [[Sysctl#TCP/IP stack hardening|TCP/IP stack hardening]] guide for relevant kernel parameters.<br />
<br />
==== Bruteforce attacks ====<br />
<br />
Unfortunately, bruteforce attacks on services accessible via an external IP address are common. One reason for this is that the attacks are easy to do with the many tools available. Fortunately, there are a number of ways to protect the services against them. One is the use of appropriate {{ic|iptables}} rules which activate and blacklist an IP after a set number of packets attempt to initiate a connection. Another is the use of specialised daemons that monitor the logfiles for failed attempts and blacklist accordingly. <br />
{{Warning| Using an IP blacklist will stop trivial attacks but it relies on an additional daemon and successful logging (the partition containing /var can become full, especially if an attacker is pounding on the server). Additionally, if the attacker knows your IP address, they can send packets with a spoofed source header and get you locked out of the server. [[SSH keys]] provide an elegant solution to the problem of brute forcing without these problems.}}<br />
Two packages that ban IPs after too many password failures are [[Fail2ban]] or, for {{ic|sshd}} in particular, [[Sshguard]]. These two applications update iptables rules to reject future connections from blacklisted IP addresses.<br />
<br />
The following rules give an example configuration to mitigate SSH bruteforce attacks using {{ic|iptables}}.<br />
<br />
# iptables -N IN_SSH<br />
# iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -j IN_SSH<br />
# iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 3 --seconds 10 -j DROP<br />
# iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 4 --seconds 1800 -j DROP <br />
# iptables -A IN_SSH -m recent --name sshbf --set -j ACCEPT<br />
<br />
Most of the options should be self-explanatory, they allow for three connection packets in ten seconds. Further tries in that time will blacklist the IP. The next rule adds a quirk by allowing a total of four attempts in 30 minutes. This is done because some bruteforce attacks are actually performed slow and not in a burst of attempts. The rules employ a number of additional options. To read more about them, check the original reference for this example: [http://compilefailure.blogspot.com/2011/04/better-ssh-brute-force-prevention-with.html compilefailure.blogspot.com]<br />
<br />
Using the above rules, now ensure that:<br />
# iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -j IN_SSH<br />
is in an appropriate position in the iptables.rules file. <br />
<br />
This arrangement works for the IN_SSH rule if you followed this entire wiki so far:<br />
*<br />
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT<br />
-A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j IN_SSH<br />
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP<br />
*<br />
<br />
The above rules can, of course, be used to protect any service, though protecting the SSH daemon is probably the most often required one.<br />
<br />
{{Tip|For self-testing the rules after setup, the actual blacklist happening can slow the test making it difficult to fine-tune parameters. One can watch the incoming attempts via {{ic|cat /proc/net/xt_recent/sshbf}}. To unblock the own IP during testing, root is needed {{ic|# echo / > /proc/net/xt_recent/sshbf}}}}<br />
<br />
=== Saving the rules ===<br />
<br />
The ruleset is now finished and should be saved to your hard drive so that it can be loaded on every boot.<br />
<br />
The systemd unit file points to the location where the rule configuration will be saved:<br />
<br />
iptables=/etc/iptables/iptables.rules<br />
ip6tables=/etc/iptables/ip6tables.rules<br />
<br />
Save the rules with this command:<br />
<br />
# iptables-save > /etc/iptables/iptables.rules<br />
<br />
and make sure your rules are loaded on boot enabling the '''iptables''' [[daemon]].<br />
<br />
Check that the rules load correctly using:<br />
<br />
# systemctl start iptables.service && systemctl status iptables.service<br />
<br />
=== IPv6 ===<br />
<br />
If you do not use IPv6 (most ISPs do not support it), you should [[Disabling IPv6|disable it]].<br />
<br />
Otherwise, you should enable the firewall rules for IPv6. Just copy '''/etc/iptables/iptables.rules''' to '''/etc/iptables/ip6tables.rules''' and change IPs from v4 format to v6 format and change reject messages from <br />
--reject-with icmp-port-unreachable<br />
to<br />
--reject-with icmp6-port-unreachable<br />
etc.<br />
<br />
Please be aware that '''--reject-with icmp6-proto-unreachable''' does not exist for ICMPv6, so you may reject without any message. (Does anyone know what message would be correct? communication-prohibited? port-unreachable?).<br />
<br />
Netfilter conntrack does not appear to track ICMPv6 Neighbor Discovery Protocol (the IPv6 equivalent of ARP), so we need to allow ICMPv6 traffic regardless of state for all directly attached subnets. The following should be inserted after dropping --ctstate INVALID, but before any other DROP or REJECT targets, along with a corresponding line for each direclty attached subnet:<br />
<br />
ip6tables -A INPUT -s fe80::/64 -p icmpv6 -j ACCEPT<br />
<br />
Since there is no kernel reverse path filter for IPv6, you may want to enable one in ip6tables with the folowing (The first rule is necessary to retain usually needed link local ICMPv6 multicasts):<br />
<br />
ip6tables -t raw -A PREROUTING -p icmpv6 -s fe80::/64 -j ACCEPT<br />
ip6tables -t raw -A PREROUTING -m rpfilter -j ACCEPT<br />
ip6tables -t raw -A PREROUTING -j DROP<br />
<br />
Now you need to enable the '''ip6tables''' service using [[systemd]].<br />
<br />
== Setting up a NAT gateway ==<br />
<br />
This section of the guide deals with NAT gateways. It is assumed that you already read the [[#Firewall for a single machine|first part of the guide]] and set up the '''INPUT''', '''OUTPUT''', '''TCP''' and '''UDP''' chains like described above. All rules so far have been created in the '''filter''' table. In this section, we will also have to use the '''nat''' table.<br />
<br />
=== Setting up the filter table ===<br />
<br />
==== Creating necessary chains ====<br />
<br />
In our setup, we will use another two chains in the filter table, the '''fw-interfaces''' and '''fw-open''' chains. Create them with the commands<br />
<br />
# iptables -N fw-interfaces<br />
# iptables -N fw-open<br />
<br />
==== Setting up the FORWARD chain ====<br />
<br />
Setting up the '''FORWARD''' chain is similar to the '''INPUT''' chain in the first section.<br />
<br />
Now we set up a rule with the '''conntrack''' match, identical to the one in the '''INPUT''' chain:<br />
<br />
# iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT<br />
<br />
The next step is to enable forwarding for trusted interfaces and to make all packets pass the '''fw-open''' chain.<br />
<br />
# iptables -A FORWARD -j fw-interfaces <br />
# iptables -A FORWARD -j fw-open <br />
<br />
The remaining packets are denied with an '''ICMP''' message:<br />
<br />
# iptables -A FORWARD -j REJECT --reject-with icmp-host-unreach<br />
# iptables -P FORWARD DROP<br />
<br />
==== Setting up the fw-interfaces and fw-open chains ====<br />
<br />
The meaning of the '''fw-interfaces''' and '''fw-open''' chains is explained later, when we deal with the '''POSTROUTING''' and '''PREROUTING''' chains in the '''nat''' table, respectively.<br />
<br />
=== Setting up the nat table ===<br />
<br />
All over this section, we assume that the outgoing interface (the one with the public internet IP) is '''ppp0'''. Keep in mind that you have to change the name in all following rules if your outgoing interface has another name.<br />
<br />
==== Setting up the POSTROUTING chain ====<br />
<br />
Now, we have to define who is allowed to connect to the internet. Let's assume we have the subnet '''192.168.0.0/24''' (which means all addresses that are of the form 192.168.0.*) on '''eth0'''. We first need to accept the machines on this interface in the FORWARD table, that is why we created the '''fw-interfaces''' chain above:<br />
<br />
# iptables -A fw-interfaces -i eth0 -j ACCEPT<br />
<br />
Now, we have to alter all outgoing packets so that they have our public IP address as the source address, instead of the local LAN address. To do this, we use the '''MASQUERADE''' target:<br />
<br />
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
Do not forget the '''-o ppp0''' parameter above. If you omit it, your network will be screwed up.<br />
<br />
Let's assume we have another subnet, '''10.3.0.0/16''' (which means all addresses 10.3.*.*), on the interface '''eth1'''. We add the same rules as above again:<br />
<br />
# iptables -A fw-interfaces -i eth1 -j ACCEPT<br />
# iptables -t nat -A POSTROUTING -s 10.3.0.0/16 -o ppp0 -j MASQUERADE<br />
<br />
The last step is to enable IP Forwarding (if it is not already enabled):<br />
<br />
# echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
Then edit the relevant line in {{ic|/etc/sysctl.d/90-firewall.conf}} so it persists through reboot (see [[sysctl]] for details):<br />
<br />
net.ipv4.ip_forward = 1<br />
<br />
Machines from these subnets can now use your new NAT machine as their gateway. Note that you may want to set up a DNS and DHCP server like '''dnsmasq''' or a combination of '''bind''' and '''dhcpd''' to simplify network settings DNS resolution on the client machines. This is not the topic of this guide.<br />
<br />
==== Setting up the PREROUTING chain ====<br />
<br />
Sometimes, we want to change the address of an incoming packet from the gateway to a LAN machine. To do this, we use the '''fw-open''' chain defined above, as well as the '''PREROUTING''' chain in the '''nat''' table<br />
<br />
I will give two simple examples: First, we want to change all incoming SSH packets (port 22) to the ssh server in the machine '''192.168.0.5''':<br />
<br />
# iptables -A fw-open -d 192.168.0.5 -p tcp --dport 22 -j ACCEPT<br />
# iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 22 -j DNAT --to 192.168.0.5<br />
<br />
The second example will show you how to change packets to a different port than the incoming port. We want to change any incoming connection on port '''8000''' to our web server on '''192.168.0.6''', port '''80''':<br />
<br />
# iptables -A fw-open -d 192.168.0.6 -p tcp --dport 80 -j ACCEPT<br />
# iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 8000 -j DNAT --to 192.168.0.6:80<br />
<br />
The same setup also works with udp packets.<br />
<br />
=== Saving the rules ===<br />
<br />
Save the rules:<br />
<br />
# iptables-save > /etc/iptables/iptables.rules<br />
<br />
and make sure your rules are loaded when you boot enabling the '''iptables''' [[daemon]].<br />
<br />
== See Also ==<br />
<br />
*[[Internet sharing]]<br />
*[[Router]]<br />
*[[Firewalls]]<br />
*[[Uncomplicated Firewall]]<br />
*[http://www.webhostingtalk.com/showthread.php?t=456571 Methods to block SSH attacks]<br />
*[http://www.ducea.com/2006/06/28/using-iptables-to-block-brute-force-attacks/ Using iptables to block brute force attacks]<br />
*[http://linuxconfig.org/collection-of-basic-linux-firewall-iptables-rules 20 Iptables Examples For New SysAdmins]<br />
*[http://www.thegeekstuff.com/2011/06/iptables-rules-examples/ 25 Most Frequently Used Linux IPTables Rules Examples]</div>Archvillhttps://wiki.archlinux.org/index.php?title=Profile-sync-daemon_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=304583Profile-sync-daemon (Русский)2014-03-15T09:41:45Z<p>Archvill: /* Запуск psd для синхронизации профилей */</p>
<hr />
<div>[[en:Profile-sync-daemon]]<br />
[[Category:Web Browser (Русский)]]<br />
[[Category:Scripts (Русский)]]<br />
{{Article summary start}}<br />
{{Article summary text|{{AUR|Profile-sync-daemon}} (psd) is a diminutive pseudo-daemon designed to manage your browser's profile in tmpfs and to periodically sync it back to your physical disc (HDD/SSD). This is accomplished via a symlinking step and an innovative use of rsync to maintain back-up and synchronization between the two. One of the major design goals of psd is a completely transparent user experience.}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Anything-sync-daemon}}<br />
{{Article summary wiki|Firefox}}<br />
{{Article summary wiki|Chromium}}<br />
{{Article summary wiki|Opera}}<br />
{{Article summary wiki|SSD}}<br />
{{Article summary end}}<br />
<br />
== Преимущества psd (Profile-sync-daemon)==<br />
<br />
Запуск этого демона необходим для достижения двух целей:<br />
# Уменьшение износостойкости жесткого диска.<br />
# Увеличение скорости работы браузера.<br />
<br />
Профили, кэш, и прочие пользовательские данные браузера переносятся с помощью psd в tmpfs, соответственно операции ввода/вывода браузеров перенаправляются в оперативную память. Таким образом, уменьшается износ жесткого диска, повышается отказоустойчивость и скорость работы браузера: время доступа к оперативной памяти составляет порядка наносекунд, в свою очередь, время доступа обычного жесткого диска приблизительно в 1,000,000 раз выше и составляет порядка миллисекунд.<br />
{{Note|Chromium хранит файлы кеша '''отдельно''' от каталога профиля пользователя. Изменение этого поведения программы не входит в задачи profile-sync-daemon; пользователям рекомендуется обратиться к разделу [[Chromium_Tips_and_Tweaks#Cache_in_tmpfs]] основной статьи [[Chromium_Tips_and_Tweaks]], где представлено несколько решений проблемы.}}<br />
<br />
== Поддерживаемые браузеры ==<br />
<br />
В настоящее время следующие браузеры поддерживаются:<br />
* [[Chromium]]<br />
* {{AUR|conkeror}}<br />
* [[Firefox]] (all flavors including stable, beta, and aurora)<br />
* [http://www.webupd8.org/2011/05/install-firefox-nightly-from-ubuntu-ppa.html firefox-trunk]: Только в Ubuntu<br />
* {{AUR|google-chrome}}<br />
* {{AUR|google-chrome-beta}}<br />
* [https://bbs.archlinux.org/viewtopic.php?id=117157 heftig's version of Aurora]: Только в Arch Linux<br />
* [[Midori]]<br />
* [[Opera]]<br />
* {{AUR|opera-next}}<br />
* Qupzilla<br />
<br />
== Установка и настройка ==<br />
<br />
{{AUR|profile-sync-daemon}} доступен для скачивания в [[Arch User Repository|AUR]]. Установка и сборка происходит как с другими пакетами. <br />
<br />
=== Редактируем /etc/psd.conf ===<br />
<br />
Редактируем содержимое {{ic|/etc/psd.conf}}, указывая с какими пользователями будет работать ''psd''.<br />
<br />
Пример:<br />
# List users separated by spaces whose browser(s) profile(s) will get symlinked <br />
# and sync'ed to tmpfs.<br />
# Do NOT list a user twice!<br />
USERS="facade happy"<br />
<br />
{{ note | Минимум должен быть один пользователь.}}<br />
<br />
Опционально можно раскомментировать строку BROWSERS и вписать браузеры, которые будут синхронизироваться с tmpfs. Если оставить эту строку закомментированной (по умолчанию), то все поддерживаемые профили браузеров будут синхронизироваться, если они существуют. <br />
<br />
Например: Допустим что Chromium, Opera и Midori установлены, но необходимо чтобы только Chromium и Opera синхронизировались с tmpfs так как пользователь использует Midori в качестве запасного браузера и пользуется им редко:<br />
<br />
# List browsers separated by spaces to include in the sync. Useful if you do not<br />
# wish to have all possible browser profiles sync'ed.<br />
#<br />
# Possible values:<br />
# chromium<br />
# conkeror.mozdev.org<br />
# firefox<br />
# firefox-trunk<br />
# google-chrome<br />
# heftig-aurora <br />
# midori<br />
# opera<br />
# opera-next<br />
# qupzilla<br />
#<br />
# If the following is commented out (default), then all available/supported <br />
# browsers will be sync'ed, separated by comma<br />
BROWSERS="chromium opera"<br />
<br />
== Использование psd ==<br />
<br />
=== Проверка конфигурации ===<br />
<br />
Скрипт profile-sync-daemon может быть вызван с опцией 'parse' для проверки конфигурации. При этом будет отображен список профилей, которые будут синхронизироваться ''psd'' на основе данных конфигурационного файла {{ic|/etc/psd.conf}}. Пример вывода скрипта:<br />
$ profile-sync-daemon parse<br />
Profile-sync-daemon v5.24<br />
<br />
psd will manage the following per /etc/psd.conf settings:<br />
<br />
browser/psname: chromium/chromium<br />
owner/group: facade/users<br />
sync target: /home/facade/.config/chromium<br />
tmpfs dir: /tmp/facade-chromium<br />
profile size: 81M<br />
<br />
browser/psname: firefox/firefox<br />
owner/group: facade/users<br />
sync target: /mnt/data/docs/facade/mozilla/firefox/1Zp9V43q.banking<br />
tmpfs dir: /tmp/facade-firefox-1Zp9V43q.banking<br />
profile size: 5.9M<br />
<br />
browser/psname: firefox/firefox<br />
owner/group: facade/users<br />
sync target: /mnt/data/docs/facade/mozilla/firefox/obg67zqQ.proxy<br />
tmpfs dir: /tmp/facade-firefox-obg67zqQ.proxy<br />
profile size: 17M<br />
<br />
Как показано в выводе и указано выше, если в массиве BROWSERS не задан конкретный список браузеров, ''psd'' будет синхронизировать '''все''' профили поддерживаемых браузеров, которые он сможет найти для данного пользователя(-ей).<br />
<br />
=== Запуск psd для синхронизации профилей ===<br />
<br />
Не следует вызывать {{ic|/usr/bin/profile-sync-daemon}} напрямую. Вместе с ''psd'' предоставляются файлы [[daemon|сервиса]] и таймер для [[systemd]], и следует использовать только их для запуска ''psd''. Сервис и таймер должны запускаться вместе. Таймер периодически обновляет копии профилей на жестком диске из tmpfs, по умолчанию это происходит один раз в час. Если не вызвать таймер, профиль на диске будет обновлен только при корректном завершении работы системы, соответственно, при аварийном завершении на диске останется устаревшая копия профиля.<br />
<br />
Запустите сервисы {{ic|psd}} и {{ic|psd-resync}} и активируйте их на запуск/останов при загрузке/выключении (рекомендуется):<br />
<br />
$ systemctl start psd.service psd-resync.service<br />
$ systemctl enable psd.service psd-resync.service<br />
<br />
Все браузеры, чьи профили будут перенесены в tmpfs, должны быть закрыты при запуске сервисов.<br />
<br />
=== Установка частоты синхронизации (опционально) ===<br />
<br />
Предоставленный с пакетом таймер настроен на синхронизацию с интервалом в один час. Пользователь может легко установить другой желаемый интервал, редактируя файл установок таймера. В примере ниже таймер установлен на сихронизацию с интервалом в 10 минут.<br />
<br />
{{hc|/etc/systemd/system/psd-resync.timer.d/frequency.conf|<nowiki><br />
[Unit]<br />
Description=Timer for Profile-sync-daemon - 10min<br />
<br />
[Timer]<br />
# Empty value resets the list of timers<br />
OnUnitActiveSec=<br />
OnUnitActiveSec=10min<br />
</nowiki>}}<br />
<br />
См. {{ic|man systemd.timer}} для получения дополнительной информации о настройке таймеров.<br />
<br />
== Caveats for Firefox and Heftig's Aurora ONLY ==<br />
<br />
The way ''psd'' keeps track of browser profiles and sync targets requires users to have a unique name as the ''last directory'' for all profiles in their respective {{ic|$HOME/.mozilla/''browser''/profiles.ini}} files. ''psd'' will check when it is called to run for this and refuse if this rule is not satisfied. The following is an example of a BAD profile that will fail the the test. Note that although each full path is unique, they both ''end'' in the same name! Again, the user must modify the {{ic|profiles.ini}} and the corresponding directory on the filesystem to correct this in order to use ''psd''.<br />
<br />
{{hc|~/.mozilla/firefox/profiles.ini|<br />
[General]<br />
StartWithLastProfile&#61;1<br />
<br />
[Profile0 for user facade]<br />
Name&#61;normal<br />
IsRelative&#61;0<br />
Path&#61;/mnt/data/docs/'''facade'''/mozilla/firefox/'''myprofile.abc'''<br />
Default&#61;1<br />
<br />
[Profile1 for user happy]<br />
Name&#61;proxy<br />
IsRelative&#61;0<br />
Path&#61;/mnt/data/docs/'''happy'''/mozilla/firefox/'''myprofile.abc'''<br />
}}<br />
<br />
== FAQ ==<br />
<br />
{{Note|The first three questions apply to versions of ''psd'' equal to or greater than v5.40 only.}}<br />
<br />
=== Q1. My system crashed and didn't sync back. What do I do? ===<br />
<br />
Odds are the "last good" backup of your browser profiles is just fine still sitting happily on your filesystem. Upon restarting {{ic|psd}} (on a reboot for example), a check is preformed to see if the symlink to the tmpfs copy of your profile is invalid. If it is invalid, ''psd'' will snapshot the "last good" backup before it rotates it back into place. This is more for a sanity check that ''psd'' did no harm and that any data loss was a function of something else.<br />
<br />
=== Q2. Where can I find this snapshot? ===<br />
<br />
It depends on the browser. You will find the snapshot in the same directory as the browser profile and it will contain a date-time-stamp that corresponds to the time at which the recovery took place. For example, chromium will be {{ic|~/.config/chromium-backup-crashrecovery-20130912_153310}} -- of course, the date_time suffix will be different for you.<br />
<br />
=== Q3. How can I restore the snapshot? ===<br />
<br />
* Stop {{ic|psd}}.<br />
* Confirm that there is no symlink to the tmpfs browser profile directory. If there is, ''psd'' did not stop correctly for other reasons.<br />
* Move the "bad" copy of the profile to a backup (don't blindly delete anything).<br />
* Copy the snapshot directory to the name that browser expects.<br />
<br />
Example using Chromium:<br />
mv ~/.config/chromium ~/.config/chromium-bad<br />
cp -a ~/.config/chromium-backup-crashrecovery-20130912_153310 ~/.config/chromium<br />
<br />
At this point you can launch chromium which will use the backup snapshot you just copied into place. If all is well, close the browser and restart psd and psd-resync (if using systemd). You may safely delete {{ic|~/.config/chromium-backup-crashrecovery-20130912_153310}} at this point.<br />
<br />
== Support ==<br />
<br />
Post in the [https://bbs.archlinux.org/viewtopic.php?pid=1026974 discussion thread] with comments or concerns.<br />
<br />
== PSD on other distros ==<br />
<br />
''psd'' is a bash script and should therefore run on any Linux distro. Below is a list of distros known to package ''psd'', and a link to download their respective packages. <br />
<br />
{{Note|Different distros use different init systems. The packages linked below are configured to use the default init system for the given distro.}}<br />
<br />
{| class="wikitable" align="center"<br />
|-<br />
! Distro !! Default Init System !! Link to Package<br />
|-<br />
| Arch || Systemd || [https://aur.archlinux.org/packages/profile-sync-daemon AUR].<br />
|- <br />
| Chakra || Systemd || [http://chakra-linux.org/ccr/packages.php?ID=5008 CCR].<br />
|- <br />
| Debian || Upstart || Graysky's PPA. See instruction below.<br />
|- <br />
| Exherbo || Systemd || [http://git.exherbo.org/summer/packages/net-www/profile-sync-daemon In official repos].<br />
|- <br />
| Fedora || Systemd || [http://koji.fedoraproject.org/koji/packageinfo?packageID=16307 In official repos].<br />
|- <br />
| Gentoo || OpenRC || [http://packages.gentoo.org/package/www-misc/profile-sync-daemon In official repos].<br />
|- <br />
| Mint || Upstart || Graysky's PPA. See instruction below.<br />
|- <br />
| OpenSUSE || Upstart || Packaged by [http://download.opensuse.org/repositories/home:/Overman79:/Laptop Overman79].<br />
|- <br />
| Ubuntu || Upstart || Graysky's PPA, See instruction below.<br />
|- <br />
| Void || Systemd || In official [https://github.com/xtraeme/xbps-packages/tree/master/srcpkgs/profile-sync-daemon repos].<br />
|}<br />
<br />
=== Debian ===<br />
<br />
To add the PPA (personal package archive) to your Debian (tested on Squeeze) system, and to install ''psd'':<br />
<br />
# echo "deb http://ppa.launchpad.net/graysky/utils/ubuntu quantal main" > /etc/apt/sources.list.d/graysky.list<br />
# echo "deb-src http://ppa.launchpad.net/graysky/utils/ubuntu quantal main" >> /etc/apt/sources.list.d/graysky.list<br />
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FF7F9516<br />
# apt-get update<br />
# apt-get install profile-sync-daemon<br />
<br />
=== Mint and Ubuntu ===<br />
<br />
To add the PPA (personal package archive) to your Ubuntu (packages available for Lucid and newer) system, and to install ''psd'':<br />
<br />
$ sudo add-apt-repository ppa:graysky/utils<br />
$ sudo apt-get update<br />
$ sudo apt-get install profile-sync-daemon<br />
<br />
== See also ==<br />
<br />
* http://www.webupd8.org/2013/02/keep-your-browser-profiles-in-tmpfs-ram.html<br />
* http://bernaerts.dyndns.org/linux/250-ubuntu-tweaks-ssd</div>Archvillhttps://wiki.archlinux.org/index.php?title=Profile-sync-daemon_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=304582Profile-sync-daemon (Русский)2014-03-15T09:32:02Z<p>Archvill: /* Using psd */ перевел раздел</p>
<hr />
<div>[[en:Profile-sync-daemon]]<br />
[[Category:Web Browser (Русский)]]<br />
[[Category:Scripts (Русский)]]<br />
{{Article summary start}}<br />
{{Article summary text|{{AUR|Profile-sync-daemon}} (psd) is a diminutive pseudo-daemon designed to manage your browser's profile in tmpfs and to periodically sync it back to your physical disc (HDD/SSD). This is accomplished via a symlinking step and an innovative use of rsync to maintain back-up and synchronization between the two. One of the major design goals of psd is a completely transparent user experience.}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Anything-sync-daemon}}<br />
{{Article summary wiki|Firefox}}<br />
{{Article summary wiki|Chromium}}<br />
{{Article summary wiki|Opera}}<br />
{{Article summary wiki|SSD}}<br />
{{Article summary end}}<br />
<br />
== Преимущества psd (Profile-sync-daemon)==<br />
<br />
Запуск этого демона необходим для достижения двух целей:<br />
# Уменьшение износостойкости жесткого диска.<br />
# Увеличение скорости работы браузера.<br />
<br />
Профили, кэш, и прочие пользовательские данные браузера переносятся с помощью psd в tmpfs, соответственно операции ввода/вывода браузеров перенаправляются в оперативную память. Таким образом, уменьшается износ жесткого диска, повышается отказоустойчивость и скорость работы браузера: время доступа к оперативной памяти составляет порядка наносекунд, в свою очередь, время доступа обычного жесткого диска приблизительно в 1,000,000 раз выше и составляет порядка миллисекунд.<br />
{{Note|Chromium хранит файлы кеша '''отдельно''' от каталога профиля пользователя. Изменение этого поведения программы не входит в задачи profile-sync-daemon; пользователям рекомендуется обратиться к разделу [[Chromium_Tips_and_Tweaks#Cache_in_tmpfs]] основной статьи [[Chromium_Tips_and_Tweaks]], где представлено несколько решений проблемы.}}<br />
<br />
== Поддерживаемые браузеры ==<br />
<br />
В настоящее время следующие браузеры поддерживаются:<br />
* [[Chromium]]<br />
* {{AUR|conkeror}}<br />
* [[Firefox]] (all flavors including stable, beta, and aurora)<br />
* [http://www.webupd8.org/2011/05/install-firefox-nightly-from-ubuntu-ppa.html firefox-trunk]: Только в Ubuntu<br />
* {{AUR|google-chrome}}<br />
* {{AUR|google-chrome-beta}}<br />
* [https://bbs.archlinux.org/viewtopic.php?id=117157 heftig's version of Aurora]: Только в Arch Linux<br />
* [[Midori]]<br />
* [[Opera]]<br />
* {{AUR|opera-next}}<br />
* Qupzilla<br />
<br />
== Установка и настройка ==<br />
<br />
{{AUR|profile-sync-daemon}} доступен для скачивания в [[Arch User Repository|AUR]]. Установка и сборка происходит как с другими пакетами. <br />
<br />
=== Редактируем /etc/psd.conf ===<br />
<br />
Редактируем содержимое {{ic|/etc/psd.conf}}, указывая с какими пользователями будет работать ''psd''.<br />
<br />
Пример:<br />
# List users separated by spaces whose browser(s) profile(s) will get symlinked <br />
# and sync'ed to tmpfs.<br />
# Do NOT list a user twice!<br />
USERS="facade happy"<br />
<br />
{{ note | Минимум должен быть один пользователь.}}<br />
<br />
Опционально можно раскомментировать строку BROWSERS и вписать браузеры, которые будут синхронизироваться с tmpfs. Если оставить эту строку закомментированной (по умолчанию), то все поддерживаемые профили браузеров будут синхронизироваться, если они существуют. <br />
<br />
Например: Допустим что Chromium, Opera и Midori установлены, но необходимо чтобы только Chromium и Opera синхронизировались с tmpfs так как пользователь использует Midori в качестве запасного браузера и пользуется им редко:<br />
<br />
# List browsers separated by spaces to include in the sync. Useful if you do not<br />
# wish to have all possible browser profiles sync'ed.<br />
#<br />
# Possible values:<br />
# chromium<br />
# conkeror.mozdev.org<br />
# firefox<br />
# firefox-trunk<br />
# google-chrome<br />
# heftig-aurora <br />
# midori<br />
# opera<br />
# opera-next<br />
# qupzilla<br />
#<br />
# If the following is commented out (default), then all available/supported <br />
# browsers will be sync'ed, separated by comma<br />
BROWSERS="chromium opera"<br />
<br />
== Использование psd ==<br />
<br />
=== Проверка конфигурации ===<br />
<br />
Скрипт profile-sync-daemon может быть вызван с опцией 'parse' для проверки конфигурации. При этом будет отображен список профилей, которые будут синхронизироваться ''psd'' на основе данных конфигурационного файла {{ic|/etc/psd.conf}}. Пример вывода скрипта:<br />
$ profile-sync-daemon parse<br />
Profile-sync-daemon v5.24<br />
<br />
psd will manage the following per /etc/psd.conf settings:<br />
<br />
browser/psname: chromium/chromium<br />
owner/group: facade/users<br />
sync target: /home/facade/.config/chromium<br />
tmpfs dir: /tmp/facade-chromium<br />
profile size: 81M<br />
<br />
browser/psname: firefox/firefox<br />
owner/group: facade/users<br />
sync target: /mnt/data/docs/facade/mozilla/firefox/1Zp9V43q.banking<br />
tmpfs dir: /tmp/facade-firefox-1Zp9V43q.banking<br />
profile size: 5.9M<br />
<br />
browser/psname: firefox/firefox<br />
owner/group: facade/users<br />
sync target: /mnt/data/docs/facade/mozilla/firefox/obg67zqQ.proxy<br />
tmpfs dir: /tmp/facade-firefox-obg67zqQ.proxy<br />
profile size: 17M<br />
<br />
Как показано в выводе и указано выше, если в массиве BROWSERS не задан конкретный список браузеров, ''psd'' будет синхронизировать '''все''' профили поддерживаемых браузеров, которые он сможет найти для данного пользователя(-ей).<br />
<br />
=== Запуск psd для синхронизации профилей ===<br />
<br />
Не следует вызывать {{ic|/usr/bin/profile-sync-daemon}} напрямую. Вместе с ''psd'' предоставляются файлы [[daemon|сервиса]] и таймер для [[systemd]], и следует использовать только их для запуска ''psd''. Сервис и таймер должны запускаться вместе. Таймер периодически обновляет копии профилей на жестком диске из tmpfs, по умолчанию это происходит один раз в час. Если не вызвать таймер, профиль на диске будет обновлен только при корректном завершении работы системы, соответственно, при аварийном завершении на диске останется устаревшая копия профиля.<br />
<br />
Запустите сервисы {{ic|psd}} и {{ic|psd-resync}} и активируйте их на start/stop и boot/shutdown ('''рекомендуется'''). Все браузеры, чьи профили будут перенесены в tmpfs, должны быть закрыты при запуске сервисов.<br />
<br />
=== Установка частоты синхронизации (опционально) ===<br />
<br />
Предоставленный с пакетом таймер настроен на синхронизацию с интервалом в один час. Пользователь может легко установить другой желаемый интервал, редактируя файл установок таймера. В примере ниже таймер установлен на сихронизацию с интервалом в 10 минут.<br />
<br />
{{hc|/etc/systemd/system/psd-resync.timer.d/frequency.conf|<nowiki><br />
[Unit]<br />
Description=Timer for Profile-sync-daemon - 10min<br />
<br />
[Timer]<br />
# Empty value resets the list of timers<br />
OnUnitActiveSec=<br />
OnUnitActiveSec=10min<br />
</nowiki>}}<br />
<br />
См. {{ic|man systemd.timer}} для получения дополнительной информации о настройке таймеров.<br />
<br />
== Caveats for Firefox and Heftig's Aurora ONLY ==<br />
<br />
The way ''psd'' keeps track of browser profiles and sync targets requires users to have a unique name as the ''last directory'' for all profiles in their respective {{ic|$HOME/.mozilla/''browser''/profiles.ini}} files. ''psd'' will check when it is called to run for this and refuse if this rule is not satisfied. The following is an example of a BAD profile that will fail the the test. Note that although each full path is unique, they both ''end'' in the same name! Again, the user must modify the {{ic|profiles.ini}} and the corresponding directory on the filesystem to correct this in order to use ''psd''.<br />
<br />
{{hc|~/.mozilla/firefox/profiles.ini|<br />
[General]<br />
StartWithLastProfile&#61;1<br />
<br />
[Profile0 for user facade]<br />
Name&#61;normal<br />
IsRelative&#61;0<br />
Path&#61;/mnt/data/docs/'''facade'''/mozilla/firefox/'''myprofile.abc'''<br />
Default&#61;1<br />
<br />
[Profile1 for user happy]<br />
Name&#61;proxy<br />
IsRelative&#61;0<br />
Path&#61;/mnt/data/docs/'''happy'''/mozilla/firefox/'''myprofile.abc'''<br />
}}<br />
<br />
== FAQ ==<br />
<br />
{{Note|The first three questions apply to versions of ''psd'' equal to or greater than v5.40 only.}}<br />
<br />
=== Q1. My system crashed and didn't sync back. What do I do? ===<br />
<br />
Odds are the "last good" backup of your browser profiles is just fine still sitting happily on your filesystem. Upon restarting {{ic|psd}} (on a reboot for example), a check is preformed to see if the symlink to the tmpfs copy of your profile is invalid. If it is invalid, ''psd'' will snapshot the "last good" backup before it rotates it back into place. This is more for a sanity check that ''psd'' did no harm and that any data loss was a function of something else.<br />
<br />
=== Q2. Where can I find this snapshot? ===<br />
<br />
It depends on the browser. You will find the snapshot in the same directory as the browser profile and it will contain a date-time-stamp that corresponds to the time at which the recovery took place. For example, chromium will be {{ic|~/.config/chromium-backup-crashrecovery-20130912_153310}} -- of course, the date_time suffix will be different for you.<br />
<br />
=== Q3. How can I restore the snapshot? ===<br />
<br />
* Stop {{ic|psd}}.<br />
* Confirm that there is no symlink to the tmpfs browser profile directory. If there is, ''psd'' did not stop correctly for other reasons.<br />
* Move the "bad" copy of the profile to a backup (don't blindly delete anything).<br />
* Copy the snapshot directory to the name that browser expects.<br />
<br />
Example using Chromium:<br />
mv ~/.config/chromium ~/.config/chromium-bad<br />
cp -a ~/.config/chromium-backup-crashrecovery-20130912_153310 ~/.config/chromium<br />
<br />
At this point you can launch chromium which will use the backup snapshot you just copied into place. If all is well, close the browser and restart psd and psd-resync (if using systemd). You may safely delete {{ic|~/.config/chromium-backup-crashrecovery-20130912_153310}} at this point.<br />
<br />
== Support ==<br />
<br />
Post in the [https://bbs.archlinux.org/viewtopic.php?pid=1026974 discussion thread] with comments or concerns.<br />
<br />
== PSD on other distros ==<br />
<br />
''psd'' is a bash script and should therefore run on any Linux distro. Below is a list of distros known to package ''psd'', and a link to download their respective packages. <br />
<br />
{{Note|Different distros use different init systems. The packages linked below are configured to use the default init system for the given distro.}}<br />
<br />
{| class="wikitable" align="center"<br />
|-<br />
! Distro !! Default Init System !! Link to Package<br />
|-<br />
| Arch || Systemd || [https://aur.archlinux.org/packages/profile-sync-daemon AUR].<br />
|- <br />
| Chakra || Systemd || [http://chakra-linux.org/ccr/packages.php?ID=5008 CCR].<br />
|- <br />
| Debian || Upstart || Graysky's PPA. See instruction below.<br />
|- <br />
| Exherbo || Systemd || [http://git.exherbo.org/summer/packages/net-www/profile-sync-daemon In official repos].<br />
|- <br />
| Fedora || Systemd || [http://koji.fedoraproject.org/koji/packageinfo?packageID=16307 In official repos].<br />
|- <br />
| Gentoo || OpenRC || [http://packages.gentoo.org/package/www-misc/profile-sync-daemon In official repos].<br />
|- <br />
| Mint || Upstart || Graysky's PPA. See instruction below.<br />
|- <br />
| OpenSUSE || Upstart || Packaged by [http://download.opensuse.org/repositories/home:/Overman79:/Laptop Overman79].<br />
|- <br />
| Ubuntu || Upstart || Graysky's PPA, See instruction below.<br />
|- <br />
| Void || Systemd || In official [https://github.com/xtraeme/xbps-packages/tree/master/srcpkgs/profile-sync-daemon repos].<br />
|}<br />
<br />
=== Debian ===<br />
<br />
To add the PPA (personal package archive) to your Debian (tested on Squeeze) system, and to install ''psd'':<br />
<br />
# echo "deb http://ppa.launchpad.net/graysky/utils/ubuntu quantal main" > /etc/apt/sources.list.d/graysky.list<br />
# echo "deb-src http://ppa.launchpad.net/graysky/utils/ubuntu quantal main" >> /etc/apt/sources.list.d/graysky.list<br />
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FF7F9516<br />
# apt-get update<br />
# apt-get install profile-sync-daemon<br />
<br />
=== Mint and Ubuntu ===<br />
<br />
To add the PPA (personal package archive) to your Ubuntu (packages available for Lucid and newer) system, and to install ''psd'':<br />
<br />
$ sudo add-apt-repository ppa:graysky/utils<br />
$ sudo apt-get update<br />
$ sudo apt-get install profile-sync-daemon<br />
<br />
== See also ==<br />
<br />
* http://www.webupd8.org/2013/02/keep-your-browser-profiles-in-tmpfs-ram.html<br />
* http://bernaerts.dyndns.org/linux/250-ubuntu-tweaks-ssd</div>Archvillhttps://wiki.archlinux.org/index.php?title=Profile-sync-daemon_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=304581Profile-sync-daemon (Русский)2014-03-15T09:12:25Z<p>Archvill: /* Преимущества psd (Profile-sync-daemon) */</p>
<hr />
<div>[[en:Profile-sync-daemon]]<br />
[[Category:Web Browser (Русский)]]<br />
[[Category:Scripts (Русский)]]<br />
{{Article summary start}}<br />
{{Article summary text|{{AUR|Profile-sync-daemon}} (psd) is a diminutive pseudo-daemon designed to manage your browser's profile in tmpfs and to periodically sync it back to your physical disc (HDD/SSD). This is accomplished via a symlinking step and an innovative use of rsync to maintain back-up and synchronization between the two. One of the major design goals of psd is a completely transparent user experience.}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Anything-sync-daemon}}<br />
{{Article summary wiki|Firefox}}<br />
{{Article summary wiki|Chromium}}<br />
{{Article summary wiki|Opera}}<br />
{{Article summary wiki|SSD}}<br />
{{Article summary end}}<br />
<br />
== Преимущества psd (Profile-sync-daemon)==<br />
<br />
Запуск этого демона необходим для достижения двух целей:<br />
# Уменьшение износостойкости жесткого диска.<br />
# Увеличение скорости работы браузера.<br />
<br />
Профили, кэш, и прочие пользовательские данные браузера переносятся с помощью psd в tmpfs, соответственно операции ввода/вывода браузеров перенаправляются в оперативную память. Таким образом, уменьшается износ жесткого диска, повышается отказоустойчивость и скорость работы браузера: время доступа к оперативной памяти составляет порядка наносекунд, в свою очередь, время доступа обычного жесткого диска приблизительно в 1,000,000 раз выше и составляет порядка миллисекунд.<br />
{{Note|Chromium хранит файлы кеша '''отдельно''' от каталога профиля пользователя. Изменение этого поведения программы не входит в задачи profile-sync-daemon; пользователям рекомендуется обратиться к разделу [[Chromium_Tips_and_Tweaks#Cache_in_tmpfs]] основной статьи [[Chromium_Tips_and_Tweaks]], где представлено несколько решений проблемы.}}<br />
<br />
== Поддерживаемые браузеры ==<br />
<br />
В настоящее время следующие браузеры поддерживаются:<br />
* [[Chromium]]<br />
* {{AUR|conkeror}}<br />
* [[Firefox]] (all flavors including stable, beta, and aurora)<br />
* [http://www.webupd8.org/2011/05/install-firefox-nightly-from-ubuntu-ppa.html firefox-trunk]: Только в Ubuntu<br />
* {{AUR|google-chrome}}<br />
* {{AUR|google-chrome-beta}}<br />
* [https://bbs.archlinux.org/viewtopic.php?id=117157 heftig's version of Aurora]: Только в Arch Linux<br />
* [[Midori]]<br />
* [[Opera]]<br />
* {{AUR|opera-next}}<br />
* Qupzilla<br />
<br />
== Установка и настройка ==<br />
<br />
{{AUR|profile-sync-daemon}} доступен для скачивания в [[Arch User Repository|AUR]]. Установка и сборка происходит как с другими пакетами. <br />
<br />
=== Редактируем /etc/psd.conf ===<br />
<br />
Редактируем содержимое {{ic|/etc/psd.conf}}, указывая с какими пользователями будет работать ''psd''.<br />
<br />
Пример:<br />
# List users separated by spaces whose browser(s) profile(s) will get symlinked <br />
# and sync'ed to tmpfs.<br />
# Do NOT list a user twice!<br />
USERS="facade happy"<br />
<br />
{{ note | Минимум должен быть один пользователь.}}<br />
<br />
Опционально можно раскомментировать строку BROWSERS и вписать браузеры, которые будут синхронизироваться с tmpfs. Если оставить эту строку закомментированной (по умолчанию), то все поддерживаемые профили браузеров будут синхронизироваться, если они существуют. <br />
<br />
Например: Допустим что Chromium, Opera и Midori установлены, но необходимо чтобы только Chromium и Opera синхронизировались с tmpfs так как пользователь использует Midori в качестве запасного браузера и пользуется им редко:<br />
<br />
# List browsers separated by spaces to include in the sync. Useful if you do not<br />
# wish to have all possible browser profiles sync'ed.<br />
#<br />
# Possible values:<br />
# chromium<br />
# conkeror.mozdev.org<br />
# firefox<br />
# firefox-trunk<br />
# google-chrome<br />
# heftig-aurora <br />
# midori<br />
# opera<br />
# opera-next<br />
# qupzilla<br />
#<br />
# If the following is commented out (default), then all available/supported <br />
# browsers will be sync'ed, separated by comma<br />
BROWSERS="chromium opera"<br />
<br />
== Using psd ==<br />
<br />
=== Режим предварительного просмотра (parse) ===<br />
<br />
The 'parse' option can be called to show users exactly what ''psd'' will do based on the {{ic|/etc/psd.conf}} entered. Call it like so:<br />
$ profile-sync-daemon parse<br />
Profile-sync-daemon v5.24<br />
<br />
psd will manage the following per /etc/psd.conf settings:<br />
<br />
browser/psname: chromium/chromium<br />
owner/group: facade/users<br />
sync target: /home/facade/.config/chromium<br />
tmpfs dir: /tmp/facade-chromium<br />
profile size: 81M<br />
<br />
browser/psname: firefox/firefox<br />
owner/group: facade/users<br />
sync target: /mnt/data/docs/facade/mozilla/firefox/1Zp9V43q.banking<br />
tmpfs dir: /tmp/facade-firefox-1Zp9V43q.banking<br />
profile size: 5.9M<br />
<br />
browser/psname: firefox/firefox<br />
owner/group: facade/users<br />
sync target: /mnt/data/docs/facade/mozilla/firefox/obg67zqQ.proxy<br />
tmpfs dir: /tmp/facade-firefox-obg67zqQ.proxy<br />
profile size: 17M<br />
<br />
As shown in the output and as stated above, if no specific browser or subset of browsers are defined in the BROWSERS array, ''psd'' will sync ALL supported profiles that it finds for the given user(s).<br />
<br />
=== Running psd to manage profiles ===<br />
<br />
Do not call {{ic|/usr/bin/profile-sync-daemon}} to sync or to unsync directly. Instead use the provided service files. <br />
<br />
Both a [[systemd]] [[daemon|service]] file and a timer are provided and should be used to interact with ''psd''. Both should be invoked together! The role of the timer is update the tmpfs copy/copies back to the disk which it does once per hour. Failure to start the resync timer will result in the profile being sync'ed only on start up and shutdown.<br />
<br />
Start {{ic|psd}} and {{ic|psd-resync}} service and enable them to start/stop at boot/shutdown ('''highly recommended''').<br />
<br />
Obviously, you must first close your browser before starting the service.<br />
<br />
=== Sync at more frequent intervals (optional) ===<br />
<br />
The package provided timer syncs once per hour. Users may optionally redefine this behavior simply by [[Systemd#Editing_provided_unit_files|extending the systemd unit]]. The example below changes the timer to sync once every ten minutes:<br />
<br />
{{hc|/etc/systemd/system/psd-resync.timer.d/frequency.conf|<nowiki><br />
[Unit]<br />
Description=Timer for Profile-sync-daemon - 10min<br />
<br />
[Timer]<br />
# Empty value resets the list of timers<br />
OnUnitActiveSec=<br />
OnUnitActiveSec=10min<br />
</nowiki>}}<br />
<br />
See {{ic|man systemd.timer}} for additional options.<br />
<br />
== Caveats for Firefox and Heftig's Aurora ONLY ==<br />
<br />
The way ''psd'' keeps track of browser profiles and sync targets requires users to have a unique name as the ''last directory'' for all profiles in their respective {{ic|$HOME/.mozilla/''browser''/profiles.ini}} files. ''psd'' will check when it is called to run for this and refuse if this rule is not satisfied. The following is an example of a BAD profile that will fail the the test. Note that although each full path is unique, they both ''end'' in the same name! Again, the user must modify the {{ic|profiles.ini}} and the corresponding directory on the filesystem to correct this in order to use ''psd''.<br />
<br />
{{hc|~/.mozilla/firefox/profiles.ini|<br />
[General]<br />
StartWithLastProfile&#61;1<br />
<br />
[Profile0 for user facade]<br />
Name&#61;normal<br />
IsRelative&#61;0<br />
Path&#61;/mnt/data/docs/'''facade'''/mozilla/firefox/'''myprofile.abc'''<br />
Default&#61;1<br />
<br />
[Profile1 for user happy]<br />
Name&#61;proxy<br />
IsRelative&#61;0<br />
Path&#61;/mnt/data/docs/'''happy'''/mozilla/firefox/'''myprofile.abc'''<br />
}}<br />
<br />
== FAQ ==<br />
<br />
{{Note|The first three questions apply to versions of ''psd'' equal to or greater than v5.40 only.}}<br />
<br />
=== Q1. My system crashed and didn't sync back. What do I do? ===<br />
<br />
Odds are the "last good" backup of your browser profiles is just fine still sitting happily on your filesystem. Upon restarting {{ic|psd}} (on a reboot for example), a check is preformed to see if the symlink to the tmpfs copy of your profile is invalid. If it is invalid, ''psd'' will snapshot the "last good" backup before it rotates it back into place. This is more for a sanity check that ''psd'' did no harm and that any data loss was a function of something else.<br />
<br />
=== Q2. Where can I find this snapshot? ===<br />
<br />
It depends on the browser. You will find the snapshot in the same directory as the browser profile and it will contain a date-time-stamp that corresponds to the time at which the recovery took place. For example, chromium will be {{ic|~/.config/chromium-backup-crashrecovery-20130912_153310}} -- of course, the date_time suffix will be different for you.<br />
<br />
=== Q3. How can I restore the snapshot? ===<br />
<br />
* Stop {{ic|psd}}.<br />
* Confirm that there is no symlink to the tmpfs browser profile directory. If there is, ''psd'' did not stop correctly for other reasons.<br />
* Move the "bad" copy of the profile to a backup (don't blindly delete anything).<br />
* Copy the snapshot directory to the name that browser expects.<br />
<br />
Example using Chromium:<br />
mv ~/.config/chromium ~/.config/chromium-bad<br />
cp -a ~/.config/chromium-backup-crashrecovery-20130912_153310 ~/.config/chromium<br />
<br />
At this point you can launch chromium which will use the backup snapshot you just copied into place. If all is well, close the browser and restart psd and psd-resync (if using systemd). You may safely delete {{ic|~/.config/chromium-backup-crashrecovery-20130912_153310}} at this point.<br />
<br />
== Support ==<br />
<br />
Post in the [https://bbs.archlinux.org/viewtopic.php?pid=1026974 discussion thread] with comments or concerns.<br />
<br />
== PSD on other distros ==<br />
<br />
''psd'' is a bash script and should therefore run on any Linux distro. Below is a list of distros known to package ''psd'', and a link to download their respective packages. <br />
<br />
{{Note|Different distros use different init systems. The packages linked below are configured to use the default init system for the given distro.}}<br />
<br />
{| class="wikitable" align="center"<br />
|-<br />
! Distro !! Default Init System !! Link to Package<br />
|-<br />
| Arch || Systemd || [https://aur.archlinux.org/packages/profile-sync-daemon AUR].<br />
|- <br />
| Chakra || Systemd || [http://chakra-linux.org/ccr/packages.php?ID=5008 CCR].<br />
|- <br />
| Debian || Upstart || Graysky's PPA. See instruction below.<br />
|- <br />
| Exherbo || Systemd || [http://git.exherbo.org/summer/packages/net-www/profile-sync-daemon In official repos].<br />
|- <br />
| Fedora || Systemd || [http://koji.fedoraproject.org/koji/packageinfo?packageID=16307 In official repos].<br />
|- <br />
| Gentoo || OpenRC || [http://packages.gentoo.org/package/www-misc/profile-sync-daemon In official repos].<br />
|- <br />
| Mint || Upstart || Graysky's PPA. See instruction below.<br />
|- <br />
| OpenSUSE || Upstart || Packaged by [http://download.opensuse.org/repositories/home:/Overman79:/Laptop Overman79].<br />
|- <br />
| Ubuntu || Upstart || Graysky's PPA, See instruction below.<br />
|- <br />
| Void || Systemd || In official [https://github.com/xtraeme/xbps-packages/tree/master/srcpkgs/profile-sync-daemon repos].<br />
|}<br />
<br />
=== Debian ===<br />
<br />
To add the PPA (personal package archive) to your Debian (tested on Squeeze) system, and to install ''psd'':<br />
<br />
# echo "deb http://ppa.launchpad.net/graysky/utils/ubuntu quantal main" > /etc/apt/sources.list.d/graysky.list<br />
# echo "deb-src http://ppa.launchpad.net/graysky/utils/ubuntu quantal main" >> /etc/apt/sources.list.d/graysky.list<br />
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FF7F9516<br />
# apt-get update<br />
# apt-get install profile-sync-daemon<br />
<br />
=== Mint and Ubuntu ===<br />
<br />
To add the PPA (personal package archive) to your Ubuntu (packages available for Lucid and newer) system, and to install ''psd'':<br />
<br />
$ sudo add-apt-repository ppa:graysky/utils<br />
$ sudo apt-get update<br />
$ sudo apt-get install profile-sync-daemon<br />
<br />
== See also ==<br />
<br />
* http://www.webupd8.org/2013/02/keep-your-browser-profiles-in-tmpfs-ram.html<br />
* http://bernaerts.dyndns.org/linux/250-ubuntu-tweaks-ssd</div>Archvillhttps://wiki.archlinux.org/index.php?title=Profile-sync-daemon_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=304580Profile-sync-daemon (Русский)2014-03-15T08:48:51Z<p>Archvill: /* Установка и настройка */ перевел небольшой кусочек</p>
<hr />
<div>[[en:Profile-sync-daemon]]<br />
[[Category:Web Browser (Русский)]]<br />
[[Category:Scripts (Русский)]]<br />
{{Article summary start}}<br />
{{Article summary text|{{AUR|Profile-sync-daemon}} (psd) is a diminutive pseudo-daemon designed to manage your browser's profile in tmpfs and to periodically sync it back to your physical disc (HDD/SSD). This is accomplished via a symlinking step and an innovative use of rsync to maintain back-up and synchronization between the two. One of the major design goals of psd is a completely transparent user experience.}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Anything-sync-daemon}}<br />
{{Article summary wiki|Firefox}}<br />
{{Article summary wiki|Chromium}}<br />
{{Article summary wiki|Opera}}<br />
{{Article summary wiki|SSD}}<br />
{{Article summary end}}<br />
<br />
== Преимущества psd (Profile-sync-daemon)==<br />
<br />
Запуск этого демона необходим для достижения двух целей:<br />
#Износостойкость жесткого диска<br />
#Скорость<br />
<br />
Так как профили, кэш браузера*, и остальное. Были перенесены в tmpfs (Оперативную память), соответственно операции ввода/вывода связанные с браузерами были перенесены из жесткого диска в ОЗУ. Таким образом уменьшился износ жесткого диска а так же повысилась отказоустойчивость и скорость работы браузера. К примеру: скорость доступа к памяти наносекунда а время получения доступа к жесткому диску миллисекунда. Эта разница в 1,000,000 раз.<br />
{{Note|Chromium actually keeps its cache directory '''separately''' from its browser profile directory. It is not within the scope of profile-sync-daemon to modify this behavior; users are encouraged to refer to the [[Chromium_Tips_and_Tweaks#Cache_in_tmpfs]] section of the main [[Chromium_Tips_and_Tweaks]] article for several work-arounds.}}<br />
<br />
== Поддерживаемые браузеры ==<br />
<br />
В настоящее время следующие браузеры поддерживаются:<br />
* [[Chromium]]<br />
* {{AUR|conkeror}}<br />
* [[Firefox]] (all flavors including stable, beta, and aurora)<br />
* [http://www.webupd8.org/2011/05/install-firefox-nightly-from-ubuntu-ppa.html firefox-trunk]: Только в Ubuntu<br />
* {{AUR|google-chrome}}<br />
* {{AUR|google-chrome-beta}}<br />
* [https://bbs.archlinux.org/viewtopic.php?id=117157 heftig's version of Aurora]: Только в Arch Linux<br />
* [[Midori]]<br />
* [[Opera]]<br />
* {{AUR|opera-next}}<br />
* Qupzilla<br />
<br />
== Установка и настройка ==<br />
<br />
{{AUR|profile-sync-daemon}} доступен для скачивания в [[Arch User Repository|AUR]]. Установка и сборка происходит как с другими пакетами. <br />
<br />
=== Редактируем /etc/psd.conf ===<br />
<br />
Редактируем содержимое {{ic|/etc/psd.conf}}, указывая с какими пользователями будет работать ''psd''.<br />
<br />
Пример:<br />
# List users separated by spaces whose browser(s) profile(s) will get symlinked <br />
# and sync'ed to tmpfs.<br />
# Do NOT list a user twice!<br />
USERS="facade happy"<br />
<br />
{{ note | Минимум должен быть один пользователь.}}<br />
<br />
Опционально можно раскомментировать строку BROWSERS и вписать браузеры, которые будут синхронизироваться с tmpfs. Если оставить эту строку закомментированной (по умолчанию), то все поддерживаемые профили браузеров будут синхронизироваться, если они существуют. <br />
<br />
Например: Допустим что Chromium, Opera и Midori установлены, но необходимо чтобы только Chromium и Opera синхронизировались с tmpfs так как пользователь использует Midori в качестве запасного браузера и пользуется им редко:<br />
<br />
# List browsers separated by spaces to include in the sync. Useful if you do not<br />
# wish to have all possible browser profiles sync'ed.<br />
#<br />
# Possible values:<br />
# chromium<br />
# conkeror.mozdev.org<br />
# firefox<br />
# firefox-trunk<br />
# google-chrome<br />
# heftig-aurora <br />
# midori<br />
# opera<br />
# opera-next<br />
# qupzilla<br />
#<br />
# If the following is commented out (default), then all available/supported <br />
# browsers will be sync'ed, separated by comma<br />
BROWSERS="chromium opera"<br />
<br />
== Using psd ==<br />
<br />
=== Режим предварительного просмотра (parse) ===<br />
<br />
The 'parse' option can be called to show users exactly what ''psd'' will do based on the {{ic|/etc/psd.conf}} entered. Call it like so:<br />
$ profile-sync-daemon parse<br />
Profile-sync-daemon v5.24<br />
<br />
psd will manage the following per /etc/psd.conf settings:<br />
<br />
browser/psname: chromium/chromium<br />
owner/group: facade/users<br />
sync target: /home/facade/.config/chromium<br />
tmpfs dir: /tmp/facade-chromium<br />
profile size: 81M<br />
<br />
browser/psname: firefox/firefox<br />
owner/group: facade/users<br />
sync target: /mnt/data/docs/facade/mozilla/firefox/1Zp9V43q.banking<br />
tmpfs dir: /tmp/facade-firefox-1Zp9V43q.banking<br />
profile size: 5.9M<br />
<br />
browser/psname: firefox/firefox<br />
owner/group: facade/users<br />
sync target: /mnt/data/docs/facade/mozilla/firefox/obg67zqQ.proxy<br />
tmpfs dir: /tmp/facade-firefox-obg67zqQ.proxy<br />
profile size: 17M<br />
<br />
As shown in the output and as stated above, if no specific browser or subset of browsers are defined in the BROWSERS array, ''psd'' will sync ALL supported profiles that it finds for the given user(s).<br />
<br />
=== Running psd to manage profiles ===<br />
<br />
Do not call {{ic|/usr/bin/profile-sync-daemon}} to sync or to unsync directly. Instead use the provided service files. <br />
<br />
Both a [[systemd]] [[daemon|service]] file and a timer are provided and should be used to interact with ''psd''. Both should be invoked together! The role of the timer is update the tmpfs copy/copies back to the disk which it does once per hour. Failure to start the resync timer will result in the profile being sync'ed only on start up and shutdown.<br />
<br />
Start {{ic|psd}} and {{ic|psd-resync}} service and enable them to start/stop at boot/shutdown ('''highly recommended''').<br />
<br />
Obviously, you must first close your browser before starting the service.<br />
<br />
=== Sync at more frequent intervals (optional) ===<br />
<br />
The package provided timer syncs once per hour. Users may optionally redefine this behavior simply by [[Systemd#Editing_provided_unit_files|extending the systemd unit]]. The example below changes the timer to sync once every ten minutes:<br />
<br />
{{hc|/etc/systemd/system/psd-resync.timer.d/frequency.conf|<nowiki><br />
[Unit]<br />
Description=Timer for Profile-sync-daemon - 10min<br />
<br />
[Timer]<br />
# Empty value resets the list of timers<br />
OnUnitActiveSec=<br />
OnUnitActiveSec=10min<br />
</nowiki>}}<br />
<br />
See {{ic|man systemd.timer}} for additional options.<br />
<br />
== Caveats for Firefox and Heftig's Aurora ONLY ==<br />
<br />
The way ''psd'' keeps track of browser profiles and sync targets requires users to have a unique name as the ''last directory'' for all profiles in their respective {{ic|$HOME/.mozilla/''browser''/profiles.ini}} files. ''psd'' will check when it is called to run for this and refuse if this rule is not satisfied. The following is an example of a BAD profile that will fail the the test. Note that although each full path is unique, they both ''end'' in the same name! Again, the user must modify the {{ic|profiles.ini}} and the corresponding directory on the filesystem to correct this in order to use ''psd''.<br />
<br />
{{hc|~/.mozilla/firefox/profiles.ini|<br />
[General]<br />
StartWithLastProfile&#61;1<br />
<br />
[Profile0 for user facade]<br />
Name&#61;normal<br />
IsRelative&#61;0<br />
Path&#61;/mnt/data/docs/'''facade'''/mozilla/firefox/'''myprofile.abc'''<br />
Default&#61;1<br />
<br />
[Profile1 for user happy]<br />
Name&#61;proxy<br />
IsRelative&#61;0<br />
Path&#61;/mnt/data/docs/'''happy'''/mozilla/firefox/'''myprofile.abc'''<br />
}}<br />
<br />
== FAQ ==<br />
<br />
{{Note|The first three questions apply to versions of ''psd'' equal to or greater than v5.40 only.}}<br />
<br />
=== Q1. My system crashed and didn't sync back. What do I do? ===<br />
<br />
Odds are the "last good" backup of your browser profiles is just fine still sitting happily on your filesystem. Upon restarting {{ic|psd}} (on a reboot for example), a check is preformed to see if the symlink to the tmpfs copy of your profile is invalid. If it is invalid, ''psd'' will snapshot the "last good" backup before it rotates it back into place. This is more for a sanity check that ''psd'' did no harm and that any data loss was a function of something else.<br />
<br />
=== Q2. Where can I find this snapshot? ===<br />
<br />
It depends on the browser. You will find the snapshot in the same directory as the browser profile and it will contain a date-time-stamp that corresponds to the time at which the recovery took place. For example, chromium will be {{ic|~/.config/chromium-backup-crashrecovery-20130912_153310}} -- of course, the date_time suffix will be different for you.<br />
<br />
=== Q3. How can I restore the snapshot? ===<br />
<br />
* Stop {{ic|psd}}.<br />
* Confirm that there is no symlink to the tmpfs browser profile directory. If there is, ''psd'' did not stop correctly for other reasons.<br />
* Move the "bad" copy of the profile to a backup (don't blindly delete anything).<br />
* Copy the snapshot directory to the name that browser expects.<br />
<br />
Example using Chromium:<br />
mv ~/.config/chromium ~/.config/chromium-bad<br />
cp -a ~/.config/chromium-backup-crashrecovery-20130912_153310 ~/.config/chromium<br />
<br />
At this point you can launch chromium which will use the backup snapshot you just copied into place. If all is well, close the browser and restart psd and psd-resync (if using systemd). You may safely delete {{ic|~/.config/chromium-backup-crashrecovery-20130912_153310}} at this point.<br />
<br />
== Support ==<br />
<br />
Post in the [https://bbs.archlinux.org/viewtopic.php?pid=1026974 discussion thread] with comments or concerns.<br />
<br />
== PSD on other distros ==<br />
<br />
''psd'' is a bash script and should therefore run on any Linux distro. Below is a list of distros known to package ''psd'', and a link to download their respective packages. <br />
<br />
{{Note|Different distros use different init systems. The packages linked below are configured to use the default init system for the given distro.}}<br />
<br />
{| class="wikitable" align="center"<br />
|-<br />
! Distro !! Default Init System !! Link to Package<br />
|-<br />
| Arch || Systemd || [https://aur.archlinux.org/packages/profile-sync-daemon AUR].<br />
|- <br />
| Chakra || Systemd || [http://chakra-linux.org/ccr/packages.php?ID=5008 CCR].<br />
|- <br />
| Debian || Upstart || Graysky's PPA. See instruction below.<br />
|- <br />
| Exherbo || Systemd || [http://git.exherbo.org/summer/packages/net-www/profile-sync-daemon In official repos].<br />
|- <br />
| Fedora || Systemd || [http://koji.fedoraproject.org/koji/packageinfo?packageID=16307 In official repos].<br />
|- <br />
| Gentoo || OpenRC || [http://packages.gentoo.org/package/www-misc/profile-sync-daemon In official repos].<br />
|- <br />
| Mint || Upstart || Graysky's PPA. See instruction below.<br />
|- <br />
| OpenSUSE || Upstart || Packaged by [http://download.opensuse.org/repositories/home:/Overman79:/Laptop Overman79].<br />
|- <br />
| Ubuntu || Upstart || Graysky's PPA, See instruction below.<br />
|- <br />
| Void || Systemd || In official [https://github.com/xtraeme/xbps-packages/tree/master/srcpkgs/profile-sync-daemon repos].<br />
|}<br />
<br />
=== Debian ===<br />
<br />
To add the PPA (personal package archive) to your Debian (tested on Squeeze) system, and to install ''psd'':<br />
<br />
# echo "deb http://ppa.launchpad.net/graysky/utils/ubuntu quantal main" > /etc/apt/sources.list.d/graysky.list<br />
# echo "deb-src http://ppa.launchpad.net/graysky/utils/ubuntu quantal main" >> /etc/apt/sources.list.d/graysky.list<br />
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FF7F9516<br />
# apt-get update<br />
# apt-get install profile-sync-daemon<br />
<br />
=== Mint and Ubuntu ===<br />
<br />
To add the PPA (personal package archive) to your Ubuntu (packages available for Lucid and newer) system, and to install ''psd'':<br />
<br />
$ sudo add-apt-repository ppa:graysky/utils<br />
$ sudo apt-get update<br />
$ sudo apt-get install profile-sync-daemon<br />
<br />
== See also ==<br />
<br />
* http://www.webupd8.org/2013/02/keep-your-browser-profiles-in-tmpfs-ram.html<br />
* http://bernaerts.dyndns.org/linux/250-ubuntu-tweaks-ssd</div>Archvillhttps://wiki.archlinux.org/index.php?title=StarCraft_2&diff=235870StarCraft 22012-11-18T10:47:02Z<p>Archvill: /* Configure Wine */</p>
<hr />
<div>[[Category:Gaming]]<br />
[[Category:Wine]]<br />
{{out of date}}<br />
==Environment==<br />
<br />
==== Packages ====<br />
You need wine.<br />
$ pacman -S wine<br />
<br />
Other libraries:<br />
<br />
$ pacman -S lib32-libjpeg-turbo lib32-libpng lib32-libldap<br />
<br />
If you want to use nvidia drivers:<br />
$ pacman -S nvidia nvidia-utils lib32-nvidia-utils<br />
<br />
If you want to use PulseAudio:<br />
$ pacman -S lib32-alsa-plugins lib32-pulseaudio<br />
<br />
====Configure Wine====<br />
The sound in Starcraft 2 in Wine versions 1.3.25 and later works out of the box. For older versions of Wine, you must either disable the mmdevapi library, or use openal. <br />
{{Warning|If you disabled mmdevapi previously, you won't get any sound on new versions of Wine until you remove the exception.}}<br />
<br />
*For normal sound output (versions before 1.3.25)<br />
$ winecfg<br />
Go to Libraries, add "mmdevapi" and set it to "disabled".<br />
Or you can install openal, in which case the mmdevapi setting isn't required:<br />
# pacman -S openal<br />
# pacman -S lib32-openal (this line is only necessary for x86_64)<br />
*Edit the registry<br />
$ regedit<br />
Go to HKEY_CURRENT_USER/Software/Wine/Direct3D<br />
To create new entries: Right-click on Direct3D, select New -> String Value<br />
DirectDrawRenderer opengl<br />
Multisampling disabled<br />
OffscreenRenderingMode pbuffer<br />
PixelShaderMode enabled<br />
RenderTargetLockMode readtex<br />
StrictDrawOrdering disabled<br />
UseGLSL disabled<br />
VertexShaderMode hardware<br />
VideoMemorySize 1536 (Change this to however much memory your card has)<br />
*For Map-Editor: <br />
**The latest winetricks can be found at [http://winetricks.org/winetricks http://winetricks.org/winetricks], download and start:<br />
$ sh winetricks vcrun2005 vcrun2008<br />
*To get rid of some warnings that may or may not matter, you may want to install the following on x86_64:<br />
# pacman -S lib32-mpg123 lib32-jack<br />
<br />
Also install [https://aur.archlinux.org/packages.php?ID=54582 lib32-audiofile] and [https://aur.archlinux.org/packages.php?ID=41702 lib32-esound] from AUR.<br />
<br />
*Don't emulate a virtual desktop for the installer.<br />
*If the installer doesn't work, backup and remove your .wine directory.<br />
*If you are asked to install Gecko, then click install to do so.<br />
*If the installer hangs while downloading patch 1.03, install ie6, and set the wine version to windows XP:<br />
$ sh winetricks ie6<br />
$ winecfg<br />
or on x64<br />
$ WINEPREFIX=~/win32 sh winetricks ie6<br />
$ winecfg<br />
<br />
Go to Applications, set Windows Version to "Windows XP"<br />
<br />
==Installing StarCraft II==<br />
<br />
<br />
====Installing from DVD====<br />
*Mount DVD/DVD Image, (unhide invisible data), for example:<br />
$ mount -o ro,unhide,uid=1000 /dev/dvd /media/dvd (for the DVD)<br />
$ mount -o loop,ro,unhide,uid=<your_id> <starcraft.iso> /media/dvd (for an image) <br />
*Start the installer:<br />
$ wine start /unix /media/dvd/Installer.exe<br />
<br />
====Blizzard Downloader====<br />
*Get the downloader from your [http://battle.net battle.net] account (you need to log in).<br />
*You may want to go to View -> Preferences and check "Don't throttle background download".<br />
*During the install, you will need about twice the space of the installed game, since it downloads to a temporary directory (of your choice) before installing. This directory can be deleted after install.<br />
<br />
====Starcraft 2 demo====<br />
https://us.battle.net/account/sc2-demo.html<br />
The download is 1.56 GB. You need to have a battle.net account.<br />
<br />
The demo got replaced by [http://us.battle.net/sc2/en/blog/3250656 StarCraft II: Starter Edition].<br />
<br />
==Playing StarCraft II==<br />
$ cd .wine/drive_c/Program\ Files/StarCraft\ II/<br />
$ wine start StarCraft\ II.exe <br />
(Or use the Starcraft II icon, but that'll make it more difficult to troubleshoot in case you have problems.)<br />
<br />
==Hints for Performance Tuning==<br />
* CTRL+ALT+F shows FPS<br />
* Launching the game with the -opengl flag has been reported to increase performance. (This may be specific to the mac version.)<br />
* Disabling Shader in wine could help, if FPS is too low. (It may also cause the game to not work at all. Again, possibly only mac.)<br />
* Make sure that you are not using old graphics drivers. Nvidia drivers should be 256.35 or later (extra/nvidia is up to date).<br />
* Edit the variables.txt in your My Documents/Starcraft II/ following the guide [http://www.teamliquid.net/forum/viewmessage.php?topic_id=142046 here]<br />
<br />
==x86_64==<br />
If you are running a 64bit version of Arch Linux, you may have trouble getting the updating done. Since StarCraft 2 uses Internet Explorer to render all the HTML pages, you need to have Internet Explorer installed. However, by the installer of IE6 will warn you that 64bit is not supported. By default, if you have created your wine configuration directory (~/.wine), it will be set to 64 bit. To overcome this problem, you can either recreate your ~/.wine configuration, or if you wish to keep your current ~/.wine configuration see the alternative method below. If you wish to recreate your ~/.wine configuration simply remove the ~/.wine directory, add export WINEARCH="win32" to your ~/.bashrc, logout of X, login once again and launch wine. It should create a ~/.wine folder. Next install ie6 with<br />
$ winetricks ie6<br />
<br />
[https://bbs.archlinux.org/viewtopic.php?pid=806725#p806725 More information can be found here]<br />
<br />
<br />
'''Alternative Method: Updating while keeping your 64bit ~/.wine directory'''<br />
<br />
This method uses a separate wine directory installed as 32bit. So the first step is to setup this alternate wine configuratoin. The easiest way to do this is to install a wine configuration for a separate user. You do not need to logout for this, just open up your terminal of choice and:<br />
<pre>$ login alternateuser</pre><br />
or if you're going to use root:<br />
<pre>$ su</pre><br />
Enter password, remove any already existing wine configuration supposing you do not use wine from this user, then set wine to use 32bit architecture and generate the configuration:<br />
<pre>$ export WINEARCH="win32"</pre><br />
<pre>$ winecfg</pre><br />
Install/update the wine configuration. No other settings need to be set after updating so you can just close the wine configuration window. Then use winetricks to install ie6:<br />
<pre>$ winetricks ie6</pre><br />
When that's done, use the new configuration to run Starcraft II.exe from your user's 64bit /home/user/.wine directory where Starcraft 2 is installed:<br />
<pre>$ wine /home/user/.wine/drive_c/Program\ Files\ \(x86\)/Starcraft\ II/Starcraft\ II.exe</pre><br />
This will run the updater/patcher installing all the patch files to your 64bit ~/.wine directory using the alternate user's 32bit .wine directory containing ie6. Close the updater when it's finished and you can then remove the new 32bit .wine configuration or keep it for later updates. Now you can go back to playing from your regular user using 64bit wine.<br />
<br />
==Patch 1.5.0==<br />
<br />
* Intel HD Graphics 3000 have increased stability and gained around 10FPS, however you have to set<br />
<pre>$ wine regedit</pre><br />
Go to HKEY_CURRENT_USER/Software/Wine/Direct3D<br />
VideoMemorySize 128<br />
Otherwise it won't run and will exit with errors about too low video VRAM.<br />
<br />
<br />
* Problems with updating<br />
Start game and wait for updating to start.<br />
<pre>$ wine "StarCraft II.exe"</pre><br />
When agent fails with:<br />
<pre>Agent started on port #6882<br />
Executing operation: disable_firewall applicationPath="C:\users\Public\Application Data\Battle.net\Agent\Agent.1199\Agent.exe" applicationName="Battle.net Update Agent"<br />
AgentAsAdmin failed to add a firewall exception for 'C:\users\Public\Application Data\Battle.net\Agent\Agent.1199\Agent.exe'.<br />
Registered Event: "shutdown event"<br />
Registered Event: "database flush event"<br />
PostTo succeeded status: 0 for url: http://enGB.patch.battle.net:1119/patch<br />
Post Data:<br />
<version program="Agnt"><record program="Bnet" component="Win" version="1" /><record program="Agnt" component="cdn" version="1" /><record program="Agnt" component="cfg" version="1" /><record program="Agnt" component="Win" version="1199" /></version><br />
DownloadTo failed error: 0 of article: from:<br />
<br />
DownloadTo failed error: 0 of article: from:<br />
<br />
DownloadTo failed error: 0 of article: from:</pre><br />
Launch Agent.exe --nohttpauth<br />
<pre>wine ~/.wine/drive_c/users/Public/AppData/Battle.net/Agent/Agent.exe --nohttpauth</pre><br />
Start StarCraft II again to re-launch updater.<br />
<pre>wine "StarCraft II.exe"</pre><br />
<br />
==Other Problems==<br />
<br />
* For some, the game crashes upon exit.<br />
* (There seems to be more issues with ati cards than nvidia.)<br />
* For some, in-gamechange of resolution does not work. Editing 'width=x' and 'height=y' in Variables.txt in My Documents/Starcraft II solves this issue. Replace x and y with the prefered resolution.<br />
* Graphics problems (No 3D background in menu, blue non-texturized units and other glitches) launch with: <br />
<pre>force_s3tc_enable=true wine StarCraft II.exe</pre><br />
* If updates don't seem to work at all try to apply them manually. You can download European version patches here: http://eu.battle.net/support/en/article/starcraft-ii-patch-information. Check the bottom of that page for other regions. Then you execute the patch with wine.<br />
* Be sure to have libjpeg6 installed. Otherwise, the updater won't work.<br />
<br />
* Flickering lights emitted from SCV's thrusters and other light sources (see: http://www.youtube.com/watch?v=tsaEd-dTAlQ) may be because of missing registry entries:<br />
<pre>[HKEY_CURRENT_USER\Software\Wine\Direct3D]<br />
"DirectDrawRenderer"="opengl"<br />
"Multisampling"="disabled"<br />
"OffscreenRenderingMode"="fbo"<br />
"PixelShaderMode"="enabled"<br />
"RenderTargetLockMode"="readtex"<br />
"StrictDrawOrdering"="disabled"<br />
"UseGLSL"="disabled"<br />
"VideoMemorySize"="128"</pre><br />
<br />
As told here with explanation for variables:<br />
http://wiki.winehq.org/UsefulRegistryKeys<br />
<br />
It seems to fix the problem.<br />
<br />
==References and Resources==<br />
<br />
*[http://appdb.winehq.org/objectManager.php?sClass=version&iId=20882 StarCraft II: Wings of Liberty (Retail)] (WineHQ AppDB)<br />
*[http://bugs.winehq.org/show_bug.cgi?id=23806 StarCraft II crashes because of ACCESS_VIOLATION before the loading screen] (WineHQ Bug Tracking Database)<br />
*[http://bugs.winehq.org/show_bug.cgi?id=23323 World of Warcraft crashes upon login after 3.3.5 patch.] (WineHQ Bug Tracking Database)<br />
*[https://bbs.archlinux.org/viewtopic.php?id=101822 starcraft2 crashing on loading] (archlinux forums)<br />
*[https://bbs.archlinux.org/viewtopic.php?id=103354 starcraft2 fails to update to patch 1.03] (archlinux forums)<br />
*[http://eu.battle.net/sc2/en/forum/topic/76237660 Known Issues] (battle.net EU forums)<br />
*[http://eu.battle.net/sc2/en/forum/topic/283440977 Patch News] (battle.net EU forums)<br />
*There used to be a link here about hotkey customization. Instead, [http://eu.battle.net/sc2/en/forum/topic/443018939#15 here is a link telling us that's not allowed.] (battle.net EU forums)</div>Archvillhttps://wiki.archlinux.org/index.php?title=StarCraft_2&diff=235866StarCraft 22012-11-18T10:43:55Z<p>Archvill: /* Configure Wine */ lib32-esound fix</p>
<hr />
<div>[[Category:Gaming]]<br />
[[Category:Wine]]<br />
{{out of date}}<br />
==Environment==<br />
<br />
==== Packages ====<br />
You need wine.<br />
$ pacman -S wine<br />
<br />
Other libraries:<br />
<br />
$ pacman -S lib32-libjpeg-turbo lib32-libpng lib32-libldap<br />
<br />
If you want to use nvidia drivers:<br />
$ pacman -S nvidia nvidia-utils lib32-nvidia-utils<br />
<br />
If you want to use PulseAudio:<br />
$ pacman -S lib32-alsa-plugins lib32-pulseaudio<br />
<br />
====Configure Wine====<br />
The sound in Starcraft 2 in Wine versions 1.3.25 and later works out of the box. For older versions of Wine, you must either disable the mmdevapi library, or use openal. <br />
{{Warning|If you disabled mmdevapi previously, you won't get any sound on new versions of Wine until you remove the exception.}}<br />
<br />
*For normal sound output (versions before 1.3.25)<br />
$ winecfg<br />
Go to Libraries, add "mmdevapi" and set it to "disabled".<br />
Or you can install openal, in which case the mmdevapi setting isn't required:<br />
# pacman -S openal<br />
# pacman -S lib32-openal (this line is only necessary for x86_64)<br />
*Edit the registry<br />
$ regedit<br />
Go to HKEY_CURRENT_USER/Software/Wine/Direct3D<br />
To create new entries: Right-click on Direct3D, select New -> String Value<br />
DirectDrawRenderer opengl<br />
Multisampling disabled<br />
OffscreenRenderingMode pbuffer<br />
PixelShaderMode enabled<br />
RenderTargetLockMode readtex<br />
StrictDrawOrdering disabled<br />
UseGLSL disabled<br />
VertexShaderMode hardware<br />
VideoMemorySize 1536 (Change this to however much memory your card has)<br />
*For Map-Editor: <br />
**The latest winetricks can be found at [http://winetricks.org/winetricks http://winetricks.org/winetricks], download and start:<br />
$ sh winetricks vcrun2005 vcrun2008<br />
*To get rid of some warnings that may or may not matter, you may want to install the following on x86_64:<br />
# pacman -S lib32-mpg123 lib32-jack<br />
<br />
Also install [https://aur.archlinux.org/packages.php?ID=41702 lib32-esound] from AUR.<br />
<br />
*Don't emulate a virtual desktop for the installer.<br />
*If the installer doesn't work, backup and remove your .wine directory.<br />
*If you are asked to install Gecko, then click install to do so.<br />
*If the installer hangs while downloading patch 1.03, install ie6, and set the wine version to windows XP:<br />
$ sh winetricks ie6<br />
$ winecfg<br />
or on x64<br />
$ WINEPREFIX=~/win32 sh winetricks ie6<br />
$ winecfg<br />
<br />
Go to Applications, set Windows Version to "Windows XP"<br />
<br />
==Installing StarCraft II==<br />
<br />
<br />
====Installing from DVD====<br />
*Mount DVD/DVD Image, (unhide invisible data), for example:<br />
$ mount -o ro,unhide,uid=1000 /dev/dvd /media/dvd (for the DVD)<br />
$ mount -o loop,ro,unhide,uid=<your_id> <starcraft.iso> /media/dvd (for an image) <br />
*Start the installer:<br />
$ wine start /unix /media/dvd/Installer.exe<br />
<br />
====Blizzard Downloader====<br />
*Get the downloader from your [http://battle.net battle.net] account (you need to log in).<br />
*You may want to go to View -> Preferences and check "Don't throttle background download".<br />
*During the install, you will need about twice the space of the installed game, since it downloads to a temporary directory (of your choice) before installing. This directory can be deleted after install.<br />
<br />
====Starcraft 2 demo====<br />
https://us.battle.net/account/sc2-demo.html<br />
The download is 1.56 GB. You need to have a battle.net account.<br />
<br />
The demo got replaced by [http://us.battle.net/sc2/en/blog/3250656 StarCraft II: Starter Edition].<br />
<br />
==Playing StarCraft II==<br />
$ cd .wine/drive_c/Program\ Files/StarCraft\ II/<br />
$ wine start StarCraft\ II.exe <br />
(Or use the Starcraft II icon, but that'll make it more difficult to troubleshoot in case you have problems.)<br />
<br />
==Hints for Performance Tuning==<br />
* CTRL+ALT+F shows FPS<br />
* Launching the game with the -opengl flag has been reported to increase performance. (This may be specific to the mac version.)<br />
* Disabling Shader in wine could help, if FPS is too low. (It may also cause the game to not work at all. Again, possibly only mac.)<br />
* Make sure that you are not using old graphics drivers. Nvidia drivers should be 256.35 or later (extra/nvidia is up to date).<br />
* Edit the variables.txt in your My Documents/Starcraft II/ following the guide [http://www.teamliquid.net/forum/viewmessage.php?topic_id=142046 here]<br />
<br />
==x86_64==<br />
If you are running a 64bit version of Arch Linux, you may have trouble getting the updating done. Since StarCraft 2 uses Internet Explorer to render all the HTML pages, you need to have Internet Explorer installed. However, by the installer of IE6 will warn you that 64bit is not supported. By default, if you have created your wine configuration directory (~/.wine), it will be set to 64 bit. To overcome this problem, you can either recreate your ~/.wine configuration, or if you wish to keep your current ~/.wine configuration see the alternative method below. If you wish to recreate your ~/.wine configuration simply remove the ~/.wine directory, add export WINEARCH="win32" to your ~/.bashrc, logout of X, login once again and launch wine. It should create a ~/.wine folder. Next install ie6 with<br />
$ winetricks ie6<br />
<br />
[https://bbs.archlinux.org/viewtopic.php?pid=806725#p806725 More information can be found here]<br />
<br />
<br />
'''Alternative Method: Updating while keeping your 64bit ~/.wine directory'''<br />
<br />
This method uses a separate wine directory installed as 32bit. So the first step is to setup this alternate wine configuratoin. The easiest way to do this is to install a wine configuration for a separate user. You do not need to logout for this, just open up your terminal of choice and:<br />
<pre>$ login alternateuser</pre><br />
or if you're going to use root:<br />
<pre>$ su</pre><br />
Enter password, remove any already existing wine configuration supposing you do not use wine from this user, then set wine to use 32bit architecture and generate the configuration:<br />
<pre>$ export WINEARCH="win32"</pre><br />
<pre>$ winecfg</pre><br />
Install/update the wine configuration. No other settings need to be set after updating so you can just close the wine configuration window. Then use winetricks to install ie6:<br />
<pre>$ winetricks ie6</pre><br />
When that's done, use the new configuration to run Starcraft II.exe from your user's 64bit /home/user/.wine directory where Starcraft 2 is installed:<br />
<pre>$ wine /home/user/.wine/drive_c/Program\ Files\ \(x86\)/Starcraft\ II/Starcraft\ II.exe</pre><br />
This will run the updater/patcher installing all the patch files to your 64bit ~/.wine directory using the alternate user's 32bit .wine directory containing ie6. Close the updater when it's finished and you can then remove the new 32bit .wine configuration or keep it for later updates. Now you can go back to playing from your regular user using 64bit wine.<br />
<br />
==Patch 1.5.0==<br />
<br />
* Intel HD Graphics 3000 have increased stability and gained around 10FPS, however you have to set<br />
<pre>$ wine regedit</pre><br />
Go to HKEY_CURRENT_USER/Software/Wine/Direct3D<br />
VideoMemorySize 128<br />
Otherwise it won't run and will exit with errors about too low video VRAM.<br />
<br />
<br />
* Problems with updating<br />
Start game and wait for updating to start.<br />
<pre>$ wine "StarCraft II.exe"</pre><br />
When agent fails with:<br />
<pre>Agent started on port #6882<br />
Executing operation: disable_firewall applicationPath="C:\users\Public\Application Data\Battle.net\Agent\Agent.1199\Agent.exe" applicationName="Battle.net Update Agent"<br />
AgentAsAdmin failed to add a firewall exception for 'C:\users\Public\Application Data\Battle.net\Agent\Agent.1199\Agent.exe'.<br />
Registered Event: "shutdown event"<br />
Registered Event: "database flush event"<br />
PostTo succeeded status: 0 for url: http://enGB.patch.battle.net:1119/patch<br />
Post Data:<br />
<version program="Agnt"><record program="Bnet" component="Win" version="1" /><record program="Agnt" component="cdn" version="1" /><record program="Agnt" component="cfg" version="1" /><record program="Agnt" component="Win" version="1199" /></version><br />
DownloadTo failed error: 0 of article: from:<br />
<br />
DownloadTo failed error: 0 of article: from:<br />
<br />
DownloadTo failed error: 0 of article: from:</pre><br />
Launch Agent.exe --nohttpauth<br />
<pre>wine ~/.wine/drive_c/users/Public/AppData/Battle.net/Agent/Agent.exe --nohttpauth</pre><br />
Start StarCraft II again to re-launch updater.<br />
<pre>wine "StarCraft II.exe"</pre><br />
<br />
==Other Problems==<br />
<br />
* For some, the game crashes upon exit.<br />
* (There seems to be more issues with ati cards than nvidia.)<br />
* For some, in-gamechange of resolution does not work. Editing 'width=x' and 'height=y' in Variables.txt in My Documents/Starcraft II solves this issue. Replace x and y with the prefered resolution.<br />
* Graphics problems (No 3D background in menu, blue non-texturized units and other glitches) launch with: <br />
<pre>force_s3tc_enable=true wine StarCraft II.exe</pre><br />
* If updates don't seem to work at all try to apply them manually. You can download European version patches here: http://eu.battle.net/support/en/article/starcraft-ii-patch-information. Check the bottom of that page for other regions. Then you execute the patch with wine.<br />
* Be sure to have libjpeg6 installed. Otherwise, the updater won't work.<br />
<br />
* Flickering lights emitted from SCV's thrusters and other light sources (see: http://www.youtube.com/watch?v=tsaEd-dTAlQ) may be because of missing registry entries:<br />
<pre>[HKEY_CURRENT_USER\Software\Wine\Direct3D]<br />
"DirectDrawRenderer"="opengl"<br />
"Multisampling"="disabled"<br />
"OffscreenRenderingMode"="fbo"<br />
"PixelShaderMode"="enabled"<br />
"RenderTargetLockMode"="readtex"<br />
"StrictDrawOrdering"="disabled"<br />
"UseGLSL"="disabled"<br />
"VideoMemorySize"="128"</pre><br />
<br />
As told here with explanation for variables:<br />
http://wiki.winehq.org/UsefulRegistryKeys<br />
<br />
It seems to fix the problem.<br />
<br />
==References and Resources==<br />
<br />
*[http://appdb.winehq.org/objectManager.php?sClass=version&iId=20882 StarCraft II: Wings of Liberty (Retail)] (WineHQ AppDB)<br />
*[http://bugs.winehq.org/show_bug.cgi?id=23806 StarCraft II crashes because of ACCESS_VIOLATION before the loading screen] (WineHQ Bug Tracking Database)<br />
*[http://bugs.winehq.org/show_bug.cgi?id=23323 World of Warcraft crashes upon login after 3.3.5 patch.] (WineHQ Bug Tracking Database)<br />
*[https://bbs.archlinux.org/viewtopic.php?id=101822 starcraft2 crashing on loading] (archlinux forums)<br />
*[https://bbs.archlinux.org/viewtopic.php?id=103354 starcraft2 fails to update to patch 1.03] (archlinux forums)<br />
*[http://eu.battle.net/sc2/en/forum/topic/76237660 Known Issues] (battle.net EU forums)<br />
*[http://eu.battle.net/sc2/en/forum/topic/283440977 Patch News] (battle.net EU forums)<br />
*There used to be a link here about hotkey customization. Instead, [http://eu.battle.net/sc2/en/forum/topic/443018939#15 here is a link telling us that's not allowed.] (battle.net EU forums)</div>Archvillhttps://wiki.archlinux.org/index.php?title=Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=235579Systemd (Русский)2012-11-15T19:26:25Z<p>Archvill: /* Консоль и раскладка клавиатуры */</p>
<hr />
<div>{{DISPLAYTITLE:systemd (Русский)}}<br />
[[Category:Русский]]<br />
[[Category:Процесс Загрузки (Русский)]]<br />
[[en:systemd]]<br />
[[es:systemd]]<br />
[[fr:systemd]]<br />
[[it:systemd]]<br />
[[ja:Systemd]]<br />
[[zh-CN:systemd]]<br />
{{Article summary start|Сводка}}<br />
{{Article summary text|Статья охватывает установку и настройку systemd.}}<br />
{{Article summary heading|Связанные статьи}}<br />
{{Article summary wiki|systemd/User}}<br />
{{Article summary wiki|systemd/Services}}<br />
{{Article summary wiki|systemd FAQ}}<br />
{{Article summary wiki|init Rosetta (Русский)}}<br />
{{Article summary wiki|udev (Русский)}}<br />
{{Article summary end}}<br />
Цитата с [http://freedesktop.org/wiki/Software/systemd веб-страницы проекта]:<br />
<br />
''"'''systemd''' - система [инициализации] и менеджер служб для Linux, совместимые со скриптами инициализации SysV и LSB. '''systemd''' обеспечивает возможности агрессивной параллелизации, использует сокеты и активацию [[D-Bus]] для запускаемых служб, предлагает запуск демонов по необходимости, отслеживает процессы при помощи [[cgroups|контрольных групп]] Linux, поддерживает мгновенные снимки и восстановление состояния системы, монтирование и точки монтирования, а также внедряет основанную на зависимостях логику контроля процессов сложных транзакций. Эта система может выступать заменой [[SysVinit|sysvinit]]."''.<br />
<br />
{{Note|1=За детальным объяснением причин происходящего перехода Arch'а на systemd обратитесь к [https://bbs.archlinux.org/viewtopic.php?pid&#61;1149530#p1149530 сообщению на англоязычном форуме].}}<br />
<br />
Смотрите также [[Wikipedia:Systemd|статью в Википедии]].<br />
<br />
== Соображения перед началом миграции ==<br />
<br />
* Настоятельно рекомендуется перейти на новую конфигурацию '''initscripts''', описанную в статье [[rc.conf (Русский)|rc.conf]]. Сконфигурировав таким образом свою систему, вы проделаете бóльшую часть работы, необходимую для миграции на systemd.<br />
* Почитайте про systemd на [http://freedesktop.org/wiki/Software/systemd/ сайте разработчиков].<br />
* Обратите внимание, что systemd имеет собственный '''журнал (journal)''', заменяющий '''syslog''', хотя оба варианта ведения логов могут сосуществовать. Обратитесь к приведенному ниже [[#Журнал|разделу, посвященному журналу]].<br />
* Хотя systemd вполне способна заменить определенную функциональность таких демонов, как '''cron''', '''acpid''' или '''xinetd''', но если вы не хотите, можете не отказываться от использования традиционных демонов.<br />
* Интерактивные загрузочные скрипты (initscripts) не работают с systemd. В частности, '''netcfg-menu''' [https://bugs.archlinux.org/task/31377 не может] использоваться при загрузке системы.<br />
<br />
== Установка ==<br />
<br />
{{Note|Оба пакета - {{pkg|systemd}} и {{pkg|systemd-sysvcompat}} - ставаятся по умолчанию при установке с носителя новее, чем [https://www.archlinux.org/news/systemd-is-now-the-default-on-new-installations/ 2012-10-13].}}<br />
<br />
Следующий раздел предназначен для тех установок Arch Linux, которые все еще зависят от пакетов {{pkg|sysvinit}} и {{pkg|initscripts}} и не перешли на использование {{pkg|systemd}}.<br />
<br />
# Установите пакет {{pkg|systemd}} и добавьте следующую запись к командной строке загрузки ядра: {{ic|1=init=/usr/lib/systemd/systemd}}<br />
# выполнив это, вы сможете включать или отключать любой необходимый сервис путем применения команды {{ic|systemctl enable <service_name>}} (это примерно соответствует тому, что включалось в массив {{ic|DAEMONS}}).<br />
# Перезагрузите свою систему и убедитесь, что {{ic|systemd}} в настоящее время активен, выполнив слудующую команду: {{ic|$ cat /proc/1/comm}}. Данная команда должна вернуть строку {{ic|systemd}}.<br />
# Удалите {{pkg|initscripts}} и {{pkg|sysvinit}} из вашей системы и установите {{pkg|systemd-sysvcompat}}.<br />
# В последнюю очередь удалите параметр {{ic|1=init=/usr/lib/systemd/systemd}}, поскольку необходимости в нем более нет.<br />
<br />
=== Дополнительная информация ===<br />
<br />
* Если в параметрах ядра имеется значение {{ic|quiet}}, вероятно, вам стоит удалить его для нескольких первых загрузок systemd, чтобы видеть возникающие во время загрузке проблемы.<br />
<br />
* Теперь добавлять вашего пользователя в [[Users and Groups|группы]] ({{ic|optical}}, {{ic|audio}}, {{ic|scanner}}, ...) в большинстве случаев '''нет''' необходимости при использовании systemd. Это даже может нарушить работоспособность системы. Например, добавление в группу audio может привести к невозможности быстрого переключения между пользователями и позволит приложениям заблокировать программное микширование. Каждый вход PAM предоставляет сессию login, которое дает вам разрешения для локальной сессии посредством [[Wikipedia:Access control list|POSIX ACLs]] на аудио/видео устройства и позволяет выполнять некоторые операции, такие, как как монтирование съемных носителей через [[udisks]]. <br />
<br />
{{Note|Systemd-logind заменил [[ConsoleKit]], удаленный из репозиториев, поэтому для полной функциональности теперь система должна загружаться с использованием systemd. Смотрите [http://archlinux.org.ru/node/352/ новость] для получения дальнейшей информации.}<br />
<br />
Ранее ConsoleKit обеспечивал подобные разрешения для устройств на основе ACL и разрешения polkit для локальных сессий.}}<br />
<br />
== Родные системные файлы ==<br />
<br />
{{Note|Возможно, вам придется создать эти файлы. Установите для всех файлов права доступа 644 и владельца root:root.}}<br />
<br />
=== Имя компьютера (hostname) ===<br />
<br />
Имя компьютера настраивается в файле {{ic|/etc/hostname}}. Этот файл не должен содержать системный домен (если таковой имеется). Для установки имени компьютера выполните:<br />
<br />
# hostnamectl set-hostname '''myhostname'''<br />
<br />
Обратитесь к руководствам {{ic|man 5 hostname}} и {{ic|man hostnamectl}} для получения более подробной информации.<br />
<br />
Вот примерный файл:<br />
<br />
{{hc|/etc/hostname|<br />
myhostname<br />
}}<br />
<br />
=== Локаль ===<br />
<br />
Системная локаль по умолчанию настраивается в конфигурационном файле {{ic|/etc/locale.conf}}. Для установки локали по умолчанию выполните:<br />
<br />
# localectl set-locale LANG="ru_RU.UTF-8"<br />
<br />
{{Note|Перед установкой локали по умолчанию вам сперва необходимо сделать локали доступными системе, раскомментировав их в файле {{ic|/etc/locale.gen}} и затем выполнив команду {{ic|locale-gen}} от суперпользователя root. Локаль, установленная командой {{ic|localectl}}, должна быть одной из '''раскомментированных''' локалей в файле {{ic|/etc/locale.gen}}.}}<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 localectl}} и {{ic|man 5 locale.conf}}.<br />
* Дальнейшая информация содержится в статье [[Locale]].<br />
<br />
Вот примерный файл:<br />
<br />
{{hc|/etc/locale.conf|2=<br />
LANG=ru_RU.utf8}}<br />
<br />
=== Консоль и раскладка клавиатуры ===<br />
<br />
Файл {{ic|/etc/vconsole.conf}} устанавливает настройки виртуальной консоли (раскладку клавиатуры и консольный шрифт).<br />
<br />
{{hc|/etc/vconsole.conf|2=<br />
KEYMAP=ru4<br />
FONT=UniCyr_8x16<br />
}}<br />
<br />
{{Note|С версии {{Pkg|systemd}}-194 используются шрифт ядра и раскладку по умолчанию (т.е. американскую английскую). Нет более необходимости (для тех, кто использует американскую английскую раскладку) настраивать в конфигурационном файле строки {{ic|1=KEYMAP=}} и {{ic|1=FONT=}}, их можно оставить пустыми.}}<br />
<br />
Другой способ настройки раскладки клавиатуры в консоли состоит в использовании команды:<br />
<br />
# localectl set-keymap ru4<br />
<br />
Преимущество такого подхода - в том, что он также установит указанную раскладку клавиатуры и для X11.<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 localectl}} и {{ic|man 5 vconsole.conf}}.<br />
* Для получения детальной информации обратитесь к разделам [[Fonts#Console_fonts|консольные шрифты (англ.)]] и [[KEYMAP|раскладка клавиатуры (англ.)]].<br />
<br />
=== Временная зона ===<br />
<br />
Временная зона настраивается путем создания соответствующей символической ссылки {{ic|/etc/localtime}} на файл временной зоны в директории {{ic|/usr/share/zoneinfo/}}. Чтобы сделать это автоматически, выполните команду:<br />
<br />
# timedatectl set-timezone Europe/Moscow<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 timedatectl}} и {{ic|man 5 localtime}} и {{ic|man 7 archlinux}}.<br />
<br />
{{Note|Прежний конфигурационный файл {{ic|/etc/timezone}} объявлен устаревшим с выходом {{pkg|systemd}}-190 и должен быть удален.}}<br />
<br />
Альтернативный метод - создание символической ссылки вручную:<br />
<!-- использовать относительную символическую ссылку! --><br />
# ln -sf ../usr/share/zoneinfo/Europe/Moscow /etc/localtime<br />
<br />
=== Аппаратные часы ===<br />
<br />
Systemd будет использовать UTC для аппаратных часов по умолчанию.<br />
{{Tip|Обычно рекомендуется запускать [[NTP|демон Network Time Protocol]] для поддержания синхронизации аппаратных часов с системным временем.}}<br />
<br />
==== Аппаратные часы по localtime ====<br />
<br />
Если вы собираетесь выставить аппаратные часы по localtime (местному времени, что '''КАТЕГОРИЧЕСКИ НЕ РЕКОМЕНДУЕТСЯ'''), выполните команду:<br />
<br />
# timedatectl set-local-rtc true<br />
<br />
Если же захотите вернуть ваши аппаратные часы к использованию временного формата UTC, выполните:<br />
<br />
# timedatectl set-local-rtc false<br />
<br />
Помните, что настройка перехода на зимнее/летнее время - неблагодарное занятие. Если переход на зимнее/летнее время происходит в тот момент, когда ваш компьютер выключен, то при следующей загрузке ваши часы будут показывать ошибочное время ([http://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html здесь об этом чуть подробнее (англ.)]). Последние версии ядра устанавливают системное время из RTC (часов реального времени) непосредственно во время загрузки без использования {{ic|hwclock}}, при этом ядро всегда считает, что RTC выставлено по UTC. Это означает, что если RTC выставлено по местному времени (local time), системное время будет изначально установлено ошибочно и затем корректироваться вскоре после этого при каждой загрузке. Это является причиной некоторых досадных багов (идущие назад часы редко являются нужной вещью).<br />
<br />
Причиной, позволяющей RTC быть выставленными по местному времени, является двойная загрузка системы с Windows, ([http://blogs.msdn.com/b/oldnewthing/archive/2004/09/02/224672.aspx которая использует localtime (англ.)]). Windows воспринимает RTC, выставленные по UTC при помощи простого [[Time#UTC in Windows|исправления реестра (англ.)]]. Если вы столкнетесь с подобными проблемами при двойной загрузке с Windows, вы можете установить аппаратные часы на использование местного времени. <br />
<br />
Если вы настроите Windows на использование UTC, также не забудьте отключить функцию "Обновление времени по Интернету" ("Internet Time Update"), иначе для Windows возникнет проблема с аппаратными часами, поскольку система будет пытаться синхронизировать их с временем через Интернет. Вместо этого следует оставить время в формате RTC и синхронизовать через Интернет в Linux посредством демона [[NTP]], как это предлагалось выше.<br />
<br />
* За дальнейшей информацией обратитесь к статье [[Time]].<br />
<br />
=== Подгружаемые модули ядра ===<br />
<br />
Сегодня все необходимые модули для загрузки подгружаются автоматически с помощью [[Udev]], так что, если вам не надо (или же вы не должны) использовать какой-нибудь модуль не из дерева ядра , нет необходимости дополнительно помещать какие-либо модули в какой-то файл конфигурации загрузки. Тем не менее, бывают случаи, когда вы можете подгрузить дополнительный модуль в процессе загрузки или поместить какой-то модуль в черный список, чтобы ваш компьютер работал правильно.<br />
<br />
==== Дополнительно подгружаемые при загрузке модули ====<br />
<br />
Необходимые для загрузки дополнительные модули оформляются в статический список файлов в директории {{ic|/etc/modules-load.d/}}. Каждый из конфигурационных файлов имеет наименование вида {{ic|/etc/modules-load.d/<program>.conf}} (где <program> - имя подгружаемого модуля) и содержит список имен подгружаемых модулей ядра, каждое из которых начинается с новой строки. При этом игнорируются как пустые строки конфигурационных файлов, так и строки, у которых первым символом, отличным о пробела, является символ {{ic|#}} и {{ic|;}}. Например:<br />
<br />
{{hc|/etc/modules-load.d/virtio-net.conf|<br />
# Load virtio-net.ko at boot<br />
virtio-net}}<br />
<br />
Более подробная информация содержится в руководстве {{ic|man 5 modules-load.d}}.<br />
<br />
==== Черный список ====<br />
<br />
Добавление модулей в черный список работает также, как и в случае с {{Pkg|initscripts}}, поскольку в действительности эта функция выполняется таким инструментом, как {{Pkg|kmod}}. Обратитесь к разделу [[Kernel_modules#Blacklisting|Module Blacklisting]] за более подробной информацией.<br />
<br />
=== Монтирование файловых систем ===<br />
<br />
Установка по умолчанию автоматически проверяет файловые системы командой fsck и монтирует файловые системы перед запуском тех сервисов, котрым необходимо иметь эти системы примонтированными. Например, systemd позволяет в автоматическом режиме добиться, что удаленные файловые системы наподобие [[NFS]] и [[Samba]] подключаются после поднятия сети. Поэтому монтирование как локальных, так и удаленных файловых систем, прописанных в {{ic|/etc/fstab}} должно работать "из коробки".<br />
<br />
Обратитесь к руководству {{ic|man 5 systemd.mount}} для получения более подробной информации.<br />
<br />
==== Автомонтирование ====<br />
<br />
* Если ваш раздел {{ic|/home}} занимает большой объем, лучшим вариантом было бы позволить сервисам не зависеть от подключения {{ic|/home}} и запускать данные сервисы, когда {{ic|/home}} еще подвергается проверке при загрузке системы. Добиться такого результата можно добавлением следующих параметров в запись файла {{ic|/etc/fstab}}, касающуюся раздела {{ic|/home}}:<br />
<br />
noauto,x-systemd.automount<br />
<br />
Такие параметры вызовут команду fsck и примонтируют {{ic|/home}} при первом обращении к данному разделу, и ядро будет буферизовать все файлы доступа к {{ic|/home}} до готовности данного раздела.<br />
<br />
* То же самое применимо и к удаленным файловым системам. Если вы хотите, чтобы монтирование данных систем происходило только по мере доступа к ним, вы можете использовать параметр {{ic|1=x-systemd.device-timeout=#}} в файле {{ic|/etc/fstab}} для определения таймаута в том случае, кода сетевые ресурсы оказываются недоступны.<br />
<br />
* В случае использования зашифрованных файловых систем с ключами доступа, вам также Iследует добавить параметр {{ic|noauto}} в соответствующие записи файла {{ic|/etc/crypttab}}. systemd не будет подключать зашифрованные устройства при загрузке, но, вместо этого, дождется реального обращения к ним и автоматически откроет к ним доступ с использованием определенных ключей перед тем, как они будут примонтированы. Это сэкономит несколько секунд при загрузке системы, например, в случае использования зашифрованного устройства RAID, потому что systemd не будет дожидаться от устройства, когда оно станет доступным. Например:<br />
<br />
{{hc|/etc/crypttab|<br />
data /dev/md0 /root/key noauto}}<br />
<br />
=== LVM ===<br />
<br />
Если у вас имеются тома LVM, не активированные посредством [[Mkinitcpio|initramfs]], включите сервис {{ic|lvm.service}} (предоставляемый пакетом {{pkg|lvm2}}):<br />
<br />
# systemctl enable lvm<br />
<br />
Точно так же, если у вас LVM на устройствах с шифрованием, монтируемым позже в процессе загрузки (например, из {{ic|/etc/crypttab}}), вам необходимо включить сервис {{ic|lvm-on-crypt.service}} (также предоставляемый пакетом {{pkg|lvm2}}):<br />
<br />
# systemctl enable lvm-on-crypt<br />
<br />
=== Управлением питанием ACPI ===<br />
<br />
Systemd обрабатывает некоторые события, связанные с [http://кru.wikipedia.org/wiki/ACPI ACPI], что настраивается при помощи параметров в конфигурационном файле {{ic|/etc/systemd/logind.conf}}:<br />
<br />
* {{ic|HandlePowerKey}}: определяет действия системы при нажатии кнопки питания (вкл./выкл.).<br />
* {{ic|HandleSuspendKey}}: определяет действия системы при нажатии кнопки спящего режима.<br />
* {{ic|HandleHibernateKey}}: определяет действия системы при нажатии кнопки ждущего режимаs.<br />
* {{ic|HandleLidSwitch}}: определяет действия системы при закрытии крышки компьютера.<br />
<br />
Для соответствующих действий могут использоваться значения {{ic|ignore}} (пропустить), {{ic|poweroff}} (отключить питание), {{ic|reboot}} (перезагрузить), {{ic|halt}} (выключить), {{ic|suspend}} (включить спящий режим), {{ic|hibernate}} (включить ждущий режим) или {{ic|kexec}} (системный вызов позволяющий оперативно переключиться в другое ядро).<br />
<br />
Если данные параметры не определены, по умолчанию systemd будет использовать следующие: {{ic|1=HandlePowerKey=poweroff}}, {{ic|1=HandleSuspendKey=suspend}}, {{ic|1=HandleHibernateKey=hibernate}}, и {{ic|1=HandleLidSwitch=suspend}}.<br />
<br />
В системах без графического интерфейса или использующих простые оконные менеджеры наподобие like [[i3]] или [[awesome]], так можно заменить демон [[acpid]], который обычно используется для реагирования на данные события ACPI.<br />
<br />
В текущей версии systemd параметры {{ic|Handle}} будут применены ко всей системе, если только они не "подавляются (временно отключены) другой программой, такой, как менеджер питания данного окружения рабочего стола. Если эти ограничений нет, вы можете столкнуться с ситуацией, когда systemd приводит вашу систему в спящий режим, а затем, когда система пробуждается менеджером управлением питания, снова "усыпляет" ее.<br />
<br />
{{Warning|В настоящее время менеджеры управления питанием в новейших версиях сред [[KDE]] и [[GNOME]] являются единственными, которые использюет такие команды "подавления". До тех пор, пока их не будут применять другие менеджеры, вам надо выставить в параметрах {{ic|Handle}} значение {{ic|ignore}}, если вы хотите, чтобы события ACPI обрабатывались в случае использования [[Xfce]], [[acpid]] или других программ. Но на подходе новые версии, которые включат данную функциональность.}}<br />
<br />
{{Note|Systemd также может использовать для перевода системы в спящий/ждущий режим другие движки (такие, как [[Uswsusp]] или [[TuxOnIce]]), в дополнение к движку ''ядра''.}}<br />
<br />
==== Хуки спящего режима ====<br />
<br />
Systemd в своих командах {{ic|systemctl suspend}} или {{ic|systemctl hibernate}} не использует [[pm-utils]] для "усыпления" машины; хуки [[pm-utils]], включая любые [[Pm-utils#Creating_your_own_hooks|пользовательские хуки]] не будут работать. Тем не менее, systemd предоставляет схожий механизм запуска пользовательских скриптов для данных событий. Systemd запускает все исполняемые файлы в директории {{ic|/usr/lib/systemd/system-sleep/}}, передавая каждому из них два аргумента:<br />
<br />
* Аргумент 1: или {{ic|pre}}, или {{ic|post}}, в зависимости от которых машина либо "уснет", либо будет "пробуждена";<br />
* Аргумент 2: или {{ic|suspend}}, или {{ic|hibernate}}, в зависимости от того, что было вызвано.<br />
<br />
В отличие от [[pm-utils]], systemd запустит данные скрипты одновременно, а не один после другого.<br />
<br />
Вывод любого пользовательского скрипта будет записан сервисом {{ic|systemd-suspend.service}} или {{ic|systemd-hibernate.service}}. Вы вы можете увидеть данный выход в [[#Журнал systemd|журнале]] systemd:<br />
<br />
# journalctl -b -u systemd-suspend<br />
<br />
Обратите внимание, что вместо использования скриптов вы также можете использовать специальные целевые юниты - {{ic|sleep.target}}, {{ic|suspend.target}} или {{ic|hibernate.target}} для того, чтобы подключить к другим юнитам возможности перехода в спящий режима.<br />
<br />
Пример пример пользовательского скрипта по переходу в спящий режим:<br />
<br />
{{hc|/usr/lib/systemd/system-sleep/example.sh|<br />
#!/bin/sh<br />
case $1/$2 in<br />
pre/*)<br />
echo "Going to $2..."<br />
;;<br />
post/*)<br />
echo "Waking up from $2..."<br />
;;<br />
esac}}<br />
<br />
Обратитесь к руководствам {{ic|man 7 systemd.special}} и {{ic|man 8 systemd-sleep}} для получения дальнейшей информации.<br />
<br />
=== Временные файлы ===<br />
<br />
Systemd-tmpfiles использует конфигурационные файлы в директориях {{ic|/usr/lib/tmpfiles.d/}} и {{ic|/etc/tmpfiles.d/}} для определения действий с временными файлами и директориями (создание, очистка и удаление их), обычно расположенные в {{ic|/run}} or {{ic|/tmp}}. Каждый файл с настройками имеет название вида {{ic|/etc/tmpfiles.d/<program>.conf}}. Данные конфигурационные файлы имеют приоритет по сравнению с любыми файлами с таким же названием, расположенными в директории {{ic|/usr/lib/tmpfiles.d/}}.<br />
<br />
Временные файлы tmpfiles обычно поставляются вместе с сервис-файлами для создания директорийк. которые, как ожидается, будут использоваться определенными демонами. Например, демон [[Samba]] предполагает наличие директории {{ic|/var/run/samba}} с соответствующими правами доступа. В данном случае tmpfile выглядит следующим образом:<br />
<br />
{{hc|/usr/lib/tmpfiles.d/samba.conf|<br />
D /var/run/samba 0755 root root}}<br />
<br />
Тем не менее, tmpfiles также могут использоваться для записи значений в определенные файлы во врем загрузки. К примеру, если вы используете {{ic|/etc/rc.local}} для того, чтобы отключить пробуждение системы USB-устройствами, при помощи команды {{ic|echo USBE > /proc/acpi/wakeup}}, вы можете вместо этого использовать следующий tmpfile:<br />
<br />
{{hc|/etc/tmpfiles.d/disable-usb-wake.conf|<br />
w /proc/acpi/wakeup - - - - USBE}}<br />
<br />
Метод с использованием tmpfiles в данном случае рекомендуется, поскольку systemd в действительности не поддерживает {{ic|/etc/rc.local}}.<br />
<br />
Обратитесь к руководству {{ic|man 5 tmpfiles.d}} за более подробной информацией.<br />
<br />
=== Юнит ===<br />
<br />
Юнит (англ. unit) - конфигурационный файл, содержащий информацию о сервисе (службе), сокете, устройстве, точке монирования/автомонирования, файле подкачке или разделе, определяемом для загрузки уровне запуска, пути в файловой системе или таймере, которые контролируются и управляются при помощи systemd. Синтаксис юнитов навеян спецификацией .desktop-файлов (XDG Desktop Entry Specification), которая, в свою очередь, вдохновлялась .ini-файлами от Microsoft Windows. <br />
<br />
Обратитесь к руководству {{ic|man 5 systemd.unit}} для получения дальнейшей информации.<br />
<br />
== Переход от initscripts к использованию systemd ==<br />
<br />
=== Эмуляция initscripts ===<br />
<br />
Интеграция с классической конфигурацией Arch'а обеспечивается пакетом {{Pkg|initscripts}}. В том случае, если {{Pkg|initscripts}} установлен параллельно с systemd и система загружена с использованием systemd, systemd будет выполнять следующую последовательность действий:<br />
<br />
# # Проводить синтаксический разбор массива {{ic|DAEMONS}} в файле {{ic|/etc/rc.conf}} и запускать при загрузке все находящиеся там демоны (см. ниже)<br />
# Выполнять при загрузке {{ic|/etc/rc.local}}<br />
# Выполнять при завершении работы системы {{ic|/etc/rc.local.shutdown}}<br />
<br />
Эмуляция initscripts рассматривается как просто переходная мера для легкой миграции пользователей на systemd и '''в конечном итоге будет отброшена'''. Система с "родной" systemd не зависит от централизованной конфигурации в {{ic|rc.conf}}, поэтому рекомендуется использовать [[#Родные системные файлы|родные конфигурационные файлы systemd]], которые имеют приоритет над настройками из {{ic|/etc/rc.conf}}.<br />
<br />
{{Note|Рекомендуемый путь по замене {{ic|/etc/rc.local}} состоит в написании пользовательского сервис-файла для всего того, что вы хотите запускать при загрузке системы. Обратитесь к соответствующему [[#Написание_пользовательского_.service_файла|разделу]] данной статьи.}}<br />
<br />
{{Note|Если вы отключали использование сочетания клавиш для перезагрузки системы {{keypress|Ctrl+Alt+Del}} в файле {{ic|/etc/inittab}}, теперь вам надо заново сделать это для systemd командой {{ic|systemctl mask ctrl-alt-del.target}}, выполняемой от суперпользователя root.}}<br />
<br />
==== Отказ от массива DAEMONS ====<br />
<br />
Для "чистой" установки systemd, вы можете полностью удалить файл {{ic|/etc/rc.conf}} и включать сервисы только посредством systemd. Для каждого сервиса с именем {{ic|<service_name>}} в массиве {{ic|DAEMONS}} из файла {{ic|/etc/rc.conf}} выполните команду:<br />
<br />
# systemctl enable <service_name><br />
<br />
{{Tip|Для получения списка обычно используемых демонов с их эквивалентами в initscripts и systemd, обратитесь к [[Daemons List|данной таблице]].}}<br />
<br />
Если сервис-файл {{ic|<service_name>.service}} отсутствует:<br />
<br />
* сервис-файл может быть недоступен для systemd. В этом случае вам нужно сохранить конфигурационный файл {{ic|rc.conf}} для запуска этих сервисов во время загрузки системы.<br />
* Systemd может использовать для сервисов другие имена, например, {{ic|cronie.service}} заменяет демон {{ic|crond}}; {{ic|alsa-store.service}} и {{ic|alsa-restore.service}} заменяют демон {{ic|alsa}}. Другой важный пример - демон {{ic|network}}, которого сменил целый набор сервис-файлов (обратитесь к статье [[Configuring Network]] для получения дальнейшей информации.)<br />
<br />
{{Tip|Вы можете заглянуть вовнутрь пакета, содержащего стартовые скрипты демона, чтобы узнать имена его сервис-файла. К примеру:<br />
$ pacman -Ql cronie<br />
[...]<br />
cronie /etc/rc.d/crond #Демон initscript, указываемый в массиве {{ic|DAEMONS}} (не используется при "чистой" настройке systemd)<br />
[...]<br />
cronie /usr/lib/systemd/system/cronie.service #Соответствующий сервис systemd<br />
[...]<br />
}}<br />
<br />
* Наконец, пользователю не нужно включать некоторые сервисы явным образом. Например, {{ic|dbus.service}} будет включен автоматическики при установке {{ic|dbus-core}}. {{ic|alsa-store.service}} и {{ic|alsa-restore.service}} также включены systemd автоматически. Проверьте список доступных сервисов и их состояние при помощи команды {{ic|systemctl}}, например: {{ic|systemctl status <service_name>}} (где <service_name> - имя сервиса).<br />
<br />
=== Сравнительная таблица устаревшей и "родной" конфигураций ===<br />
<br />
{{Warning|Данный раздел оставлен в русской версии временно, до полной миграции пользователей на использование "чистого" systemd.}}<br />
<br />
{| class="wikitable"<br />
|-<br />
! scope="col"| Настройка<br />
! scope="col"| Конфигурационный файл (файлы)<br />
! scope="col"| Устаревшая секция [https://projects.archlinux.org/initscripts.git/tree/rc.conf?id=97f0cd6751e8d22c14d7492cdc2186cf41157ba6 rc.conf]<br />
|-<br />
| align="center"|Имя компьютера (Hostname)<br />
| align="left"|{{ic|/etc/hostname}}<br />
{{ic|/etc/hosts}}<br />
| align="center"|{{ic|NETWORKING}}<br />
|-<br />
| align="center"|Консоль и раскладка клавиатуры<br />
| align="left"|{{ic|/etc/vconsole.conf}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Локаль<br />
| align="left"|{{ic|/etc/locale.conf}}<br />
{{ic|/etc/locale.gen}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Временная зона<br />
| align="left"|{{ic|/etc/localtime}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Аппаратные часы<br />
| align="left"|{{ic|/etc/adjtime}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Модули ядра<br />
| align="left"|{{ic|/etc/modules-load.d/}}<br />
| align="center"|{{ic|HARDWARE}}<br />
|}<br />
<br />
=== Эмуляция /etc/rc.local ===<br />
<br />
{{Warning|Данный раздел оставлен в русской версии временно, до полной миграции пользователей на использование "чистого" systemd.}}<br />
<br />
Если вы хотите при использовании systemd сохранить простоту {{ic|/etc/rc.local}} , вам нужно создать следующий сервис-файл и включить его. Просто добавьте строки {{ic|1=ExecStart=}} для тех команд, которые вы хотите запустить. Если же вам в данном случае требуется более сложная функциональность (например, циклы с {{ic|for}}), то вы можете создать скрипт Bash и выполнять его из сервис-файла. Удалите {{ic|1=ExecStart=/bin/true}}, если вы здесь действительно добавляете команду.<br />
<br />
{{hc|/etc/systemd/system/rc-local.service|<nowiki><br />
[Unit]<br />
Description=/etc/rc.local compatibility<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/bin/true<br />
RemainAfterExit=yes<br />
<br />
[Install]<br />
WantedBy=multi-user.target<br />
</nowiki>}}<br />
<br />
== Основы использования systemctl ==<br />
<br />
Главная команда для наблюдения и контроля за состоянием systemd - команда {{ic|systemctl}}. Некоторые из вариантов ее использования связаны с изучением состояния системы и управлением сервисами. Обратитесь к странцам руководства {{ic|man 1 systemctl}} для получения более детальной информации.<br />
<br />
{{Tip|Вы можете использовать приведенные ниже команды {{ic|systemctl}} с ключом {{ic|-H <user>@<host>}} для того, чтобы контролировать systemd на удаленной машине. В этом случае для соединения с удаленным процессом systemd будет использовать [[SSH]].}}<br />
<br />
{{Note|{{ic|systemadm}} - официальная графическая оболочка для {{ic|systemctl}}. Она доступна в виде пакета {{AUR|systemd-ui-git}} из [[AUR]].}}<br />
<br />
=== Анализ состояния системы ===<br />
<br />
Список запущенных юнитов:<br />
<br />
$ systemctl<br />
<br />
или:<br />
<br />
$ systemctl list-units<br />
<br />
Список юнитов, попытка запуска которых завершилась неудачей:<br />
<br />
$ systemctl --failed<br />
<br />
Доступные юниты можно посмотреть в директориях {{ic|/usr/lib/systemd/system/}} и {{ic|/etc/systemd/system/}} (последняя директория имеет приоритет). Вы можете увидеть список установленных юнитов командой:<br />
<br />
$ systemctl list-unit-files<br />
<br />
=== Использование юнитов ===<br />
<br />
Юниты могут быть сервисами ({{ic|.service}}), точками монтирования ({{ic|.mount}}) или сокетами ({{ic|.sockets}}). При использовании команды {{ic|systemctl}} необходимо всегда указывать полное имя файла, включая расширение. Однако, есть несколько сокращений при определении юнита следующими командами{{ic|systemctl}}:<br />
<br />
* Ели вы не указали суффикс, systemctl предполагает, что это {{ic|.service}}. Например, {{ic|netcfg}} и {{ic|netcfg.service}} будут трактоваться одинаково.<br />
* Точки монтирования будут автоматически преобразованы в соответствующий юнит {{ic|.mount}}. Например, указание {{ic|/home}} равнозначно {{ic|home.mount}}.<br />
* Аналогично точкам монтирования, имена устройств автоматически преобразуются в соответствующий юнит {{ic|.device}}, поэтому указание {{ic|/dev/sda2}} полностью соответствует юниту {{ic|dev-sda2.device}}.<br />
<br />
Обратитесь к руководству {{ic|man systemd.unit}} для получения детальной информации.<br />
<br />
{{Note|При использовании юнитов следует обращать внимание на регистр букв в наименовании сервис-файлов: так, необходимо использовать ''NetworkManager.'''service''' '' (запомните употребление в данном названии букв в верхнем регистре) для включения сервиса NetworkManager'а, в противном случае вы получите сообщение об ошибке и сервис во время загрузки системы не запустится.}}<br />
<br />
Незамедлительно запустить юнит:<br />
<br />
# systemctl start <unit><br />
<br />
Незамедлительно остановить юнит:<br />
<br />
# systemctl stop <unit><br />
<br />
Перезапустить юнит:<br />
<br />
# systemctl restart <unit><br />
<br />
Запросить у юнита перезагрузку его настроек:<br />
<br />
# systemctl reload <unit><br />
<br />
Показать статус юнита, а также запущен он или нет:<br />
<br />
$ systemctl status <unit><br />
<br />
Проверить включение юнита (т.е. разрешен ли юниту запуск при загрузке системы):<br />
<br />
$ systemctl is-enabled <unit><br />
<br />
Включить юнит (разрешить юниту запуск при загрузке системы):<br />
<br />
# systemctl enable <unit><br />
<br />
{{Note| Если сервис-файлы не имеют раздела {{ic|Install}}, это обычно означает, что данные сервисы вызываются автоматически другими сервисами. Но если вам требуется установить их вручную, используйте следующую команду, заменив {{ic|foo}} именем вашего сервиса.<br />
# ln -s /usr/lib/systemd/system/''foo''.service /etc/systemd/system/graphical.target.wants/<br />
}}<br />
<br />
Выключить юнит (запретить юниту запуск при загрузке системы):<br />
<br />
# systemctl disable <unit>}}<br />
<br />
Показать страницу помощи для юнита (необходима поддержка этой функции в указанном файле юнита):<br />
<br />
$ systemctl help <unit><br />
<br />
=== Управление питанием ===<br />
<br />
Если у вас локальная пользовательская сессия {{ic|systemd-logind}} и нет других активных сессий, приведенные ниже команды сработают и без привилегий суперпользователя root. В противном случае (например, вследствие того, что пользователь залогинился в tty), systemd автоматически запросит у вас пароль root.<br />
<br />
Завершить работу и перезагрузить систему:<br />
<br />
$ systemctl reboot<br />
<br />
Завершить работу и выключить компьютер (с отключением питания):<br />
<br />
$ systemctl poweroff<br />
<br />
Завершить работу и остановить систему:<br />
<br />
$ systemctl halt<br />
<br />
Перевести систему в спящий режим:<br />
<br />
$ systemctl suspend<br />
<br />
Перевести систему в ждущий режим:<br />
<br />
$ systemctl hibernate<br />
<br />
== Запуск окружения рабочего стола из systemd ==<br />
<br />
Чтобы включить графический вход в систему, запустите выбранный вами демон [[Display Manager (Русский)|экранного менеджера]] (например, [[KDM]]). В настоящий момент доступны сервис-файлы для [[GDM]], [[KDM]], [[SLiM]], [[XDM]], [[LXDM]] и [[LightDM]].<br />
<br />
# systemctl enable kdm<br />
<br />
Эта команда должна работать "из коробки". Если вдруг она не сработала, то, возможно, у вас {{ic|default.target}} установлен вручную или остался с прежней установки:<br />
<br />
{{hc|# ls -l /etc/systemd/system/default.target|<br />
/etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target}}<br />
<br />
Просто удалите символическую ссылку и systemd будет использовать целевой юнит по умолчанию - {{ic|default.target}} (т.е. {{ic|graphical.target}}).<br />
<br />
# rm /etc/systemd/system/default.target<br />
<br />
=== Использование systemd-logind ===<br />
<br />
{{Note|С 30.10.2012 [[ConsoleKit]] был [http://archlinux.org.ru/node/352/ заменен на systemd-logind] как механизм входа в окружение рабочего стола по умолчанию.}}<br />
<br />
Для того, чтобы проверить статус вашей пользовательской сессии, вы можете использовать команду {{ic|loginctl}}. Все действия [[PolicyKit]] наподобие перевода системы в спящий режим или монтирования внешних носителей с помощью [[Udisks]] должны работать автоматически.<br />
<br />
$ loginctl show-session $XDG_SESSION_ID<br />
<br />
== Написание пользовательского .service файла ==<br />
<br />
=== Обработка зависимостей ===<br />
<br />
В случае использования systemd зависимости могут быть разрешены правильным построением файлов юнитов. ,Наиболее частый случай -- когда юниту {{ic|A}} требуется, чтобы юнит {{ic|B}} был запущен перед тем, как запустится сам юнит {{ic|A}}. В этом случае добавьте строки {{ic|1=Requires=B}} и {{ic|1=After=B}} в секцию {{ic|[Unit]}} сервис-файла юнита {{ic|A}}. Если подобная зависимость не является обязательной, добавьте соответственно взамен указанных выше строки {{ic|1=Wants=B}} и {{ic|1=After=B}}. Обратите внимание, что {{ic|1=Wants=}} и {{ic|1=Requires=}} не подразумевают {{ic|1=After=}}, что означает, что если {{ic|1=After=}} не определено, два юнита будут запущены параллельно друг другу.<br />
<br />
Обычно зависимости указываются в сервис-файлах, а не в целевых юнитах. Например, {{ic|network.target}} потребуется любому сервису, который связан с настройкой ваших сетевых интерфейсов, поэтому в любом случае определите загрузку вашего пользовательского юнита после запуска {{ic|network.target}}.<br />
<br />
=== Тип ===<br />
<br />
Существует несколько различных типов запуска служб, которые надо иметь в виду при написании пользовательского сервис-файла. Тип запуска определяется параметром {{ic|1=Type=}} в секции {{ic|[Service]}}. Обратитесь к руководству {{ic|man systemd.service}} для получения более детального объяснения.<br />
<br />
* {{ic|1=Type=simple}}: systemd предполагает, что сервис будет запущен незамедлительно. Процесс при этом не должен форкнуться. Не используйте этот тип, если другим сервисы зависят от очередности при запуске данного сервиса, за исключением активации сокета.<br />
* {{ic|1=Type=forking}}: systemd предполагает, что сервис запускается однократно, процесс форкается и родительский процесс завершается. Используйте данный тип для запуска классических демонов за исключением тех случаев, когда, как вам известно, в таком поведении процесса нет необходимости. Вам следует также определить {{ic|1=PIDFile=}}, чтобы systemd могла отслеживать основной процесс.<br />
* {{ic|1=Type=oneshot}}: Полезен для скриптов, которые выполняют одну работу, а потом завершаются. Вам может понадобиться также установить параметр {{ic|1=RemainAfterExit=}}, чтобы systemd по-прежнему считала процесс активным, даже после его завершения<br />
* {{ic|1=Type=notify}}: Идентичен параметру {{ic|1=Type=simple}}, но с той оговоркой, что демон пошлет systemd сигнал о своей готовности. Эталонная реализация данного уведомления обеспечивается библиотекой {{ic|libsystemd-daemon.so}}.<br />
* {{ic|1=Type=dbus}}: Сервис считается находящимся в состоянии готовности, когда определенное {{ic|BusName}} появляется в системной шине DBus.<br />
<br />
=== Замена предоставленных пакетами файлов юнитов ===<br />
<br />
Файлы юнитов в директории {{ic|/etc/systemd/system/}} имеют приоритет над такими же файлами в директории {{ic|/usr/lib/systemd/system/}}.<br />
Для создания собственной версии юнита (который не будет затерт при обновлении), скопируйте старый юнит из директории {{ic|/usr/lib/}} в директорию {{ic|/etc/}} и внесите в эту копию свои изменения. Альтернативным вариантом является использование {{ic|.include}} для парсинга существующего сервис-файла и затем переопределения или добавления новых опций. Например, если вы просто хотите добавить в сервис-файл дополнительную зависимость, вы можете использовать такую команду в юните:<br />
<br />
{{hc|/etc/systemd/system/<service-name>.service|2=<br />
.include /usr/lib/systemd/system/<service-name>.service<br />
<br />
[Unit]<br />
Requires=<new dependency><br />
After=<new dependency>}}<br />
<br />
Затем выполните следующие команды для того, чтобы изменения вступили в силу:<br />
<br />
# systemctl reenable <unit><br />
# systemctl restart <unit><br />
<br />
{{Tip|Вы можете использовать команду {{ic|systemd-delta}}, чтобы увидеть, какие файлы юнитов были переопределены и что в точности было изменено.}}<br />
<br />
=== Подсветка синтаксиса файлов юнитов в Vim ===<br />
<br />
подсветка синтаксиса файлов юнитов для systemd в редакторе [[Vim]] может быть осуществлена путем установки пакета {{AUR|vim-systemd}} из [[Arch User Repository|AUR]].<br />
<br />
== Уровни запуска/цели ==<br />
<br />
Уровни запуска (по-английски уровень запуска - runlevel) для systemd являются устаревшей концепцией. Systemd использует ''цели'' (англ. target), которые выполняют ту же задачу, что и уровни запуска, но действуют немного по-другому. Каждая ''цель'' поименована (т.е. имеет собственное имя, а не номер) и, как предполагается, предназначена для конкретных задач; возможно иметь в одно и то же время активными несколько таких целей. Некоторые ''цели'' реализованы так, что наследуют все сервисы других ''целей'' и добавляют к ним свои сервисы. В systemd имеются также ''цели'', которые имитируют общие уровни запуска SystemVinit, поэтому вы можете переключаться между целевыми юнитами с использованием привычной команды {{ic|telinit RUNLEVEL}}. <br />
<br />
=== Получение информации о текущем уровне запуска/цели ===<br />
<br />
При использовании systemd для этого предназначена следующая команда (заменяющая {{ic|runlevel}}):<br />
<br />
$ systemctl list-units --type=target<br />
<br />
=== Создание пользовательской цели ===<br />
<br />
Уровни загрузки, по которым расписаны конкретные задачи на установке дистрибутива Fedora по умолчанию - 0, 1, 3, 5 и 6; есть маппинг 1:1 с помощью конкретной цели systemd. К сожалению, не существует хорошего способа сделать то же самое для определяемых пользователем уровней, таких, как 2 и 4. Использование их предполагает, что вы создаете новый именованный '' целевой юнит''systemd наподобие {{ic|/etc/systemd/system/<your target>}}, который берет за основу один из существующих уровней запуска (взгляните, например, на {{ic|/usr/lib/systemd/system/graphical.target}}), создаете также директорию {{ic|/etc/systemd/system/<your target>.wants}} и затем символические ссылки на те дополнительные сервисы из директории {{ic|/usr/lib/systemd/system/}}, которые вы хотите включить при загрузке.<br />
<br />
== Таблица уровней запуска и их аналогов в Systemd ==<br />
<br />
{| class="wikitable" border="1" cellpadding="5" cellspacing="0"<br />
! Уровнень запуска SysV !! systemd Target !! Примечание<br />
|-<br />
| 0 || runlevel0.target, poweroff.target || Выключить систему.<br />
|-<br />
| 1, s, single || runlevel1.target, rescue.target || Однопользовательский уровень запуска.<br />
|-<br />
| 2, 4 || runlevel2.target, runlevel4.target, multi-user.target || Уровень запуска, определенный пользователем/специфичный для узла. По умолчанию соответствует уровню запуска 3.<br />
|-<br />
| 3 || runlevel3.target, multi-user.target || Многопользовательский режим без графики. Пользователи, как правило, входят с помощью множества консолей или через сеть.<br />
|-<br />
| 5 || runlevel5.target, graphical.target || Многопользовательский режим с графикой. Обычно эквивалентен запуску всех сервисов уровня 3 и графическому менеджеру входа.<br />
|-<br />
| 6 || runlevel6.target, reboot.target || Перезагрузка.<br />
|-<br />
| emergency || emergency.target || Аварийная оболочка.<br />
|-<br />
|}<br />
<br />
=== Изменение текущей цели ===<br />
<br />
В systemd цели доступны посредством " целевых юнитов". Вы можете изменить их командой:<br />
<br />
# systemctl isolate graphical.target<br />
<br />
Данная команда изменит только лишь текущую цель и не повлияет на следующую загрузку системы. Она соответствует командам наподобие {{ic|telinit 3}} или {{ic|telinit 5}} для Sysvinit.<br />
<br />
=== Изменение цели для загрузки ===<br />
<br />
Стандартная цель - {{ic|default.target}}, которая по умолчанию является псевдонимом юнита {{ic|graphical.target}} (примерно соответствующего прежнему уровню выполнения 5). Для изменения цели при загрузке по умолчанию, добавьте следующий дополнительный [[kernel parameters|параметр ядра]] в вашем загрузчике:<br />
<br />
{{Tip|Расширение {{ic|.target}} можно опустить.}}<br />
<br />
* {{ic|1=systemd.unit=multi-user.target}} (что примерно соответствует прежнему уровню выполнения 3),<br />
* {{ic|1=systemd.unit=rescue.target}} (что примерно соответствует прежнему уровню выполнения 1).<br />
<br />
Другой путь заключается в том, чтобы оставить загрузчик без изменений и изменить целевой юнит по умолчанию - {{ic|default.target}}, что достигается командой {{ic|systemctl}}:<br />
<br />
# systemctl enable multi-user.target<br />
<br />
Эффект от применения данной команды выводится через {{ic|systemctl}}; символическая ссылка на новый целевой юнит по умолчанию создается в директории {{ic|/etc/systemd/system/default.target}}. Это сработает в том случае (и только в том случае), если имеется следующая секция:<br />
<br />
[Install]<br />
Alias=default.target<br />
<br />
в конфигурационном файле целевого юнита. В настоящий момент как {{ic|multi-user.target}}, так и {{ic|graphical.target}} оба имеют данную секцию.<br />
<br />
== Журнал ==<br />
С версии 38 systemd имеет собственную систему ведения логов - журнал (journal). По умолчанию, более не требуется запуск демона syslog. Для чтения логов используйте команду:<br />
<br />
# journalctl<br />
<br />
По умолчанию (когда в конфигурационном файле {{ic|/etc/systemd/journald.conf}} параметр {{ic|Storage&#61;}} имеет значение {{ic|auto}}) журнал записывается в директорию {{ic|/run/systemd/journal}}. Если директория {{ic|/var/log/journal/}} не существует (например, вы или какая-либо программа удалили ее), systemd '''не''' создаст ее автоматически, но вместо этого запишет свои логи в директорию {{ic|/run/systemd/journal}}. Это означает, что логи будут потеряны при перезагрузке.<br />
<br />
=== Фильтрация вывода ===<br />
<br />
{{ic|journalctl}} позволяет фильтровать вывод по особым полям.<br />
<br />
Примеры:<br />
<br />
Показать все сообщения с момента текущей загрузки системы:<br />
<br />
# journalctl -b<br />
<br />
Последние сообщения:<br />
<br />
# journalctl -f<br />
<br />
Показать все сообщения определенной программы:<br />
<br />
# journalctl /usr/lib/systemd/systemd<br />
<br />
Показать все сообщения определенного процесса:<br />
<br />
# journalctl _PID=1<br />
<br />
Показать все сообщения определенного юнита:<br />
<br />
# journalctl -u netcfg<br />
<br />
Обратитесь к {{ic|man journalctl}} и {{ic|systemd.journal-fields}} или [http://0pointer.de/blog/projects/journalctl.html блог Леннерта (англ.)] для получения детальной информации.<br />
<br />
=== Ограничение размера журнала ===<br />
<br />
Если журнал сохраняется при перезагрузке, размер его по умолчанию ограничен значением в 10% от объема соответствующей файловой системы. Например, для директории {{ic|/var/log/journal}}, расположенной на корневом разделе в 50 Гбайт, максимальный размер журналируемых данных составит до 5 Гбайт. Максимальный объем постоянного журнала можно контролировать при помощи значения {{ic|SystemMaxUse}} в конфигурационном файле {{ic|/etc/systemd/journald.conf}}, поэтому для ограничения его объемом в 50 Mбайт раскомментируйте и отредактируйте соответствующую строку:<br />
<br />
SystemMaxUse=50M<br />
<br />
Обратитесь к {{ic|man journald.conf}} для получения дальнейшей информации.<br />
<br />
=== Journald в связке с классическим демоном syslog ===<br />
<br />
Совместимость с классической реализацией syslog обеспечивается сокетом {{ic|/run/systemd/journal/syslog}}, в который перенаправляются все сообщения. Чтобы дать возможность демону syslog работать вместе с журналом systemd, следует привязать данный демон к указанному сокету вместо {{ic|/dev/log}} ([http://lwn.net/Articles/474968/ официальное сообщение]). Пакетом {{pkg|syslog-ng}} в репозиториях автоматически предоставляется необходимая конфигурация.<br />
<br />
# systemctl enable syslog-ng<br />
<br />
== Сеть ==<br />
<br />
{{Warning|Данный раздел в английской версии включен в состав статьи [[Configuring Network]]; в русской версии временно оставлен из-за того, что русский вариант [[Configuring Network (Русский)]] устарел в сравнении с английским.}}<br />
<br />
=== Динамическое подключение (DHCP) с использованием dhcpcd ===<br />
<br />
Если хотите использовать только DHCP для своего соединения Ethernet, вы можете воспользоваться сервисом {{ic|dhcpcd@.service}} (который поставляется пакетом {{Pkg|dhcpcd}}).<br />
<br />
Чтобы подключить DHCP для {{ic|eth0}}, просто выполните команду:<br />
<br />
# systemctl start dhcpcd@eth0.service<br />
<br />
Вы можете включить этот сервис, и он будет автоматически запускаться при загрузке. Это делается командой:<br />
<br />
# systemctl enable dhcpcd@eth0.service<br />
<br />
Иногда сервис dhcpd запускается до загрузки модуля вашей сетевой карты ({{bug|30235}}), в этом случае вручную добавьте вашу сетевую карту в конфигурационный файл {{ic|/etc/modules-load.d/*.conf}}. Например, для карты Realtek необходима загрузка модуля {{ic|r8169}}, поэтому создайте такой конфигурационный файл:<br />
<br />
{{hc|/etc/modules-load.d/realtek.conf|2=<br />
r8169}}<br />
<br />
=== Другие конфигурации ===<br />
<br />
Для статического подключения, беспроводной сети или сложной конфигурации сети наподобие сетевого моста, вы можете использовать [[Netcfg#systemd_support|netcfg]] или [[NetworkManager#Enable_NetworkManager_under_Native_systemd_system|NetworkManager]], для обоих этих инструментов управления сетью имеются сервис-файлы для systemd.<br />
<br />
{{Note|Если вы хотите использовать netcfg, NetworkManager или другие программы управления сетью, вам не надо в этом случае запускать или включать сервис dhcpcd как показано в предыдущем параграфе.}}<br />
<br />
== Оптимизация ==<br />
<br />
=== Анализ процесса загрузки ===<br />
<br />
==== Использование systemd-analyze ====<br />
<br />
Systemd предоставляет инструмент под названием {{ic|systemd-analyze}}, позволяющий проанализировать процесс загрузки вашей системы, чтобы можно было увидеть, какие файлы юнитов тормозят загрузку. Соответственно, вы можете оптимизировать вашу систему. Для использования данного инструмента вам потребуется установить пакеты {{Pkg|python2-dbus}} и {{Pkg|python2-cairo}}.<br />
<br />
Чтобы увидеть, сколько времени было потрачено на подготовку пространства ядра и пространства пользователя во время загрузки, просто выполните команду:<br />
<br />
$ systemd-analyze<br />
<br />
{{Tip|Чтобы увидеть, сколько времени ушло на загрузку образа initramfs, дополните хуком {{ic|timestamp}} ваш массив {{ic|HOOKS}} из конфигурационного файла {{ic|/etc/[[mkinitcpio]].conf}} и от суперпользователя root пересоберите ваш образ initramfs командой {{ic|mkinitcpio -p linux}} }}<br />
<br />
Чтобы увидеть список запускаемых файлов юнитов, отсортированный по потраченному каждым из них на загрузку времени, выполните команду:<br />
<br />
$ systemd-analyze blame<br />
<br />
Вы также можете создать файл SVG, показывающий процесс загрузки в графическом виде, наподобие [[Bootchart]]:<br />
<br />
$ systemd-analyze plot > plot.svg<br />
<br />
==== Использование bootchart ====<br />
<br />
Вы можете использовать версию bootchart для визуализации последовательности при загрузке системы.<br />
Из-за невозможности использовать стандартные установки bootchart (так как нельзя добавить в командную строку ядра вторую запись init), вам придется воспользоваться пакетом {{AUR|bootchart2}} из [[AUR]], поставляемым с недокументированным сервисом systemd. После установки bootchart2 выполните команду:<br />
<br />
# systemctl enable bootchart<br />
<br />
Обратитесь к [https://github.com/mmeeks/bootchart документации bootchart (англ.)] за дальнейшей и детализированной информацией об использовании данной версии bootchart.<br />
<br />
=== Readahead ===<br />
<br />
systemd поставляется со свой реализации технологии readahead, что в принципе должно усовершенствовать процесс загрузки системы. Однако, в зависимости от версии вашего ядра и типа жесткого диска, скорость обращения к данным может разниться (например, может быть медленнее). Чтобы включить данный сервис, выполните:<br />
<br />
# systemctl enable systemd-readahead-collect systemd-readahead-replay<br />
<br />
Не забудьте, что волшебство технологии readahead подействует только после нескольких перезапусков системы<br />
<br />
=== Ранний старт сервисов ===<br />
<br />
Одним из центральных элементов systemd является [[D-Bus]] и активация сокетов, что требует запуска сервисов при первой потребности в них. Обычно такой подход является удачным, но, если вы знаете, что какой-то сервис (вроде [[UPower]]) должен всегда запускаться во время загрузки системы, то вы можете сократить общее время загрузки, запуская его так рано, как это вообще возможно. Этого можно добиться (если сервис-файл устроен соответствующим образом, что верно в большинстве случаев) путем выполнения команды:<br />
<br />
# systemctl enable upower<br />
<br />
Это заставит systemd запустить UPower так рано, как это возможно, не устраивая перегонки данного сервиса с активацией сокета или D-Bus.<br />
<br />
=== Уменьшение вывода во время загрузки ===<br />
<br />
Измените параметр {{ic|verbose}} на {{ic|quiet}} в строке загрузки ядра вашего загрузчика. Для некоторых систем, в частности с SSD, узким местом является низкая производительность TTY, поэтому уменьшение вывода информации означает прирост скорости загрузки.<br />
<br />
== Устранение неполадок ==<br />
<br />
=== Выключение/перезагрузка происходят ужасно долго ===<br />
<br />
Если процесс выключения занимает очень долгое время (или, по-видимому, зависает), то, вероятно, виноват сервис, который не завершает свою работу. systemd ожидает некоторое время, пока каждый сервис завершит свою работу самостоятельно, и только потом пытается принудительно завершить (kill) его. Если вы столкнулись с такой проблемой, обратитесь к [http://freedesktop.org/wiki/Software/systemd/Debugging#Shutdown_Completes_Eventually данной статье (англ.)].<br />
<br />
== Полезные ссылки ==<br />
<br />
*[http://www.freedesktop.org/wiki/Software/systemd Официальный веб-сайт (англ.)]<br />
*[http://0pointer.de/public/systemd-man/ Страницы руководств (англ.)]<br />
*[http://freedesktop.org/wiki/Software/systemd/Optimizations systemd Optimizations (англ.)]<br />
*[http://www.freedesktop.org/wiki/Software/systemd/FrequentlyAskedQuestions FAQ (англ.)]<br />
*[http://www.freedesktop.org/wiki/Software/systemd/TipsAndTricks Tips And Tricks (англ.)]<br />
*[http://0pointer.de/public/systemd-ebook-psankar.pdf systemd для администраторов (PDF) - перевод цикла статей Леннарта Поттеринга (Lennart Poettering) (англ.)]<br />
*[http://0pointer.de/blog/projects/systemd.html Блог Lennart'а (англ.)]<br />
*[http://archlinux.org.ru/forum/viewtopic.php?f=9&t=9581 systemd mini FAQ]<br />
*[http://fedoraproject.org/wiki/Systemd Fedora Linux Wiki: Systemd (англ.)]<br />
*[http://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet Fedora's SysVinit to systemd cheatsheet (англ.)]<br />
*[http://wiki.russianfedora.ru/index.php/Systemd systemd - база знаний проекта Fedora]<br />
*[http://wiki.debian.org/ru/Systemd Debian Wiki: systemd - менеджер системы и сервисов]<br />
*[http://wiki.ubuntu.com/systemd Ubuntu Wiki: systemd (англ.)]</div>Archvillhttps://wiki.archlinux.org/index.php?title=Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=235578Systemd (Русский)2012-11-15T19:26:06Z<p>Archvill: /* Консоль и раскладка клавиатуры */</p>
<hr />
<div>{{DISPLAYTITLE:systemd (Русский)}}<br />
[[Category:Русский]]<br />
[[Category:Процесс Загрузки (Русский)]]<br />
[[en:systemd]]<br />
[[es:systemd]]<br />
[[fr:systemd]]<br />
[[it:systemd]]<br />
[[ja:Systemd]]<br />
[[zh-CN:systemd]]<br />
{{Article summary start|Сводка}}<br />
{{Article summary text|Статья охватывает установку и настройку systemd.}}<br />
{{Article summary heading|Связанные статьи}}<br />
{{Article summary wiki|systemd/User}}<br />
{{Article summary wiki|systemd/Services}}<br />
{{Article summary wiki|systemd FAQ}}<br />
{{Article summary wiki|init Rosetta (Русский)}}<br />
{{Article summary wiki|udev (Русский)}}<br />
{{Article summary end}}<br />
Цитата с [http://freedesktop.org/wiki/Software/systemd веб-страницы проекта]:<br />
<br />
''"'''systemd''' - система [инициализации] и менеджер служб для Linux, совместимые со скриптами инициализации SysV и LSB. '''systemd''' обеспечивает возможности агрессивной параллелизации, использует сокеты и активацию [[D-Bus]] для запускаемых служб, предлагает запуск демонов по необходимости, отслеживает процессы при помощи [[cgroups|контрольных групп]] Linux, поддерживает мгновенные снимки и восстановление состояния системы, монтирование и точки монтирования, а также внедряет основанную на зависимостях логику контроля процессов сложных транзакций. Эта система может выступать заменой [[SysVinit|sysvinit]]."''.<br />
<br />
{{Note|1=За детальным объяснением причин происходящего перехода Arch'а на systemd обратитесь к [https://bbs.archlinux.org/viewtopic.php?pid&#61;1149530#p1149530 сообщению на англоязычном форуме].}}<br />
<br />
Смотрите также [[Wikipedia:Systemd|статью в Википедии]].<br />
<br />
== Соображения перед началом миграции ==<br />
<br />
* Настоятельно рекомендуется перейти на новую конфигурацию '''initscripts''', описанную в статье [[rc.conf (Русский)|rc.conf]]. Сконфигурировав таким образом свою систему, вы проделаете бóльшую часть работы, необходимую для миграции на systemd.<br />
* Почитайте про systemd на [http://freedesktop.org/wiki/Software/systemd/ сайте разработчиков].<br />
* Обратите внимание, что systemd имеет собственный '''журнал (journal)''', заменяющий '''syslog''', хотя оба варианта ведения логов могут сосуществовать. Обратитесь к приведенному ниже [[#Журнал|разделу, посвященному журналу]].<br />
* Хотя systemd вполне способна заменить определенную функциональность таких демонов, как '''cron''', '''acpid''' или '''xinetd''', но если вы не хотите, можете не отказываться от использования традиционных демонов.<br />
* Интерактивные загрузочные скрипты (initscripts) не работают с systemd. В частности, '''netcfg-menu''' [https://bugs.archlinux.org/task/31377 не может] использоваться при загрузке системы.<br />
<br />
== Установка ==<br />
<br />
{{Note|Оба пакета - {{pkg|systemd}} и {{pkg|systemd-sysvcompat}} - ставаятся по умолчанию при установке с носителя новее, чем [https://www.archlinux.org/news/systemd-is-now-the-default-on-new-installations/ 2012-10-13].}}<br />
<br />
Следующий раздел предназначен для тех установок Arch Linux, которые все еще зависят от пакетов {{pkg|sysvinit}} и {{pkg|initscripts}} и не перешли на использование {{pkg|systemd}}.<br />
<br />
# Установите пакет {{pkg|systemd}} и добавьте следующую запись к командной строке загрузки ядра: {{ic|1=init=/usr/lib/systemd/systemd}}<br />
# выполнив это, вы сможете включать или отключать любой необходимый сервис путем применения команды {{ic|systemctl enable <service_name>}} (это примерно соответствует тому, что включалось в массив {{ic|DAEMONS}}).<br />
# Перезагрузите свою систему и убедитесь, что {{ic|systemd}} в настоящее время активен, выполнив слудующую команду: {{ic|$ cat /proc/1/comm}}. Данная команда должна вернуть строку {{ic|systemd}}.<br />
# Удалите {{pkg|initscripts}} и {{pkg|sysvinit}} из вашей системы и установите {{pkg|systemd-sysvcompat}}.<br />
# В последнюю очередь удалите параметр {{ic|1=init=/usr/lib/systemd/systemd}}, поскольку необходимости в нем более нет.<br />
<br />
=== Дополнительная информация ===<br />
<br />
* Если в параметрах ядра имеется значение {{ic|quiet}}, вероятно, вам стоит удалить его для нескольких первых загрузок systemd, чтобы видеть возникающие во время загрузке проблемы.<br />
<br />
* Теперь добавлять вашего пользователя в [[Users and Groups|группы]] ({{ic|optical}}, {{ic|audio}}, {{ic|scanner}}, ...) в большинстве случаев '''нет''' необходимости при использовании systemd. Это даже может нарушить работоспособность системы. Например, добавление в группу audio может привести к невозможности быстрого переключения между пользователями и позволит приложениям заблокировать программное микширование. Каждый вход PAM предоставляет сессию login, которое дает вам разрешения для локальной сессии посредством [[Wikipedia:Access control list|POSIX ACLs]] на аудио/видео устройства и позволяет выполнять некоторые операции, такие, как как монтирование съемных носителей через [[udisks]]. <br />
<br />
{{Note|Systemd-logind заменил [[ConsoleKit]], удаленный из репозиториев, поэтому для полной функциональности теперь система должна загружаться с использованием systemd. Смотрите [http://archlinux.org.ru/node/352/ новость] для получения дальнейшей информации.}<br />
<br />
Ранее ConsoleKit обеспечивал подобные разрешения для устройств на основе ACL и разрешения polkit для локальных сессий.}}<br />
<br />
== Родные системные файлы ==<br />
<br />
{{Note|Возможно, вам придется создать эти файлы. Установите для всех файлов права доступа 644 и владельца root:root.}}<br />
<br />
=== Имя компьютера (hostname) ===<br />
<br />
Имя компьютера настраивается в файле {{ic|/etc/hostname}}. Этот файл не должен содержать системный домен (если таковой имеется). Для установки имени компьютера выполните:<br />
<br />
# hostnamectl set-hostname '''myhostname'''<br />
<br />
Обратитесь к руководствам {{ic|man 5 hostname}} и {{ic|man hostnamectl}} для получения более подробной информации.<br />
<br />
Вот примерный файл:<br />
<br />
{{hc|/etc/hostname|<br />
myhostname<br />
}}<br />
<br />
=== Локаль ===<br />
<br />
Системная локаль по умолчанию настраивается в конфигурационном файле {{ic|/etc/locale.conf}}. Для установки локали по умолчанию выполните:<br />
<br />
# localectl set-locale LANG="ru_RU.UTF-8"<br />
<br />
{{Note|Перед установкой локали по умолчанию вам сперва необходимо сделать локали доступными системе, раскомментировав их в файле {{ic|/etc/locale.gen}} и затем выполнив команду {{ic|locale-gen}} от суперпользователя root. Локаль, установленная командой {{ic|localectl}}, должна быть одной из '''раскомментированных''' локалей в файле {{ic|/etc/locale.gen}}.}}<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 localectl}} и {{ic|man 5 locale.conf}}.<br />
* Дальнейшая информация содержится в статье [[Locale]].<br />
<br />
Вот примерный файл:<br />
<br />
{{hc|/etc/locale.conf|2=<br />
LANG=ru_RU.utf8}}<br />
<br />
=== Консоль и раскладка клавиатуры ===<br />
<br />
Файл {{ic|/etc/vconsole.conf}} устанавливает настройки виртуальной консоли (раскладку клавиатуры и консольный шрифт).<br />
<br />
{{hc|/etc/vconsole.conf|2=<br />
KEYMAP=ru4<br />
FONT=UniCyr_8x16<br />
}}<br />
<br />
{{Note|С версии {{Pkg|systemd}}-194 используются шрифт ядра и раскладку по умолчанию (т.е. американскую английскую). Нет более необходимости (для тех, кто использует американскую английскую раскладку) настраивать в конфигурационном файле строки {{ic|1=KEYMAP=}} и {{ic|1=FONT=}}, их можно оставить пустыми.}}<br />
<br />
Другой способ настройки раскладки клавиатуры в консоли состоит в использовании команды:<br />
<br />
# localectl set-keymap ru<br />
<br />
Преимущество такого подхода - в том, что он также установит указанную раскладку клавиатуры и для X11.<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 localectl}} и {{ic|man 5 vconsole.conf}}.<br />
* Для получения детальной информации обратитесь к разделам [[Fonts#Console_fonts|консольные шрифты (англ.)]] и [[KEYMAP|раскладка клавиатуры (англ.)]].<br />
<br />
=== Временная зона ===<br />
<br />
Временная зона настраивается путем создания соответствующей символической ссылки {{ic|/etc/localtime}} на файл временной зоны в директории {{ic|/usr/share/zoneinfo/}}. Чтобы сделать это автоматически, выполните команду:<br />
<br />
# timedatectl set-timezone Europe/Moscow<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 timedatectl}} и {{ic|man 5 localtime}} и {{ic|man 7 archlinux}}.<br />
<br />
{{Note|Прежний конфигурационный файл {{ic|/etc/timezone}} объявлен устаревшим с выходом {{pkg|systemd}}-190 и должен быть удален.}}<br />
<br />
Альтернативный метод - создание символической ссылки вручную:<br />
<!-- использовать относительную символическую ссылку! --><br />
# ln -sf ../usr/share/zoneinfo/Europe/Moscow /etc/localtime<br />
<br />
=== Аппаратные часы ===<br />
<br />
Systemd будет использовать UTC для аппаратных часов по умолчанию.<br />
{{Tip|Обычно рекомендуется запускать [[NTP|демон Network Time Protocol]] для поддержания синхронизации аппаратных часов с системным временем.}}<br />
<br />
==== Аппаратные часы по localtime ====<br />
<br />
Если вы собираетесь выставить аппаратные часы по localtime (местному времени, что '''КАТЕГОРИЧЕСКИ НЕ РЕКОМЕНДУЕТСЯ'''), выполните команду:<br />
<br />
# timedatectl set-local-rtc true<br />
<br />
Если же захотите вернуть ваши аппаратные часы к использованию временного формата UTC, выполните:<br />
<br />
# timedatectl set-local-rtc false<br />
<br />
Помните, что настройка перехода на зимнее/летнее время - неблагодарное занятие. Если переход на зимнее/летнее время происходит в тот момент, когда ваш компьютер выключен, то при следующей загрузке ваши часы будут показывать ошибочное время ([http://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html здесь об этом чуть подробнее (англ.)]). Последние версии ядра устанавливают системное время из RTC (часов реального времени) непосредственно во время загрузки без использования {{ic|hwclock}}, при этом ядро всегда считает, что RTC выставлено по UTC. Это означает, что если RTC выставлено по местному времени (local time), системное время будет изначально установлено ошибочно и затем корректироваться вскоре после этого при каждой загрузке. Это является причиной некоторых досадных багов (идущие назад часы редко являются нужной вещью).<br />
<br />
Причиной, позволяющей RTC быть выставленными по местному времени, является двойная загрузка системы с Windows, ([http://blogs.msdn.com/b/oldnewthing/archive/2004/09/02/224672.aspx которая использует localtime (англ.)]). Windows воспринимает RTC, выставленные по UTC при помощи простого [[Time#UTC in Windows|исправления реестра (англ.)]]. Если вы столкнетесь с подобными проблемами при двойной загрузке с Windows, вы можете установить аппаратные часы на использование местного времени. <br />
<br />
Если вы настроите Windows на использование UTC, также не забудьте отключить функцию "Обновление времени по Интернету" ("Internet Time Update"), иначе для Windows возникнет проблема с аппаратными часами, поскольку система будет пытаться синхронизировать их с временем через Интернет. Вместо этого следует оставить время в формате RTC и синхронизовать через Интернет в Linux посредством демона [[NTP]], как это предлагалось выше.<br />
<br />
* За дальнейшей информацией обратитесь к статье [[Time]].<br />
<br />
=== Подгружаемые модули ядра ===<br />
<br />
Сегодня все необходимые модули для загрузки подгружаются автоматически с помощью [[Udev]], так что, если вам не надо (или же вы не должны) использовать какой-нибудь модуль не из дерева ядра , нет необходимости дополнительно помещать какие-либо модули в какой-то файл конфигурации загрузки. Тем не менее, бывают случаи, когда вы можете подгрузить дополнительный модуль в процессе загрузки или поместить какой-то модуль в черный список, чтобы ваш компьютер работал правильно.<br />
<br />
==== Дополнительно подгружаемые при загрузке модули ====<br />
<br />
Необходимые для загрузки дополнительные модули оформляются в статический список файлов в директории {{ic|/etc/modules-load.d/}}. Каждый из конфигурационных файлов имеет наименование вида {{ic|/etc/modules-load.d/<program>.conf}} (где <program> - имя подгружаемого модуля) и содержит список имен подгружаемых модулей ядра, каждое из которых начинается с новой строки. При этом игнорируются как пустые строки конфигурационных файлов, так и строки, у которых первым символом, отличным о пробела, является символ {{ic|#}} и {{ic|;}}. Например:<br />
<br />
{{hc|/etc/modules-load.d/virtio-net.conf|<br />
# Load virtio-net.ko at boot<br />
virtio-net}}<br />
<br />
Более подробная информация содержится в руководстве {{ic|man 5 modules-load.d}}.<br />
<br />
==== Черный список ====<br />
<br />
Добавление модулей в черный список работает также, как и в случае с {{Pkg|initscripts}}, поскольку в действительности эта функция выполняется таким инструментом, как {{Pkg|kmod}}. Обратитесь к разделу [[Kernel_modules#Blacklisting|Module Blacklisting]] за более подробной информацией.<br />
<br />
=== Монтирование файловых систем ===<br />
<br />
Установка по умолчанию автоматически проверяет файловые системы командой fsck и монтирует файловые системы перед запуском тех сервисов, котрым необходимо иметь эти системы примонтированными. Например, systemd позволяет в автоматическом режиме добиться, что удаленные файловые системы наподобие [[NFS]] и [[Samba]] подключаются после поднятия сети. Поэтому монтирование как локальных, так и удаленных файловых систем, прописанных в {{ic|/etc/fstab}} должно работать "из коробки".<br />
<br />
Обратитесь к руководству {{ic|man 5 systemd.mount}} для получения более подробной информации.<br />
<br />
==== Автомонтирование ====<br />
<br />
* Если ваш раздел {{ic|/home}} занимает большой объем, лучшим вариантом было бы позволить сервисам не зависеть от подключения {{ic|/home}} и запускать данные сервисы, когда {{ic|/home}} еще подвергается проверке при загрузке системы. Добиться такого результата можно добавлением следующих параметров в запись файла {{ic|/etc/fstab}}, касающуюся раздела {{ic|/home}}:<br />
<br />
noauto,x-systemd.automount<br />
<br />
Такие параметры вызовут команду fsck и примонтируют {{ic|/home}} при первом обращении к данному разделу, и ядро будет буферизовать все файлы доступа к {{ic|/home}} до готовности данного раздела.<br />
<br />
* То же самое применимо и к удаленным файловым системам. Если вы хотите, чтобы монтирование данных систем происходило только по мере доступа к ним, вы можете использовать параметр {{ic|1=x-systemd.device-timeout=#}} в файле {{ic|/etc/fstab}} для определения таймаута в том случае, кода сетевые ресурсы оказываются недоступны.<br />
<br />
* В случае использования зашифрованных файловых систем с ключами доступа, вам также Iследует добавить параметр {{ic|noauto}} в соответствующие записи файла {{ic|/etc/crypttab}}. systemd не будет подключать зашифрованные устройства при загрузке, но, вместо этого, дождется реального обращения к ним и автоматически откроет к ним доступ с использованием определенных ключей перед тем, как они будут примонтированы. Это сэкономит несколько секунд при загрузке системы, например, в случае использования зашифрованного устройства RAID, потому что systemd не будет дожидаться от устройства, когда оно станет доступным. Например:<br />
<br />
{{hc|/etc/crypttab|<br />
data /dev/md0 /root/key noauto}}<br />
<br />
=== LVM ===<br />
<br />
Если у вас имеются тома LVM, не активированные посредством [[Mkinitcpio|initramfs]], включите сервис {{ic|lvm.service}} (предоставляемый пакетом {{pkg|lvm2}}):<br />
<br />
# systemctl enable lvm<br />
<br />
Точно так же, если у вас LVM на устройствах с шифрованием, монтируемым позже в процессе загрузки (например, из {{ic|/etc/crypttab}}), вам необходимо включить сервис {{ic|lvm-on-crypt.service}} (также предоставляемый пакетом {{pkg|lvm2}}):<br />
<br />
# systemctl enable lvm-on-crypt<br />
<br />
=== Управлением питанием ACPI ===<br />
<br />
Systemd обрабатывает некоторые события, связанные с [http://кru.wikipedia.org/wiki/ACPI ACPI], что настраивается при помощи параметров в конфигурационном файле {{ic|/etc/systemd/logind.conf}}:<br />
<br />
* {{ic|HandlePowerKey}}: определяет действия системы при нажатии кнопки питания (вкл./выкл.).<br />
* {{ic|HandleSuspendKey}}: определяет действия системы при нажатии кнопки спящего режима.<br />
* {{ic|HandleHibernateKey}}: определяет действия системы при нажатии кнопки ждущего режимаs.<br />
* {{ic|HandleLidSwitch}}: определяет действия системы при закрытии крышки компьютера.<br />
<br />
Для соответствующих действий могут использоваться значения {{ic|ignore}} (пропустить), {{ic|poweroff}} (отключить питание), {{ic|reboot}} (перезагрузить), {{ic|halt}} (выключить), {{ic|suspend}} (включить спящий режим), {{ic|hibernate}} (включить ждущий режим) или {{ic|kexec}} (системный вызов позволяющий оперативно переключиться в другое ядро).<br />
<br />
Если данные параметры не определены, по умолчанию systemd будет использовать следующие: {{ic|1=HandlePowerKey=poweroff}}, {{ic|1=HandleSuspendKey=suspend}}, {{ic|1=HandleHibernateKey=hibernate}}, и {{ic|1=HandleLidSwitch=suspend}}.<br />
<br />
В системах без графического интерфейса или использующих простые оконные менеджеры наподобие like [[i3]] или [[awesome]], так можно заменить демон [[acpid]], который обычно используется для реагирования на данные события ACPI.<br />
<br />
В текущей версии systemd параметры {{ic|Handle}} будут применены ко всей системе, если только они не "подавляются (временно отключены) другой программой, такой, как менеджер питания данного окружения рабочего стола. Если эти ограничений нет, вы можете столкнуться с ситуацией, когда systemd приводит вашу систему в спящий режим, а затем, когда система пробуждается менеджером управлением питания, снова "усыпляет" ее.<br />
<br />
{{Warning|В настоящее время менеджеры управления питанием в новейших версиях сред [[KDE]] и [[GNOME]] являются единственными, которые использюет такие команды "подавления". До тех пор, пока их не будут применять другие менеджеры, вам надо выставить в параметрах {{ic|Handle}} значение {{ic|ignore}}, если вы хотите, чтобы события ACPI обрабатывались в случае использования [[Xfce]], [[acpid]] или других программ. Но на подходе новые версии, которые включат данную функциональность.}}<br />
<br />
{{Note|Systemd также может использовать для перевода системы в спящий/ждущий режим другие движки (такие, как [[Uswsusp]] или [[TuxOnIce]]), в дополнение к движку ''ядра''.}}<br />
<br />
==== Хуки спящего режима ====<br />
<br />
Systemd в своих командах {{ic|systemctl suspend}} или {{ic|systemctl hibernate}} не использует [[pm-utils]] для "усыпления" машины; хуки [[pm-utils]], включая любые [[Pm-utils#Creating_your_own_hooks|пользовательские хуки]] не будут работать. Тем не менее, systemd предоставляет схожий механизм запуска пользовательских скриптов для данных событий. Systemd запускает все исполняемые файлы в директории {{ic|/usr/lib/systemd/system-sleep/}}, передавая каждому из них два аргумента:<br />
<br />
* Аргумент 1: или {{ic|pre}}, или {{ic|post}}, в зависимости от которых машина либо "уснет", либо будет "пробуждена";<br />
* Аргумент 2: или {{ic|suspend}}, или {{ic|hibernate}}, в зависимости от того, что было вызвано.<br />
<br />
В отличие от [[pm-utils]], systemd запустит данные скрипты одновременно, а не один после другого.<br />
<br />
Вывод любого пользовательского скрипта будет записан сервисом {{ic|systemd-suspend.service}} или {{ic|systemd-hibernate.service}}. Вы вы можете увидеть данный выход в [[#Журнал systemd|журнале]] systemd:<br />
<br />
# journalctl -b -u systemd-suspend<br />
<br />
Обратите внимание, что вместо использования скриптов вы также можете использовать специальные целевые юниты - {{ic|sleep.target}}, {{ic|suspend.target}} или {{ic|hibernate.target}} для того, чтобы подключить к другим юнитам возможности перехода в спящий режима.<br />
<br />
Пример пример пользовательского скрипта по переходу в спящий режим:<br />
<br />
{{hc|/usr/lib/systemd/system-sleep/example.sh|<br />
#!/bin/sh<br />
case $1/$2 in<br />
pre/*)<br />
echo "Going to $2..."<br />
;;<br />
post/*)<br />
echo "Waking up from $2..."<br />
;;<br />
esac}}<br />
<br />
Обратитесь к руководствам {{ic|man 7 systemd.special}} и {{ic|man 8 systemd-sleep}} для получения дальнейшей информации.<br />
<br />
=== Временные файлы ===<br />
<br />
Systemd-tmpfiles использует конфигурационные файлы в директориях {{ic|/usr/lib/tmpfiles.d/}} и {{ic|/etc/tmpfiles.d/}} для определения действий с временными файлами и директориями (создание, очистка и удаление их), обычно расположенные в {{ic|/run}} or {{ic|/tmp}}. Каждый файл с настройками имеет название вида {{ic|/etc/tmpfiles.d/<program>.conf}}. Данные конфигурационные файлы имеют приоритет по сравнению с любыми файлами с таким же названием, расположенными в директории {{ic|/usr/lib/tmpfiles.d/}}.<br />
<br />
Временные файлы tmpfiles обычно поставляются вместе с сервис-файлами для создания директорийк. которые, как ожидается, будут использоваться определенными демонами. Например, демон [[Samba]] предполагает наличие директории {{ic|/var/run/samba}} с соответствующими правами доступа. В данном случае tmpfile выглядит следующим образом:<br />
<br />
{{hc|/usr/lib/tmpfiles.d/samba.conf|<br />
D /var/run/samba 0755 root root}}<br />
<br />
Тем не менее, tmpfiles также могут использоваться для записи значений в определенные файлы во врем загрузки. К примеру, если вы используете {{ic|/etc/rc.local}} для того, чтобы отключить пробуждение системы USB-устройствами, при помощи команды {{ic|echo USBE > /proc/acpi/wakeup}}, вы можете вместо этого использовать следующий tmpfile:<br />
<br />
{{hc|/etc/tmpfiles.d/disable-usb-wake.conf|<br />
w /proc/acpi/wakeup - - - - USBE}}<br />
<br />
Метод с использованием tmpfiles в данном случае рекомендуется, поскольку systemd в действительности не поддерживает {{ic|/etc/rc.local}}.<br />
<br />
Обратитесь к руководству {{ic|man 5 tmpfiles.d}} за более подробной информацией.<br />
<br />
=== Юнит ===<br />
<br />
Юнит (англ. unit) - конфигурационный файл, содержащий информацию о сервисе (службе), сокете, устройстве, точке монирования/автомонирования, файле подкачке или разделе, определяемом для загрузки уровне запуска, пути в файловой системе или таймере, которые контролируются и управляются при помощи systemd. Синтаксис юнитов навеян спецификацией .desktop-файлов (XDG Desktop Entry Specification), которая, в свою очередь, вдохновлялась .ini-файлами от Microsoft Windows. <br />
<br />
Обратитесь к руководству {{ic|man 5 systemd.unit}} для получения дальнейшей информации.<br />
<br />
== Переход от initscripts к использованию systemd ==<br />
<br />
=== Эмуляция initscripts ===<br />
<br />
Интеграция с классической конфигурацией Arch'а обеспечивается пакетом {{Pkg|initscripts}}. В том случае, если {{Pkg|initscripts}} установлен параллельно с systemd и система загружена с использованием systemd, systemd будет выполнять следующую последовательность действий:<br />
<br />
# # Проводить синтаксический разбор массива {{ic|DAEMONS}} в файле {{ic|/etc/rc.conf}} и запускать при загрузке все находящиеся там демоны (см. ниже)<br />
# Выполнять при загрузке {{ic|/etc/rc.local}}<br />
# Выполнять при завершении работы системы {{ic|/etc/rc.local.shutdown}}<br />
<br />
Эмуляция initscripts рассматривается как просто переходная мера для легкой миграции пользователей на systemd и '''в конечном итоге будет отброшена'''. Система с "родной" systemd не зависит от централизованной конфигурации в {{ic|rc.conf}}, поэтому рекомендуется использовать [[#Родные системные файлы|родные конфигурационные файлы systemd]], которые имеют приоритет над настройками из {{ic|/etc/rc.conf}}.<br />
<br />
{{Note|Рекомендуемый путь по замене {{ic|/etc/rc.local}} состоит в написании пользовательского сервис-файла для всего того, что вы хотите запускать при загрузке системы. Обратитесь к соответствующему [[#Написание_пользовательского_.service_файла|разделу]] данной статьи.}}<br />
<br />
{{Note|Если вы отключали использование сочетания клавиш для перезагрузки системы {{keypress|Ctrl+Alt+Del}} в файле {{ic|/etc/inittab}}, теперь вам надо заново сделать это для systemd командой {{ic|systemctl mask ctrl-alt-del.target}}, выполняемой от суперпользователя root.}}<br />
<br />
==== Отказ от массива DAEMONS ====<br />
<br />
Для "чистой" установки systemd, вы можете полностью удалить файл {{ic|/etc/rc.conf}} и включать сервисы только посредством systemd. Для каждого сервиса с именем {{ic|<service_name>}} в массиве {{ic|DAEMONS}} из файла {{ic|/etc/rc.conf}} выполните команду:<br />
<br />
# systemctl enable <service_name><br />
<br />
{{Tip|Для получения списка обычно используемых демонов с их эквивалентами в initscripts и systemd, обратитесь к [[Daemons List|данной таблице]].}}<br />
<br />
Если сервис-файл {{ic|<service_name>.service}} отсутствует:<br />
<br />
* сервис-файл может быть недоступен для systemd. В этом случае вам нужно сохранить конфигурационный файл {{ic|rc.conf}} для запуска этих сервисов во время загрузки системы.<br />
* Systemd может использовать для сервисов другие имена, например, {{ic|cronie.service}} заменяет демон {{ic|crond}}; {{ic|alsa-store.service}} и {{ic|alsa-restore.service}} заменяют демон {{ic|alsa}}. Другой важный пример - демон {{ic|network}}, которого сменил целый набор сервис-файлов (обратитесь к статье [[Configuring Network]] для получения дальнейшей информации.)<br />
<br />
{{Tip|Вы можете заглянуть вовнутрь пакета, содержащего стартовые скрипты демона, чтобы узнать имена его сервис-файла. К примеру:<br />
$ pacman -Ql cronie<br />
[...]<br />
cronie /etc/rc.d/crond #Демон initscript, указываемый в массиве {{ic|DAEMONS}} (не используется при "чистой" настройке systemd)<br />
[...]<br />
cronie /usr/lib/systemd/system/cronie.service #Соответствующий сервис systemd<br />
[...]<br />
}}<br />
<br />
* Наконец, пользователю не нужно включать некоторые сервисы явным образом. Например, {{ic|dbus.service}} будет включен автоматическики при установке {{ic|dbus-core}}. {{ic|alsa-store.service}} и {{ic|alsa-restore.service}} также включены systemd автоматически. Проверьте список доступных сервисов и их состояние при помощи команды {{ic|systemctl}}, например: {{ic|systemctl status <service_name>}} (где <service_name> - имя сервиса).<br />
<br />
=== Сравнительная таблица устаревшей и "родной" конфигураций ===<br />
<br />
{{Warning|Данный раздел оставлен в русской версии временно, до полной миграции пользователей на использование "чистого" systemd.}}<br />
<br />
{| class="wikitable"<br />
|-<br />
! scope="col"| Настройка<br />
! scope="col"| Конфигурационный файл (файлы)<br />
! scope="col"| Устаревшая секция [https://projects.archlinux.org/initscripts.git/tree/rc.conf?id=97f0cd6751e8d22c14d7492cdc2186cf41157ba6 rc.conf]<br />
|-<br />
| align="center"|Имя компьютера (Hostname)<br />
| align="left"|{{ic|/etc/hostname}}<br />
{{ic|/etc/hosts}}<br />
| align="center"|{{ic|NETWORKING}}<br />
|-<br />
| align="center"|Консоль и раскладка клавиатуры<br />
| align="left"|{{ic|/etc/vconsole.conf}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Локаль<br />
| align="left"|{{ic|/etc/locale.conf}}<br />
{{ic|/etc/locale.gen}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Временная зона<br />
| align="left"|{{ic|/etc/localtime}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Аппаратные часы<br />
| align="left"|{{ic|/etc/adjtime}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Модули ядра<br />
| align="left"|{{ic|/etc/modules-load.d/}}<br />
| align="center"|{{ic|HARDWARE}}<br />
|}<br />
<br />
=== Эмуляция /etc/rc.local ===<br />
<br />
{{Warning|Данный раздел оставлен в русской версии временно, до полной миграции пользователей на использование "чистого" systemd.}}<br />
<br />
Если вы хотите при использовании systemd сохранить простоту {{ic|/etc/rc.local}} , вам нужно создать следующий сервис-файл и включить его. Просто добавьте строки {{ic|1=ExecStart=}} для тех команд, которые вы хотите запустить. Если же вам в данном случае требуется более сложная функциональность (например, циклы с {{ic|for}}), то вы можете создать скрипт Bash и выполнять его из сервис-файла. Удалите {{ic|1=ExecStart=/bin/true}}, если вы здесь действительно добавляете команду.<br />
<br />
{{hc|/etc/systemd/system/rc-local.service|<nowiki><br />
[Unit]<br />
Description=/etc/rc.local compatibility<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/bin/true<br />
RemainAfterExit=yes<br />
<br />
[Install]<br />
WantedBy=multi-user.target<br />
</nowiki>}}<br />
<br />
== Основы использования systemctl ==<br />
<br />
Главная команда для наблюдения и контроля за состоянием systemd - команда {{ic|systemctl}}. Некоторые из вариантов ее использования связаны с изучением состояния системы и управлением сервисами. Обратитесь к странцам руководства {{ic|man 1 systemctl}} для получения более детальной информации.<br />
<br />
{{Tip|Вы можете использовать приведенные ниже команды {{ic|systemctl}} с ключом {{ic|-H <user>@<host>}} для того, чтобы контролировать systemd на удаленной машине. В этом случае для соединения с удаленным процессом systemd будет использовать [[SSH]].}}<br />
<br />
{{Note|{{ic|systemadm}} - официальная графическая оболочка для {{ic|systemctl}}. Она доступна в виде пакета {{AUR|systemd-ui-git}} из [[AUR]].}}<br />
<br />
=== Анализ состояния системы ===<br />
<br />
Список запущенных юнитов:<br />
<br />
$ systemctl<br />
<br />
или:<br />
<br />
$ systemctl list-units<br />
<br />
Список юнитов, попытка запуска которых завершилась неудачей:<br />
<br />
$ systemctl --failed<br />
<br />
Доступные юниты можно посмотреть в директориях {{ic|/usr/lib/systemd/system/}} и {{ic|/etc/systemd/system/}} (последняя директория имеет приоритет). Вы можете увидеть список установленных юнитов командой:<br />
<br />
$ systemctl list-unit-files<br />
<br />
=== Использование юнитов ===<br />
<br />
Юниты могут быть сервисами ({{ic|.service}}), точками монтирования ({{ic|.mount}}) или сокетами ({{ic|.sockets}}). При использовании команды {{ic|systemctl}} необходимо всегда указывать полное имя файла, включая расширение. Однако, есть несколько сокращений при определении юнита следующими командами{{ic|systemctl}}:<br />
<br />
* Ели вы не указали суффикс, systemctl предполагает, что это {{ic|.service}}. Например, {{ic|netcfg}} и {{ic|netcfg.service}} будут трактоваться одинаково.<br />
* Точки монтирования будут автоматически преобразованы в соответствующий юнит {{ic|.mount}}. Например, указание {{ic|/home}} равнозначно {{ic|home.mount}}.<br />
* Аналогично точкам монтирования, имена устройств автоматически преобразуются в соответствующий юнит {{ic|.device}}, поэтому указание {{ic|/dev/sda2}} полностью соответствует юниту {{ic|dev-sda2.device}}.<br />
<br />
Обратитесь к руководству {{ic|man systemd.unit}} для получения детальной информации.<br />
<br />
{{Note|При использовании юнитов следует обращать внимание на регистр букв в наименовании сервис-файлов: так, необходимо использовать ''NetworkManager.'''service''' '' (запомните употребление в данном названии букв в верхнем регистре) для включения сервиса NetworkManager'а, в противном случае вы получите сообщение об ошибке и сервис во время загрузки системы не запустится.}}<br />
<br />
Незамедлительно запустить юнит:<br />
<br />
# systemctl start <unit><br />
<br />
Незамедлительно остановить юнит:<br />
<br />
# systemctl stop <unit><br />
<br />
Перезапустить юнит:<br />
<br />
# systemctl restart <unit><br />
<br />
Запросить у юнита перезагрузку его настроек:<br />
<br />
# systemctl reload <unit><br />
<br />
Показать статус юнита, а также запущен он или нет:<br />
<br />
$ systemctl status <unit><br />
<br />
Проверить включение юнита (т.е. разрешен ли юниту запуск при загрузке системы):<br />
<br />
$ systemctl is-enabled <unit><br />
<br />
Включить юнит (разрешить юниту запуск при загрузке системы):<br />
<br />
# systemctl enable <unit><br />
<br />
{{Note| Если сервис-файлы не имеют раздела {{ic|Install}}, это обычно означает, что данные сервисы вызываются автоматически другими сервисами. Но если вам требуется установить их вручную, используйте следующую команду, заменив {{ic|foo}} именем вашего сервиса.<br />
# ln -s /usr/lib/systemd/system/''foo''.service /etc/systemd/system/graphical.target.wants/<br />
}}<br />
<br />
Выключить юнит (запретить юниту запуск при загрузке системы):<br />
<br />
# systemctl disable <unit>}}<br />
<br />
Показать страницу помощи для юнита (необходима поддержка этой функции в указанном файле юнита):<br />
<br />
$ systemctl help <unit><br />
<br />
=== Управление питанием ===<br />
<br />
Если у вас локальная пользовательская сессия {{ic|systemd-logind}} и нет других активных сессий, приведенные ниже команды сработают и без привилегий суперпользователя root. В противном случае (например, вследствие того, что пользователь залогинился в tty), systemd автоматически запросит у вас пароль root.<br />
<br />
Завершить работу и перезагрузить систему:<br />
<br />
$ systemctl reboot<br />
<br />
Завершить работу и выключить компьютер (с отключением питания):<br />
<br />
$ systemctl poweroff<br />
<br />
Завершить работу и остановить систему:<br />
<br />
$ systemctl halt<br />
<br />
Перевести систему в спящий режим:<br />
<br />
$ systemctl suspend<br />
<br />
Перевести систему в ждущий режим:<br />
<br />
$ systemctl hibernate<br />
<br />
== Запуск окружения рабочего стола из systemd ==<br />
<br />
Чтобы включить графический вход в систему, запустите выбранный вами демон [[Display Manager (Русский)|экранного менеджера]] (например, [[KDM]]). В настоящий момент доступны сервис-файлы для [[GDM]], [[KDM]], [[SLiM]], [[XDM]], [[LXDM]] и [[LightDM]].<br />
<br />
# systemctl enable kdm<br />
<br />
Эта команда должна работать "из коробки". Если вдруг она не сработала, то, возможно, у вас {{ic|default.target}} установлен вручную или остался с прежней установки:<br />
<br />
{{hc|# ls -l /etc/systemd/system/default.target|<br />
/etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target}}<br />
<br />
Просто удалите символическую ссылку и systemd будет использовать целевой юнит по умолчанию - {{ic|default.target}} (т.е. {{ic|graphical.target}}).<br />
<br />
# rm /etc/systemd/system/default.target<br />
<br />
=== Использование systemd-logind ===<br />
<br />
{{Note|С 30.10.2012 [[ConsoleKit]] был [http://archlinux.org.ru/node/352/ заменен на systemd-logind] как механизм входа в окружение рабочего стола по умолчанию.}}<br />
<br />
Для того, чтобы проверить статус вашей пользовательской сессии, вы можете использовать команду {{ic|loginctl}}. Все действия [[PolicyKit]] наподобие перевода системы в спящий режим или монтирования внешних носителей с помощью [[Udisks]] должны работать автоматически.<br />
<br />
$ loginctl show-session $XDG_SESSION_ID<br />
<br />
== Написание пользовательского .service файла ==<br />
<br />
=== Обработка зависимостей ===<br />
<br />
В случае использования systemd зависимости могут быть разрешены правильным построением файлов юнитов. ,Наиболее частый случай -- когда юниту {{ic|A}} требуется, чтобы юнит {{ic|B}} был запущен перед тем, как запустится сам юнит {{ic|A}}. В этом случае добавьте строки {{ic|1=Requires=B}} и {{ic|1=After=B}} в секцию {{ic|[Unit]}} сервис-файла юнита {{ic|A}}. Если подобная зависимость не является обязательной, добавьте соответственно взамен указанных выше строки {{ic|1=Wants=B}} и {{ic|1=After=B}}. Обратите внимание, что {{ic|1=Wants=}} и {{ic|1=Requires=}} не подразумевают {{ic|1=After=}}, что означает, что если {{ic|1=After=}} не определено, два юнита будут запущены параллельно друг другу.<br />
<br />
Обычно зависимости указываются в сервис-файлах, а не в целевых юнитах. Например, {{ic|network.target}} потребуется любому сервису, который связан с настройкой ваших сетевых интерфейсов, поэтому в любом случае определите загрузку вашего пользовательского юнита после запуска {{ic|network.target}}.<br />
<br />
=== Тип ===<br />
<br />
Существует несколько различных типов запуска служб, которые надо иметь в виду при написании пользовательского сервис-файла. Тип запуска определяется параметром {{ic|1=Type=}} в секции {{ic|[Service]}}. Обратитесь к руководству {{ic|man systemd.service}} для получения более детального объяснения.<br />
<br />
* {{ic|1=Type=simple}}: systemd предполагает, что сервис будет запущен незамедлительно. Процесс при этом не должен форкнуться. Не используйте этот тип, если другим сервисы зависят от очередности при запуске данного сервиса, за исключением активации сокета.<br />
* {{ic|1=Type=forking}}: systemd предполагает, что сервис запускается однократно, процесс форкается и родительский процесс завершается. Используйте данный тип для запуска классических демонов за исключением тех случаев, когда, как вам известно, в таком поведении процесса нет необходимости. Вам следует также определить {{ic|1=PIDFile=}}, чтобы systemd могла отслеживать основной процесс.<br />
* {{ic|1=Type=oneshot}}: Полезен для скриптов, которые выполняют одну работу, а потом завершаются. Вам может понадобиться также установить параметр {{ic|1=RemainAfterExit=}}, чтобы systemd по-прежнему считала процесс активным, даже после его завершения<br />
* {{ic|1=Type=notify}}: Идентичен параметру {{ic|1=Type=simple}}, но с той оговоркой, что демон пошлет systemd сигнал о своей готовности. Эталонная реализация данного уведомления обеспечивается библиотекой {{ic|libsystemd-daemon.so}}.<br />
* {{ic|1=Type=dbus}}: Сервис считается находящимся в состоянии готовности, когда определенное {{ic|BusName}} появляется в системной шине DBus.<br />
<br />
=== Замена предоставленных пакетами файлов юнитов ===<br />
<br />
Файлы юнитов в директории {{ic|/etc/systemd/system/}} имеют приоритет над такими же файлами в директории {{ic|/usr/lib/systemd/system/}}.<br />
Для создания собственной версии юнита (который не будет затерт при обновлении), скопируйте старый юнит из директории {{ic|/usr/lib/}} в директорию {{ic|/etc/}} и внесите в эту копию свои изменения. Альтернативным вариантом является использование {{ic|.include}} для парсинга существующего сервис-файла и затем переопределения или добавления новых опций. Например, если вы просто хотите добавить в сервис-файл дополнительную зависимость, вы можете использовать такую команду в юните:<br />
<br />
{{hc|/etc/systemd/system/<service-name>.service|2=<br />
.include /usr/lib/systemd/system/<service-name>.service<br />
<br />
[Unit]<br />
Requires=<new dependency><br />
After=<new dependency>}}<br />
<br />
Затем выполните следующие команды для того, чтобы изменения вступили в силу:<br />
<br />
# systemctl reenable <unit><br />
# systemctl restart <unit><br />
<br />
{{Tip|Вы можете использовать команду {{ic|systemd-delta}}, чтобы увидеть, какие файлы юнитов были переопределены и что в точности было изменено.}}<br />
<br />
=== Подсветка синтаксиса файлов юнитов в Vim ===<br />
<br />
подсветка синтаксиса файлов юнитов для systemd в редакторе [[Vim]] может быть осуществлена путем установки пакета {{AUR|vim-systemd}} из [[Arch User Repository|AUR]].<br />
<br />
== Уровни запуска/цели ==<br />
<br />
Уровни запуска (по-английски уровень запуска - runlevel) для systemd являются устаревшей концепцией. Systemd использует ''цели'' (англ. target), которые выполняют ту же задачу, что и уровни запуска, но действуют немного по-другому. Каждая ''цель'' поименована (т.е. имеет собственное имя, а не номер) и, как предполагается, предназначена для конкретных задач; возможно иметь в одно и то же время активными несколько таких целей. Некоторые ''цели'' реализованы так, что наследуют все сервисы других ''целей'' и добавляют к ним свои сервисы. В systemd имеются также ''цели'', которые имитируют общие уровни запуска SystemVinit, поэтому вы можете переключаться между целевыми юнитами с использованием привычной команды {{ic|telinit RUNLEVEL}}. <br />
<br />
=== Получение информации о текущем уровне запуска/цели ===<br />
<br />
При использовании systemd для этого предназначена следующая команда (заменяющая {{ic|runlevel}}):<br />
<br />
$ systemctl list-units --type=target<br />
<br />
=== Создание пользовательской цели ===<br />
<br />
Уровни загрузки, по которым расписаны конкретные задачи на установке дистрибутива Fedora по умолчанию - 0, 1, 3, 5 и 6; есть маппинг 1:1 с помощью конкретной цели systemd. К сожалению, не существует хорошего способа сделать то же самое для определяемых пользователем уровней, таких, как 2 и 4. Использование их предполагает, что вы создаете новый именованный '' целевой юнит''systemd наподобие {{ic|/etc/systemd/system/<your target>}}, который берет за основу один из существующих уровней запуска (взгляните, например, на {{ic|/usr/lib/systemd/system/graphical.target}}), создаете также директорию {{ic|/etc/systemd/system/<your target>.wants}} и затем символические ссылки на те дополнительные сервисы из директории {{ic|/usr/lib/systemd/system/}}, которые вы хотите включить при загрузке.<br />
<br />
== Таблица уровней запуска и их аналогов в Systemd ==<br />
<br />
{| class="wikitable" border="1" cellpadding="5" cellspacing="0"<br />
! Уровнень запуска SysV !! systemd Target !! Примечание<br />
|-<br />
| 0 || runlevel0.target, poweroff.target || Выключить систему.<br />
|-<br />
| 1, s, single || runlevel1.target, rescue.target || Однопользовательский уровень запуска.<br />
|-<br />
| 2, 4 || runlevel2.target, runlevel4.target, multi-user.target || Уровень запуска, определенный пользователем/специфичный для узла. По умолчанию соответствует уровню запуска 3.<br />
|-<br />
| 3 || runlevel3.target, multi-user.target || Многопользовательский режим без графики. Пользователи, как правило, входят с помощью множества консолей или через сеть.<br />
|-<br />
| 5 || runlevel5.target, graphical.target || Многопользовательский режим с графикой. Обычно эквивалентен запуску всех сервисов уровня 3 и графическому менеджеру входа.<br />
|-<br />
| 6 || runlevel6.target, reboot.target || Перезагрузка.<br />
|-<br />
| emergency || emergency.target || Аварийная оболочка.<br />
|-<br />
|}<br />
<br />
=== Изменение текущей цели ===<br />
<br />
В systemd цели доступны посредством " целевых юнитов". Вы можете изменить их командой:<br />
<br />
# systemctl isolate graphical.target<br />
<br />
Данная команда изменит только лишь текущую цель и не повлияет на следующую загрузку системы. Она соответствует командам наподобие {{ic|telinit 3}} или {{ic|telinit 5}} для Sysvinit.<br />
<br />
=== Изменение цели для загрузки ===<br />
<br />
Стандартная цель - {{ic|default.target}}, которая по умолчанию является псевдонимом юнита {{ic|graphical.target}} (примерно соответствующего прежнему уровню выполнения 5). Для изменения цели при загрузке по умолчанию, добавьте следующий дополнительный [[kernel parameters|параметр ядра]] в вашем загрузчике:<br />
<br />
{{Tip|Расширение {{ic|.target}} можно опустить.}}<br />
<br />
* {{ic|1=systemd.unit=multi-user.target}} (что примерно соответствует прежнему уровню выполнения 3),<br />
* {{ic|1=systemd.unit=rescue.target}} (что примерно соответствует прежнему уровню выполнения 1).<br />
<br />
Другой путь заключается в том, чтобы оставить загрузчик без изменений и изменить целевой юнит по умолчанию - {{ic|default.target}}, что достигается командой {{ic|systemctl}}:<br />
<br />
# systemctl enable multi-user.target<br />
<br />
Эффект от применения данной команды выводится через {{ic|systemctl}}; символическая ссылка на новый целевой юнит по умолчанию создается в директории {{ic|/etc/systemd/system/default.target}}. Это сработает в том случае (и только в том случае), если имеется следующая секция:<br />
<br />
[Install]<br />
Alias=default.target<br />
<br />
в конфигурационном файле целевого юнита. В настоящий момент как {{ic|multi-user.target}}, так и {{ic|graphical.target}} оба имеют данную секцию.<br />
<br />
== Журнал ==<br />
С версии 38 systemd имеет собственную систему ведения логов - журнал (journal). По умолчанию, более не требуется запуск демона syslog. Для чтения логов используйте команду:<br />
<br />
# journalctl<br />
<br />
По умолчанию (когда в конфигурационном файле {{ic|/etc/systemd/journald.conf}} параметр {{ic|Storage&#61;}} имеет значение {{ic|auto}}) журнал записывается в директорию {{ic|/run/systemd/journal}}. Если директория {{ic|/var/log/journal/}} не существует (например, вы или какая-либо программа удалили ее), systemd '''не''' создаст ее автоматически, но вместо этого запишет свои логи в директорию {{ic|/run/systemd/journal}}. Это означает, что логи будут потеряны при перезагрузке.<br />
<br />
=== Фильтрация вывода ===<br />
<br />
{{ic|journalctl}} позволяет фильтровать вывод по особым полям.<br />
<br />
Примеры:<br />
<br />
Показать все сообщения с момента текущей загрузки системы:<br />
<br />
# journalctl -b<br />
<br />
Последние сообщения:<br />
<br />
# journalctl -f<br />
<br />
Показать все сообщения определенной программы:<br />
<br />
# journalctl /usr/lib/systemd/systemd<br />
<br />
Показать все сообщения определенного процесса:<br />
<br />
# journalctl _PID=1<br />
<br />
Показать все сообщения определенного юнита:<br />
<br />
# journalctl -u netcfg<br />
<br />
Обратитесь к {{ic|man journalctl}} и {{ic|systemd.journal-fields}} или [http://0pointer.de/blog/projects/journalctl.html блог Леннерта (англ.)] для получения детальной информации.<br />
<br />
=== Ограничение размера журнала ===<br />
<br />
Если журнал сохраняется при перезагрузке, размер его по умолчанию ограничен значением в 10% от объема соответствующей файловой системы. Например, для директории {{ic|/var/log/journal}}, расположенной на корневом разделе в 50 Гбайт, максимальный размер журналируемых данных составит до 5 Гбайт. Максимальный объем постоянного журнала можно контролировать при помощи значения {{ic|SystemMaxUse}} в конфигурационном файле {{ic|/etc/systemd/journald.conf}}, поэтому для ограничения его объемом в 50 Mбайт раскомментируйте и отредактируйте соответствующую строку:<br />
<br />
SystemMaxUse=50M<br />
<br />
Обратитесь к {{ic|man journald.conf}} для получения дальнейшей информации.<br />
<br />
=== Journald в связке с классическим демоном syslog ===<br />
<br />
Совместимость с классической реализацией syslog обеспечивается сокетом {{ic|/run/systemd/journal/syslog}}, в который перенаправляются все сообщения. Чтобы дать возможность демону syslog работать вместе с журналом systemd, следует привязать данный демон к указанному сокету вместо {{ic|/dev/log}} ([http://lwn.net/Articles/474968/ официальное сообщение]). Пакетом {{pkg|syslog-ng}} в репозиториях автоматически предоставляется необходимая конфигурация.<br />
<br />
# systemctl enable syslog-ng<br />
<br />
== Сеть ==<br />
<br />
{{Warning|Данный раздел в английской версии включен в состав статьи [[Configuring Network]]; в русской версии временно оставлен из-за того, что русский вариант [[Configuring Network (Русский)]] устарел в сравнении с английским.}}<br />
<br />
=== Динамическое подключение (DHCP) с использованием dhcpcd ===<br />
<br />
Если хотите использовать только DHCP для своего соединения Ethernet, вы можете воспользоваться сервисом {{ic|dhcpcd@.service}} (который поставляется пакетом {{Pkg|dhcpcd}}).<br />
<br />
Чтобы подключить DHCP для {{ic|eth0}}, просто выполните команду:<br />
<br />
# systemctl start dhcpcd@eth0.service<br />
<br />
Вы можете включить этот сервис, и он будет автоматически запускаться при загрузке. Это делается командой:<br />
<br />
# systemctl enable dhcpcd@eth0.service<br />
<br />
Иногда сервис dhcpd запускается до загрузки модуля вашей сетевой карты ({{bug|30235}}), в этом случае вручную добавьте вашу сетевую карту в конфигурационный файл {{ic|/etc/modules-load.d/*.conf}}. Например, для карты Realtek необходима загрузка модуля {{ic|r8169}}, поэтому создайте такой конфигурационный файл:<br />
<br />
{{hc|/etc/modules-load.d/realtek.conf|2=<br />
r8169}}<br />
<br />
=== Другие конфигурации ===<br />
<br />
Для статического подключения, беспроводной сети или сложной конфигурации сети наподобие сетевого моста, вы можете использовать [[Netcfg#systemd_support|netcfg]] или [[NetworkManager#Enable_NetworkManager_under_Native_systemd_system|NetworkManager]], для обоих этих инструментов управления сетью имеются сервис-файлы для systemd.<br />
<br />
{{Note|Если вы хотите использовать netcfg, NetworkManager или другие программы управления сетью, вам не надо в этом случае запускать или включать сервис dhcpcd как показано в предыдущем параграфе.}}<br />
<br />
== Оптимизация ==<br />
<br />
=== Анализ процесса загрузки ===<br />
<br />
==== Использование systemd-analyze ====<br />
<br />
Systemd предоставляет инструмент под названием {{ic|systemd-analyze}}, позволяющий проанализировать процесс загрузки вашей системы, чтобы можно было увидеть, какие файлы юнитов тормозят загрузку. Соответственно, вы можете оптимизировать вашу систему. Для использования данного инструмента вам потребуется установить пакеты {{Pkg|python2-dbus}} и {{Pkg|python2-cairo}}.<br />
<br />
Чтобы увидеть, сколько времени было потрачено на подготовку пространства ядра и пространства пользователя во время загрузки, просто выполните команду:<br />
<br />
$ systemd-analyze<br />
<br />
{{Tip|Чтобы увидеть, сколько времени ушло на загрузку образа initramfs, дополните хуком {{ic|timestamp}} ваш массив {{ic|HOOKS}} из конфигурационного файла {{ic|/etc/[[mkinitcpio]].conf}} и от суперпользователя root пересоберите ваш образ initramfs командой {{ic|mkinitcpio -p linux}} }}<br />
<br />
Чтобы увидеть список запускаемых файлов юнитов, отсортированный по потраченному каждым из них на загрузку времени, выполните команду:<br />
<br />
$ systemd-analyze blame<br />
<br />
Вы также можете создать файл SVG, показывающий процесс загрузки в графическом виде, наподобие [[Bootchart]]:<br />
<br />
$ systemd-analyze plot > plot.svg<br />
<br />
==== Использование bootchart ====<br />
<br />
Вы можете использовать версию bootchart для визуализации последовательности при загрузке системы.<br />
Из-за невозможности использовать стандартные установки bootchart (так как нельзя добавить в командную строку ядра вторую запись init), вам придется воспользоваться пакетом {{AUR|bootchart2}} из [[AUR]], поставляемым с недокументированным сервисом systemd. После установки bootchart2 выполните команду:<br />
<br />
# systemctl enable bootchart<br />
<br />
Обратитесь к [https://github.com/mmeeks/bootchart документации bootchart (англ.)] за дальнейшей и детализированной информацией об использовании данной версии bootchart.<br />
<br />
=== Readahead ===<br />
<br />
systemd поставляется со свой реализации технологии readahead, что в принципе должно усовершенствовать процесс загрузки системы. Однако, в зависимости от версии вашего ядра и типа жесткого диска, скорость обращения к данным может разниться (например, может быть медленнее). Чтобы включить данный сервис, выполните:<br />
<br />
# systemctl enable systemd-readahead-collect systemd-readahead-replay<br />
<br />
Не забудьте, что волшебство технологии readahead подействует только после нескольких перезапусков системы<br />
<br />
=== Ранний старт сервисов ===<br />
<br />
Одним из центральных элементов systemd является [[D-Bus]] и активация сокетов, что требует запуска сервисов при первой потребности в них. Обычно такой подход является удачным, но, если вы знаете, что какой-то сервис (вроде [[UPower]]) должен всегда запускаться во время загрузки системы, то вы можете сократить общее время загрузки, запуская его так рано, как это вообще возможно. Этого можно добиться (если сервис-файл устроен соответствующим образом, что верно в большинстве случаев) путем выполнения команды:<br />
<br />
# systemctl enable upower<br />
<br />
Это заставит systemd запустить UPower так рано, как это возможно, не устраивая перегонки данного сервиса с активацией сокета или D-Bus.<br />
<br />
=== Уменьшение вывода во время загрузки ===<br />
<br />
Измените параметр {{ic|verbose}} на {{ic|quiet}} в строке загрузки ядра вашего загрузчика. Для некоторых систем, в частности с SSD, узким местом является низкая производительность TTY, поэтому уменьшение вывода информации означает прирост скорости загрузки.<br />
<br />
== Устранение неполадок ==<br />
<br />
=== Выключение/перезагрузка происходят ужасно долго ===<br />
<br />
Если процесс выключения занимает очень долгое время (или, по-видимому, зависает), то, вероятно, виноват сервис, который не завершает свою работу. systemd ожидает некоторое время, пока каждый сервис завершит свою работу самостоятельно, и только потом пытается принудительно завершить (kill) его. Если вы столкнулись с такой проблемой, обратитесь к [http://freedesktop.org/wiki/Software/systemd/Debugging#Shutdown_Completes_Eventually данной статье (англ.)].<br />
<br />
== Полезные ссылки ==<br />
<br />
*[http://www.freedesktop.org/wiki/Software/systemd Официальный веб-сайт (англ.)]<br />
*[http://0pointer.de/public/systemd-man/ Страницы руководств (англ.)]<br />
*[http://freedesktop.org/wiki/Software/systemd/Optimizations systemd Optimizations (англ.)]<br />
*[http://www.freedesktop.org/wiki/Software/systemd/FrequentlyAskedQuestions FAQ (англ.)]<br />
*[http://www.freedesktop.org/wiki/Software/systemd/TipsAndTricks Tips And Tricks (англ.)]<br />
*[http://0pointer.de/public/systemd-ebook-psankar.pdf systemd для администраторов (PDF) - перевод цикла статей Леннарта Поттеринга (Lennart Poettering) (англ.)]<br />
*[http://0pointer.de/blog/projects/systemd.html Блог Lennart'а (англ.)]<br />
*[http://archlinux.org.ru/forum/viewtopic.php?f=9&t=9581 systemd mini FAQ]<br />
*[http://fedoraproject.org/wiki/Systemd Fedora Linux Wiki: Systemd (англ.)]<br />
*[http://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet Fedora's SysVinit to systemd cheatsheet (англ.)]<br />
*[http://wiki.russianfedora.ru/index.php/Systemd systemd - база знаний проекта Fedora]<br />
*[http://wiki.debian.org/ru/Systemd Debian Wiki: systemd - менеджер системы и сервисов]<br />
*[http://wiki.ubuntu.com/systemd Ubuntu Wiki: systemd (англ.)]</div>Archvillhttps://wiki.archlinux.org/index.php?title=Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=235571Systemd (Русский)2012-11-15T17:55:38Z<p>Archvill: /* Установка */ сделал список как в английской вики</p>
<hr />
<div>{{DISPLAYTITLE:systemd (Русский)}}<br />
[[Category:Русский]]<br />
[[Category:Процесс Загрузки (Русский)]]<br />
[[en:systemd]]<br />
[[es:systemd]]<br />
[[fr:systemd]]<br />
[[it:systemd]]<br />
[[ja:Systemd]]<br />
[[zh-CN:systemd]]<br />
{{Article summary start|Сводка}}<br />
{{Article summary text|Статья охватывает установку и настройку systemd.}}<br />
{{Article summary heading|Связанные статьи}}<br />
{{Article summary wiki|systemd/User}}<br />
{{Article summary wiki|systemd/Services}}<br />
{{Article summary wiki|systemd FAQ}}<br />
{{Article summary wiki|init Rosetta (Русский)}}<br />
{{Article summary wiki|udev (Русский)}}<br />
{{Article summary end}}<br />
Цитата с [http://freedesktop.org/wiki/Software/systemd веб-страницы проекта]:<br />
<br />
''"'''systemd''' - система [инициализации] и менеджер служб для Linux, совместимые со скриптами инициализации SysV и LSB. '''systemd''' обеспечивает возможности агрессивной параллелизации, использует сокеты и активацию [[D-Bus]] для запускаемых служб, предлагает запуск демонов по необходимости, отслеживает процессы при помощи [[cgroups|контрольных групп]] Linux, поддерживает мгновенные снимки и восстановление состояния системы, монтирование и точки монтирования, а также внедряет основанную на зависимостях логику контроля процессов сложных транзакций. Эта система может выступать заменой [[SysVinit|sysvinit]]."''.<br />
<br />
{{Note|1=За детальным объяснением причин происходящего перехода Arch'а на systemd обратитесь к [https://bbs.archlinux.org/viewtopic.php?pid&#61;1149530#p1149530 сообщению на англоязычном форуме].}}<br />
<br />
Смотрите также [[Wikipedia:Systemd|статью в Википедии]].<br />
<br />
== Соображения перед началом миграции ==<br />
<br />
* Настоятельно рекомендуется перейти на новую конфигурацию '''initscripts''', описанную в статье [[rc.conf (Русский)|rc.conf]]. Сконфигурировав таким образом свою систему, вы проделаете бóльшую часть работы, необходимую для миграции на systemd.<br />
* Почитайте про systemd на [http://freedesktop.org/wiki/Software/systemd/ сайте разработчиков].<br />
* Обратите внимание, что systemd имеет собственный '''журнал (journal)''', заменяющий '''syslog''', хотя оба варианта ведения логов могут сосуществовать. Обратитесь к приведенному ниже [[#Журнал|разделу, посвященному журналу]].<br />
* Хотя systemd вполне способна заменить определенную функциональность таких демонов, как '''cron''', '''acpid''' или '''xinetd''', но если вы не хотите, можете не отказываться от использования традиционных демонов.<br />
* Интерактивные загрузочные скрипты (initscripts) не работают с systemd. В частности, '''netcfg-menu''' [https://bugs.archlinux.org/task/31377 не может] использоваться при загрузке системы.<br />
<br />
== Установка ==<br />
<br />
{{Note|Оба пакета - {{pkg|systemd}} и {{pkg|systemd-sysvcompat}} - ставаятся по умолчанию при установке с носителя новее, чем [https://www.archlinux.org/news/systemd-is-now-the-default-on-new-installations/ 2012-10-13].}}<br />
<br />
Следующий раздел предназначен для тех установок Arch Linux, которые все еще зависят от пакетов {{pkg|sysvinit}} и {{pkg|initscripts}} и не перешли на использование {{pkg|systemd}}.<br />
<br />
# Установите пакет {{pkg|systemd}} и добавьте следующую запись к командной строке загрузки ядра: {{ic|1=init=/usr/lib/systemd/systemd}}<br />
# выполнив это, вы сможете включать или отключать любой необходимый сервис путем применения команды {{ic|systemctl enable <service_name>}} (это примерно соответствует тому, что включалось в массив {{ic|DAEMONS}}).<br />
# Перезагрузите свою систему и убедитесь, что {{ic|systemd}} в настоящее время активен, выполнив слудующую команду: {{ic|$ cat /proc/1/comm}}. Данная команда должна вернуть строку {{ic|systemd}}.<br />
# Удалите {{pkg|initscripts}} и {{pkg|sysvinit}} из вашей системы и установите {{pkg|systemd-sysvcompat}}.<br />
# В последнюю очередь удалите параметр {{ic|1=init=/usr/lib/systemd/systemd}}, поскольку необходимости в нем более нет.<br />
<br />
=== Дополнительная информация ===<br />
<br />
* Если в параметрах ядра имеется значение {{ic|quiet}}, вероятно, вам стоит удалить его для нескольких первых загрузок systemd, чтобы видеть возникающие во время загрузке проблемы.<br />
<br />
* Теперь добавлять вашего пользователя в [[Users and Groups|группы]] ({{ic|optical}}, {{ic|audio}}, {{ic|scanner}}, ...) в большинстве случаев '''нет''' необходимости при использовании systemd. Это даже может нарушить работоспособность системы. Например, добавление в группу audio может привести к невозможности быстрого переключения между пользователями и позволит приложениям заблокировать программное микширование. Каждый вход PAM предоставляет сессию login, которое дает вам разрешения для локальной сессии посредством [[Wikipedia:Access control list|POSIX ACLs]] на аудио/видео устройства и позволяет выполнять некоторые операции, такие, как как монтирование съемных носителей через [[udisks]]. <br />
<br />
{{Note|Systemd-logind заменил [[ConsoleKit]], удаленный из репозиториев, поэтому для полной функциональности теперь система должна загружаться с использованием systemd. Смотрите [http://archlinux.org.ru/node/352/ новость] для получения дальнейшей информации.}<br />
<br />
Ранее ConsoleKit обеспечивал подобные разрешения для устройств на основе ACL и разрешения polkit для локальных сессий.}}<br />
<br />
== Родные системные файлы ==<br />
<br />
{{Note|Возможно, вам придется создать эти файлы. Установите для всех файлов права доступа 644 и владельца root:root.}}<br />
<br />
=== Имя компьютера (hostname) ===<br />
<br />
Имя компьютера настраивается в файле {{ic|/etc/hostname}}. Этот файл не должен содержать системный домен (если таковой имеется). Для установки имени компьютера выполните:<br />
<br />
# hostnamectl set-hostname '''myhostname'''<br />
<br />
Обратитесь к руководствам {{ic|man 5 hostname}} и {{ic|man hostnamectl}} для получения более подробной информации.<br />
<br />
Вот примерный файл:<br />
<br />
{{hc|/etc/hostname|<br />
myhostname<br />
}}<br />
<br />
=== Локаль ===<br />
<br />
Системная локаль по умолчанию настраивается в конфигурационном файле {{ic|/etc/locale.conf}}. Для установки локали по умолчанию выполните:<br />
<br />
# localectl set-locale LANG="ru_RU.UTF-8"<br />
<br />
{{Note|Перед установкой локали по умолчанию вам сперва необходимо сделать локали доступными системе, раскомментировав их в файле {{ic|/etc/locale.gen}} и затем выполнив команду {{ic|locale-gen}} от суперпользователя root. Локаль, установленная командой {{ic|localectl}}, должна быть одной из '''раскомментированных''' локалей в файле {{ic|/etc/locale.gen}}.}}<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 localectl}} и {{ic|man 5 locale.conf}}.<br />
* Дальнейшая информация содержится в статье [[Locale]].<br />
<br />
Вот примерный файл:<br />
<br />
{{hc|/etc/locale.conf|2=<br />
LANG=ru_RU.utf8}}<br />
<br />
=== Консоль и раскладка клавиатуры ===<br />
<br />
Файл {{ic|/etc/vconsole.conf}} устанавливает настройки виртуальной консоли (раскладку клавиатуры и консольный шрифт).<br />
<br />
{{hc|/etc/vconsole.conf|2=<br />
KEYMAP=ru<br />
FONT=cyr-sun16<br />
FONT_MAP=}}<br />
<br />
{{Note|С версии {{Pkg|systemd}}-194 используются шрифт ядра и раскладку по умолчанию (т.е. американскую английскую). Нет более необходимости (для тех, кто использует американскую английскую раскладку) настраивать в конфигурационном файле строки {{ic|1=KEYMAP=}} и {{ic|1=FONT=}}, их можно оставить пустыми.}}<br />
<br />
Другой способ настройки раскладки клавиатуры в консоли состоит в использовании команды:<br />
<br />
# localectl set-keymap ru<br />
<br />
Преимущество такого подхода - в том, что он также установит указанную раскладку клавиатуры и для X11.<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 localectl}} и {{ic|man 5 vconsole.conf}}.<br />
* Для получения детальной информации обратитесь к разделам [[Fonts#Console_fonts|консольные шрифты (англ.)]] и [[KEYMAP|раскладка клавиатуры (англ.)]].<br />
<br />
=== Временная зона ===<br />
<br />
Временная зона настраивается путем создания соответствующей символической ссылки {{ic|/etc/localtime}} на файл временной зоны в директории {{ic|/usr/share/zoneinfo/}}. Чтобы сделать это автоматически, выполните команду:<br />
<br />
# timedatectl set-timezone Europe/Moscow<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 timedatectl}} и {{ic|man 5 localtime}} и {{ic|man 7 archlinux}}.<br />
<br />
{{Note|Прежний конфигурационный файл {{ic|/etc/timezone}} объявлен устаревшим с выходом {{pkg|systemd}}-190 и должен быть удален.}}<br />
<br />
Альтернативный метод - создание символической ссылки вручную:<br />
<!-- использовать относительную символическую ссылку! --><br />
# ln -sf ../usr/share/zoneinfo/Europe/Moscow /etc/localtime<br />
<br />
=== Аппаратные часы ===<br />
<br />
Systemd будет использовать UTC для аппаратных часов по умолчанию.<br />
{{Tip|Обычно рекомендуется запускать [[NTP|демон Network Time Protocol]] для поддержания синхронизации аппаратных часов с системным временем.}}<br />
<br />
==== Аппаратные часы по localtime ====<br />
<br />
Если вы собираетесь выставить аппаратные часы по localtime (местному времени, что '''КАТЕГОРИЧЕСКИ НЕ РЕКОМЕНДУЕТСЯ'''), выполните команду:<br />
<br />
# timedatectl set-local-rtc true<br />
<br />
Если же захотите вернуть ваши аппаратные часы к использованию временного формата UTC, выполните:<br />
<br />
# timedatectl set-local-rtc false<br />
<br />
Помните, что настройка перехода на зимнее/летнее время - неблагодарное занятие. Если переход на зимнее/летнее время происходит в тот момент, когда ваш компьютер выключен, то при следующей загрузке ваши часы будут показывать ошибочное время ([http://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html здесь об этом чуть подробнее (англ.)]). Последние версии ядра устанавливают системное время из RTC (часов реального времени) непосредственно во время загрузки без использования {{ic|hwclock}}, при этом ядро всегда считает, что RTC выставлено по UTC. Это означает, что если RTC выставлено по местному времени (local time), системное время будет изначально установлено ошибочно и затем корректироваться вскоре после этого при каждой загрузке. Это является причиной некоторых досадных багов (идущие назад часы редко являются нужной вещью).<br />
<br />
Причиной, позволяющей RTC быть выставленными по местному времени, является двойная загрузка системы с Windows, ([http://blogs.msdn.com/b/oldnewthing/archive/2004/09/02/224672.aspx которая использует localtime (англ.)]). Windows воспринимает RTC, выставленные по UTC при помощи простого [[Time#UTC in Windows|исправления реестра (англ.)]]. Если вы столкнетесь с подобными проблемами при двойной загрузке с Windows, вы можете установить аппаратные часы на использование местного времени. <br />
<br />
Если вы настроите Windows на использование UTC, также не забудьте отключить функцию "Обновление времени по Интернету" ("Internet Time Update"), иначе для Windows возникнет проблема с аппаратными часами, поскольку система будет пытаться синхронизировать их с временем через Интернет. Вместо этого следует оставить время в формате RTC и синхронизовать через Интернет в Linux посредством демона [[NTP]], как это предлагалось выше.<br />
<br />
* За дальнейшей информацией обратитесь к статье [[Time]].<br />
<br />
=== Подгружаемые модули ядра ===<br />
<br />
Сегодня все необходимые модули для загрузки подгружаются автоматически с помощью [[Udev]], так что, если вам не надо (или же вы не должны) использовать какой-нибудь модуль не из дерева ядра , нет необходимости дополнительно помещать какие-либо модули в какой-то файл конфигурации загрузки. Тем не менее, бывают случаи, когда вы можете подгрузить дополнительный модуль в процессе загрузки или поместить какой-то модуль в черный список, чтобы ваш компьютер работал правильно.<br />
<br />
==== Дополнительно подгружаемые при загрузке модули ====<br />
<br />
Необходимые для загрузки дополнительные модули оформляются в статический список файлов в директории {{ic|/etc/modules-load.d/}}. Каждый из конфигурационных файлов имеет наименование вида {{ic|/etc/modules-load.d/<program>.conf}} (где <program> - имя подгружаемого модуля) и содержит список имен подгружаемых модулей ядра, каждое из которых начинается с новой строки. При этом игнорируются как пустые строки конфигурационных файлов, так и строки, у которых первым символом, отличным о пробела, является символ {{ic|#}} и {{ic|;}}. Например:<br />
<br />
{{hc|/etc/modules-load.d/virtio-net.conf|<br />
# Load virtio-net.ko at boot<br />
virtio-net}}<br />
<br />
Более подробная информация содержится в руководстве {{ic|man 5 modules-load.d}}.<br />
<br />
==== Черный список ====<br />
<br />
Добавление модулей в черный список работает также, как и в случае с {{Pkg|initscripts}}, поскольку в действительности эта функция выполняется таким инструментом, как {{Pkg|kmod}}. Обратитесь к разделу [[Kernel_modules#Blacklisting|Module Blacklisting]] за более подробной информацией.<br />
<br />
=== Монтирование файловых систем ===<br />
<br />
Установка по умолчанию автоматически проверяет файловые системы командой fsck и монтирует файловые системы перед запуском тех сервисов, котрым необходимо иметь эти системы примонтированными. Например, systemd позволяет в автоматическом режиме добиться, что удаленные файловые системы наподобие [[NFS]] и [[Samba]] подключаются после поднятия сети. Поэтому монтирование как локальных, так и удаленных файловых систем, прописанных в {{ic|/etc/fstab}} должно работать "из коробки".<br />
<br />
Обратитесь к руководству {{ic|man 5 systemd.mount}} для получения более подробной информации.<br />
<br />
==== Автомонтирование ====<br />
<br />
* Если ваш раздел {{ic|/home}} занимает большой объем, лучшим вариантом было бы позволить сервисам не зависеть от подключения {{ic|/home}} и запускать данные сервисы, когда {{ic|/home}} еще подвергается проверке при загрузке системы. Добиться такого результата можно добавлением следующих параметров в запись файла {{ic|/etc/fstab}}, касающуюся раздела {{ic|/home}}:<br />
<br />
noauto,x-systemd.automount<br />
<br />
Такие параметры вызовут команду fsck и примонтируют {{ic|/home}} при первом обращении к данному разделу, и ядро будет буферизовать все файлы доступа к {{ic|/home}} до готовности данного раздела.<br />
<br />
* То же самое применимо и к удаленным файловым системам. Если вы хотите, чтобы монтирование данных систем происходило только по мере доступа к ним, вы можете использовать параметр {{ic|1=x-systemd.device-timeout=#}} в файле {{ic|/etc/fstab}} для определения таймаута в том случае, кода сетевые ресурсы оказываются недоступны.<br />
<br />
* В случае использования зашифрованных файловых систем с ключами доступа, вам также Iследует добавить параметр {{ic|noauto}} в соответствующие записи файла {{ic|/etc/crypttab}}. systemd не будет подключать зашифрованные устройства при загрузке, но, вместо этого, дождется реального обращения к ним и автоматически откроет к ним доступ с использованием определенных ключей перед тем, как они будут примонтированы. Это сэкономит несколько секунд при загрузке системы, например, в случае использования зашифрованного устройства RAID, потому что systemd не будет дожидаться от устройства, когда оно станет доступным. Например:<br />
<br />
{{hc|/etc/crypttab|<br />
data /dev/md0 /root/key noauto}}<br />
<br />
=== LVM ===<br />
<br />
Если у вас имеются тома LVM, не активированные посредством [[Mkinitcpio|initramfs]], включите сервис {{ic|lvm.service}} (предоставляемый пакетом {{pkg|lvm2}}):<br />
<br />
# systemctl enable lvm<br />
<br />
Точно так же, если у вас LVM на устройствах с шифрованием, монтируемым позже в процессе загрузки (например, из {{ic|/etc/crypttab}}), вам необходимо включить сервис {{ic|lvm-on-crypt.service}} (также предоставляемый пакетом {{pkg|lvm2}}):<br />
<br />
# systemctl enable lvm-on-crypt<br />
<br />
=== Управлением питанием ACPI ===<br />
<br />
Systemd обрабатывает некоторые события, связанные с [http://кru.wikipedia.org/wiki/ACPI ACPI], что настраивается при помощи параметров в конфигурационном файле {{ic|/etc/systemd/logind.conf}}:<br />
<br />
* {{ic|HandlePowerKey}}: определяет действия системы при нажатии кнопки питания (вкл./выкл.).<br />
* {{ic|HandleSuspendKey}}: определяет действия системы при нажатии кнопки спящего режима.<br />
* {{ic|HandleHibernateKey}}: определяет действия системы при нажатии кнопки ждущего режимаs.<br />
* {{ic|HandleLidSwitch}}: определяет действия системы при закрытии крышки компьютера.<br />
<br />
Для соответствующих действий могут использоваться значения {{ic|ignore}} (пропустить), {{ic|poweroff}} (отключить питание), {{ic|reboot}} (перезагрузить), {{ic|halt}} (выключить), {{ic|suspend}} (включить спящий режим), {{ic|hibernate}} (включить ждущий режим) или {{ic|kexec}} (системный вызов позволяющий оперативно переключиться в другое ядро).<br />
<br />
Если данные параметры не определены, по умолчанию systemd будет использовать следующие: {{ic|1=HandlePowerKey=poweroff}}, {{ic|1=HandleSuspendKey=suspend}}, {{ic|1=HandleHibernateKey=hibernate}}, и {{ic|1=HandleLidSwitch=suspend}}.<br />
<br />
В системах без графического интерфейса или использующих простые оконные менеджеры наподобие like [[i3]] или [[awesome]], так можно заменить демон [[acpid]], который обычно используется для реагирования на данные события ACPI.<br />
<br />
В текущей версии systemd параметры {{ic|Handle}} будут применены ко всей системе, если только они не "подавляются (временно отключены) другой программой, такой, как менеджер питания данного окружения рабочего стола. Если эти ограничений нет, вы можете столкнуться с ситуацией, когда systemd приводит вашу систему в спящий режим, а затем, когда система пробуждается менеджером управлением питания, снова "усыпляет" ее.<br />
<br />
{{Warning|В настоящее время менеджеры управления питанием в новейших версиях сред [[KDE]] и [[GNOME]] являются единственными, которые использюет такие команды "подавления". До тех пор, пока их не будут применять другие менеджеры, вам надо выставить в параметрах {{ic|Handle}} значение {{ic|ignore}}, если вы хотите, чтобы события ACPI обрабатывались в случае использования [[Xfce]], [[acpid]] или других программ. Но на подходе новые версии, которые включат данную функциональность.}}<br />
<br />
{{Note|Systemd также может использовать для перевода системы в спящий/ждущий режим другие движки (такие, как [[Uswsusp]] или [[TuxOnIce]]), в дополнение к движку ''ядра''.}}<br />
<br />
==== Хуки спящего режима ====<br />
<br />
Systemd в своих командах {{ic|systemctl suspend}} или {{ic|systemctl hibernate}} не использует [[pm-utils]] для "усыпления" машины; хуки [[pm-utils]], включая любые [[Pm-utils#Creating_your_own_hooks|пользовательские хуки]] не будут работать. Тем не менее, systemd предоставляет схожий механизм запуска пользовательских скриптов для данных событий. Systemd запускает все исполняемые файлы в директории {{ic|/usr/lib/systemd/system-sleep/}}, передавая каждому из них два аргумента:<br />
<br />
* Аргумент 1: или {{ic|pre}}, или {{ic|post}}, в зависимости от которых машина либо "уснет", либо будет "пробуждена";<br />
* Аргумент 2: или {{ic|suspend}}, или {{ic|hibernate}}, в зависимости от того, что было вызвано.<br />
<br />
В отличие от [[pm-utils]], systemd запустит данные скрипты одновременно, а не один после другого.<br />
<br />
Вывод любого пользовательского скрипта будет записан сервисом {{ic|systemd-suspend.service}} или {{ic|systemd-hibernate.service}}. Вы вы можете увидеть данный выход в [[#Журнал systemd|журнале]] systemd:<br />
<br />
# journalctl -b -u systemd-suspend<br />
<br />
Обратите внимание, что вместо использования скриптов вы также можете использовать специальные целевые юниты - {{ic|sleep.target}}, {{ic|suspend.target}} или {{ic|hibernate.target}} для того, чтобы подключить к другим юнитам возможности перехода в спящий режима.<br />
<br />
Пример пример пользовательского скрипта по переходу в спящий режим:<br />
<br />
{{hc|/usr/lib/systemd/system-sleep/example.sh|<br />
#!/bin/sh<br />
case $1/$2 in<br />
pre/*)<br />
echo "Going to $2..."<br />
;;<br />
post/*)<br />
echo "Waking up from $2..."<br />
;;<br />
esac}}<br />
<br />
Обратитесь к руководствам {{ic|man 7 systemd.special}} и {{ic|man 8 systemd-sleep}} для получения дальнейшей информации.<br />
<br />
=== Временные файлы ===<br />
<br />
Systemd-tmpfiles использует конфигурационные файлы в директориях {{ic|/usr/lib/tmpfiles.d/}} и {{ic|/etc/tmpfiles.d/}} для определения действий с временными файлами и директориями (создание, очистка и удаление их), обычно расположенные в {{ic|/run}} or {{ic|/tmp}}. Каждый файл с настройками имеет название вида {{ic|/etc/tmpfiles.d/<program>.conf}}. Данные конфигурационные файлы имеют приоритет по сравнению с любыми файлами с таким же названием, расположенными в директории {{ic|/usr/lib/tmpfiles.d/}}.<br />
<br />
Временные файлы tmpfiles обычно поставляются вместе с сервис-файлами для создания директорийк. которые, как ожидается, будут использоваться определенными демонами. Например, демон [[Samba]] предполагает наличие директории {{ic|/var/run/samba}} с соответствующими правами доступа. В данном случае tmpfile выглядит следующим образом:<br />
<br />
{{hc|/usr/lib/tmpfiles.d/samba.conf|<br />
D /var/run/samba 0755 root root}}<br />
<br />
Тем не менее, tmpfiles также могут использоваться для записи значений в определенные файлы во врем загрузки. К примеру, если вы используете {{ic|/etc/rc.local}} для того, чтобы отключить пробуждение системы USB-устройствами, при помощи команды {{ic|echo USBE > /proc/acpi/wakeup}}, вы можете вместо этого использовать следующий tmpfile:<br />
<br />
{{hc|/etc/tmpfiles.d/disable-usb-wake.conf|<br />
w /proc/acpi/wakeup - - - - USBE}}<br />
<br />
Метод с использованием tmpfiles в данном случае рекомендуется, поскольку systemd в действительности не поддерживает {{ic|/etc/rc.local}}.<br />
<br />
Обратитесь к руководству {{ic|man 5 tmpfiles.d}} за более подробной информацией.<br />
<br />
=== Юнит ===<br />
<br />
Юнит (англ. unit) - конфигурационный файл, содержащий информацию о сервисе (службе), сокете, устройстве, точке монирования/автомонирования, файле подкачке или разделе, определяемом для загрузки уровне запуска, пути в файловой системе или таймере, которые контролируются и управляются при помощи systemd. Синтаксис юнитов навеян спецификацией .desktop-файлов (XDG Desktop Entry Specification), которая, в свою очередь, вдохновлялась .ini-файлами от Microsoft Windows. <br />
<br />
Обратитесь к руководству {{ic|man 5 systemd.unit}} для получения дальнейшей информации.<br />
<br />
== Переход от initscripts к использованию systemd ==<br />
<br />
=== Эмуляция initscripts ===<br />
<br />
Интеграция с классической конфигурацией Arch'а обеспечивается пакетом {{Pkg|initscripts}}. В том случае, если {{Pkg|initscripts}} установлен параллельно с systemd и система загружена с использованием systemd, systemd будет выполнять следующую последовательность действий:<br />
<br />
# # Проводить синтаксический разбор массива {{ic|DAEMONS}} в файле {{ic|/etc/rc.conf}} и запускать при загрузке все находящиеся там демоны (см. ниже)<br />
# Выполнять при загрузке {{ic|/etc/rc.local}}<br />
# Выполнять при завершении работы системы {{ic|/etc/rc.local.shutdown}}<br />
<br />
Эмуляция initscripts рассматривается как просто переходная мера для легкой миграции пользователей на systemd и '''в конечном итоге будет отброшена'''. Система с "родной" systemd не зависит от централизованной конфигурации в {{ic|rc.conf}}, поэтому рекомендуется использовать [[#Родные системные файлы|родные конфигурационные файлы systemd]], которые имеют приоритет над настройками из {{ic|/etc/rc.conf}}.<br />
<br />
{{Note|Рекомендуемый путь по замене {{ic|/etc/rc.local}} состоит в написании пользовательского сервис-файла для всего того, что вы хотите запускать при загрузке системы. Обратитесь к соответствующему [[#Написание_пользовательского_.service_файла|разделу]] данной статьи.}}<br />
<br />
{{Note|Если вы отключали использование сочетания клавиш для перезагрузки системы {{keypress|Ctrl+Alt+Del}} в файле {{ic|/etc/inittab}}, теперь вам надо заново сделать это для systemd командой {{ic|systemctl mask ctrl-alt-del.target}}, выполняемой от суперпользователя root.}}<br />
<br />
==== Отказ от массива DAEMONS ====<br />
<br />
Для "чистой" установки systemd, вы можете полностью удалить файл {{ic|/etc/rc.conf}} и включать сервисы только посредством systemd. Для каждого сервиса с именем {{ic|<service_name>}} в массиве {{ic|DAEMONS}} из файла {{ic|/etc/rc.conf}} выполните команду:<br />
<br />
# systemctl enable <service_name><br />
<br />
{{Tip|Для получения списка обычно используемых демонов с их эквивалентами в initscripts и systemd, обратитесь к [[Daemons List|данной таблице]].}}<br />
<br />
Если сервис-файл {{ic|<service_name>.service}} отсутствует:<br />
<br />
* сервис-файл может быть недоступен для systemd. В этом случае вам нужно сохранить конфигурационный файл {{ic|rc.conf}} для запуска этих сервисов во время загрузки системы.<br />
* Systemd может использовать для сервисов другие имена, например, {{ic|cronie.service}} заменяет демон {{ic|crond}}; {{ic|alsa-store.service}} и {{ic|alsa-restore.service}} заменяют демон {{ic|alsa}}. Другой важный пример - демон {{ic|network}}, которого сменил целый набор сервис-файлов (обратитесь к статье [[Configuring Network]] для получения дальнейшей информации.)<br />
<br />
{{Tip|Вы можете заглянуть вовнутрь пакета, содержащего стартовые скрипты демона, чтобы узнать имена его сервис-файла. К примеру:<br />
$ pacman -Ql cronie<br />
[...]<br />
cronie /etc/rc.d/crond #Демон initscript, указываемый в массиве {{ic|DAEMONS}} (не используется при "чистой" настройке systemd)<br />
[...]<br />
cronie /usr/lib/systemd/system/cronie.service #Соответствующий сервис systemd<br />
[...]<br />
}}<br />
<br />
* Наконец, пользователю не нужно включать некоторые сервисы явным образом. Например, {{ic|dbus.service}} будет включен автоматическики при установке {{ic|dbus-core}}. {{ic|alsa-store.service}} и {{ic|alsa-restore.service}} также включены systemd автоматически. Проверьте список доступных сервисов и их состояние при помощи команды {{ic|systemctl}}, например: {{ic|systemctl status <service_name>}} (где <service_name> - имя сервиса).<br />
<br />
=== Сравнительная таблица устаревшей и "родной" конфигураций ===<br />
<br />
{{Warning|Данный раздел оставлен в русской версии временно, до полной миграции пользователей на использование "чистого" systemd.}}<br />
<br />
{| class="wikitable"<br />
|-<br />
! scope="col"| Настройка<br />
! scope="col"| Конфигурационный файл (файлы)<br />
! scope="col"| Устаревшая секция [https://projects.archlinux.org/initscripts.git/tree/rc.conf?id=97f0cd6751e8d22c14d7492cdc2186cf41157ba6 rc.conf]<br />
|-<br />
| align="center"|Имя компьютера (Hostname)<br />
| align="left"|{{ic|/etc/hostname}}<br />
{{ic|/etc/hosts}}<br />
| align="center"|{{ic|NETWORKING}}<br />
|-<br />
| align="center"|Консоль и раскладка клавиатуры<br />
| align="left"|{{ic|/etc/vconsole.conf}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Локаль<br />
| align="left"|{{ic|/etc/locale.conf}}<br />
{{ic|/etc/locale.gen}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Временная зона<br />
| align="left"|{{ic|/etc/localtime}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Аппаратные часы<br />
| align="left"|{{ic|/etc/adjtime}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Модули ядра<br />
| align="left"|{{ic|/etc/modules-load.d/}}<br />
| align="center"|{{ic|HARDWARE}}<br />
|}<br />
<br />
=== Эмуляция /etc/rc.local ===<br />
<br />
{{Warning|Данный раздел оставлен в русской версии временно, до полной миграции пользователей на использование "чистого" systemd.}}<br />
<br />
Если вы хотите при использовании systemd сохранить простоту {{ic|/etc/rc.local}} , вам нужно создать следующий сервис-файл и включить его. Просто добавьте строки {{ic|1=ExecStart=}} для тех команд, которые вы хотите запустить. Если же вам в данном случае требуется более сложная функциональность (например, циклы с {{ic|for}}), то вы можете создать скрипт Bash и выполнять его из сервис-файла. Удалите {{ic|1=ExecStart=/bin/true}}, если вы здесь действительно добавляете команду.<br />
<br />
{{hc|/etc/systemd/system/rc-local.service|<nowiki><br />
[Unit]<br />
Description=/etc/rc.local compatibility<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/bin/true<br />
RemainAfterExit=yes<br />
<br />
[Install]<br />
WantedBy=multi-user.target<br />
</nowiki>}}<br />
<br />
== Основы использования systemctl ==<br />
<br />
Главная команда для наблюдения и контроля за состоянием systemd - команда {{ic|systemctl}}. Некоторые из вариантов ее использования связаны с изучением состояния системы и управлением сервисами. Обратитесь к странцам руководства {{ic|man 1 systemctl}} для получения более детальной информации.<br />
<br />
{{Tip|Вы можете использовать приведенные ниже команды {{ic|systemctl}} с ключом {{ic|-H <user>@<host>}} для того, чтобы контролировать systemd на удаленной машине. В этом случае для соединения с удаленным процессом systemd будет использовать [[SSH]].}}<br />
<br />
{{Note|{{ic|systemadm}} - официальная графическая оболочка для {{ic|systemctl}}. Она доступна в виде пакета {{AUR|systemd-ui-git}} из [[AUR]].}}<br />
<br />
=== Анализ состояния системы ===<br />
<br />
Список запущенных юнитов:<br />
<br />
$ systemctl<br />
<br />
или:<br />
<br />
$ systemctl list-units<br />
<br />
Список юнитов, попытка запуска которых завершилась неудачей:<br />
<br />
$ systemctl --failed<br />
<br />
Доступные юниты можно посмотреть в директориях {{ic|/usr/lib/systemd/system/}} и {{ic|/etc/systemd/system/}} (последняя директория имеет приоритет). Вы можете увидеть список установленных юнитов командой:<br />
<br />
$ systemctl list-unit-files<br />
<br />
=== Использование юнитов ===<br />
<br />
Юниты могут быть сервисами ({{ic|.service}}), точками монтирования ({{ic|.mount}}) или сокетами ({{ic|.sockets}}). При использовании команды {{ic|systemctl}} необходимо всегда указывать полное имя файла, включая расширение. Однако, есть несколько сокращений при определении юнита следующими командами{{ic|systemctl}}:<br />
<br />
* Ели вы не указали суффикс, systemctl предполагает, что это {{ic|.service}}. Например, {{ic|netcfg}} и {{ic|netcfg.service}} будут трактоваться одинаково.<br />
* Точки монтирования будут автоматически преобразованы в соответствующий юнит {{ic|.mount}}. Например, указание {{ic|/home}} равнозначно {{ic|home.mount}}.<br />
* Аналогично точкам монтирования, имена устройств автоматически преобразуются в соответствующий юнит {{ic|.device}}, поэтому указание {{ic|/dev/sda2}} полностью соответствует юниту {{ic|dev-sda2.device}}.<br />
<br />
Обратитесь к руководству {{ic|man systemd.unit}} для получения детальной информации.<br />
<br />
{{Note|При использовании юнитов следует обращать внимание на регистр букв в наименовании сервис-файлов: так, необходимо использовать ''NetworkManager.'''service''' '' (запомните употребление в данном названии букв в верхнем регистре) для включения сервиса NetworkManager'а, в противном случае вы получите сообщение об ошибке и сервис во время загрузки системы не запустится.}}<br />
<br />
Незамедлительно запустить юнит:<br />
<br />
# systemctl start <unit><br />
<br />
Незамедлительно остановить юнит:<br />
<br />
# systemctl stop <unit><br />
<br />
Перезапустить юнит:<br />
<br />
# systemctl restart <unit><br />
<br />
Запросить у юнита перезагрузку его настроек:<br />
<br />
# systemctl reload <unit><br />
<br />
Показать статус юнита, а также запущен он или нет:<br />
<br />
$ systemctl status <unit><br />
<br />
Проверить включение юнита (т.е. разрешен ли юниту запуск при загрузке системы):<br />
<br />
$ systemctl is-enabled <unit><br />
<br />
Включить юнит (разрешить юниту запуск при загрузке системы):<br />
<br />
# systemctl enable <unit><br />
<br />
{{Note| Если сервис-файлы не имеют раздела {{ic|Install}}, это обычно означает, что данные сервисы вызываются автоматически другими сервисами. Но если вам требуется установить их вручную, используйте следующую команду, заменив {{ic|foo}} именем вашего сервиса.<br />
# ln -s /usr/lib/systemd/system/''foo''.service /etc/systemd/system/graphical.target.wants/<br />
}}<br />
<br />
Выключить юнит (запретить юниту запуск при загрузке системы):<br />
<br />
# systemctl disable <unit>}}<br />
<br />
Показать страницу помощи для юнита (необходима поддержка этой функции в указанном файле юнита):<br />
<br />
$ systemctl help <unit><br />
<br />
=== Управление питанием ===<br />
<br />
Если у вас локальная пользовательская сессия {{ic|systemd-logind}} и нет других активных сессий, приведенные ниже команды сработают и без привилегий суперпользователя root. В противном случае (например, вследствие того, что пользователь залогинился в tty), systemd автоматически запросит у вас пароль root.<br />
<br />
Завершить работу и перезагрузить систему:<br />
<br />
$ systemctl reboot<br />
<br />
Завершить работу и выключить компьютер (с отключением питания):<br />
<br />
$ systemctl poweroff<br />
<br />
Завершить работу и остановить систему:<br />
<br />
$ systemctl halt<br />
<br />
Перевести систему в спящий режим:<br />
<br />
$ systemctl suspend<br />
<br />
Перевести систему в ждущий режим:<br />
<br />
$ systemctl hibernate<br />
<br />
== Запуск окружения рабочего стола из systemd ==<br />
<br />
Чтобы включить графический вход в систему, запустите выбранный вами демон [[Display Manager (Русский)|экранного менеджера]] (например, [[KDM]]). В настоящий момент доступны сервис-файлы для [[GDM]], [[KDM]], [[SLiM]], [[XDM]], [[LXDM]] и [[LightDM]].<br />
<br />
# systemctl enable kdm<br />
<br />
Эта команда должна работать "из коробки". Если вдруг она не сработала, то, возможно, у вас {{ic|default.target}} установлен вручную или остался с прежней установки:<br />
<br />
{{hc|# ls -l /etc/systemd/system/default.target|<br />
/etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target}}<br />
<br />
Просто удалите символическую ссылку и systemd будет использовать целевой юнит по умолчанию - {{ic|default.target}} (т.е. {{ic|graphical.target}}).<br />
<br />
# rm /etc/systemd/system/default.target<br />
<br />
=== Использование systemd-logind ===<br />
<br />
{{Note|С 30.10.2012 [[ConsoleKit]] был [http://archlinux.org.ru/node/352/ заменен на systemd-logind] как механизм входа в окружение рабочего стола по умолчанию.}}<br />
<br />
Для того, чтобы проверить статус вашей пользовательской сессии, вы можете использовать команду {{ic|loginctl}}. Все действия [[PolicyKit]] наподобие перевода системы в спящий режим или монтирования внешних носителей с помощью [[Udisks]] должны работать автоматически.<br />
<br />
$ loginctl show-session $XDG_SESSION_ID<br />
<br />
== Написание пользовательского .service файла ==<br />
<br />
=== Обработка зависимостей ===<br />
<br />
В случае использования systemd зависимости могут быть разрешены правильным построением файлов юнитов. ,Наиболее частый случай -- когда юниту {{ic|A}} требуется, чтобы юнит {{ic|B}} был запущен перед тем, как запустится сам юнит {{ic|A}}. В этом случае добавьте строки {{ic|1=Requires=B}} и {{ic|1=After=B}} в секцию {{ic|[Unit]}} сервис-файла юнита {{ic|A}}. Если подобная зависимость не является обязательной, добавьте соответственно взамен указанных выше строки {{ic|1=Wants=B}} и {{ic|1=After=B}}. Обратите внимание, что {{ic|1=Wants=}} и {{ic|1=Requires=}} не подразумевают {{ic|1=After=}}, что означает, что если {{ic|1=After=}} не определено, два юнита будут запущены параллельно друг другу.<br />
<br />
Обычно зависимости указываются в сервис-файлах, а не в целевых юнитах. Например, {{ic|network.target}} потребуется любому сервису, который связан с настройкой ваших сетевых интерфейсов, поэтому в любом случае определите загрузку вашего пользовательского юнита после запуска {{ic|network.target}}.<br />
<br />
=== Тип ===<br />
<br />
Существует несколько различных типов запуска служб, которые надо иметь в виду при написании пользовательского сервис-файла. Тип запуска определяется параметром {{ic|1=Type=}} в секции {{ic|[Service]}}. Обратитесь к руководству {{ic|man systemd.service}} для получения более детального объяснения.<br />
<br />
* {{ic|1=Type=simple}}: systemd предполагает, что сервис будет запущен незамедлительно. Процесс при этом не должен форкнуться. Не используйте этот тип, если другим сервисы зависят от очередности при запуске данного сервиса, за исключением активации сокета.<br />
* {{ic|1=Type=forking}}: systemd предполагает, что сервис запускается однократно, процесс форкается и родительский процесс завершается. Используйте данный тип для запуска классических демонов за исключением тех случаев, когда, как вам известно, в таком поведении процесса нет необходимости. Вам следует также определить {{ic|1=PIDFile=}}, чтобы systemd могла отслеживать основной процесс.<br />
* {{ic|1=Type=oneshot}}: Полезен для скриптов, которые выполняют одну работу, а потом завершаются. Вам может понадобиться также установить параметр {{ic|1=RemainAfterExit=}}, чтобы systemd по-прежнему считала процесс активным, даже после его завершения<br />
* {{ic|1=Type=notify}}: Идентичен параметру {{ic|1=Type=simple}}, но с той оговоркой, что демон пошлет systemd сигнал о своей готовности. Эталонная реализация данного уведомления обеспечивается библиотекой {{ic|libsystemd-daemon.so}}.<br />
* {{ic|1=Type=dbus}}: Сервис считается находящимся в состоянии готовности, когда определенное {{ic|BusName}} появляется в системной шине DBus.<br />
<br />
=== Замена предоставленных пакетами файлов юнитов ===<br />
<br />
Файлы юнитов в директории {{ic|/etc/systemd/system/}} имеют приоритет над такими же файлами в директории {{ic|/usr/lib/systemd/system/}}.<br />
Для создания собственной версии юнита (который не будет затерт при обновлении), скопируйте старый юнит из директории {{ic|/usr/lib/}} в директорию {{ic|/etc/}} и внесите в эту копию свои изменения. Альтернативным вариантом является использование {{ic|.include}} для парсинга существующего сервис-файла и затем переопределения или добавления новых опций. Например, если вы просто хотите добавить в сервис-файл дополнительную зависимость, вы можете использовать такую команду в юните:<br />
<br />
{{hc|/etc/systemd/system/<service-name>.service|2=<br />
.include /usr/lib/systemd/system/<service-name>.service<br />
<br />
[Unit]<br />
Requires=<new dependency><br />
After=<new dependency>}}<br />
<br />
Затем выполните следующие команды для того, чтобы изменения вступили в силу:<br />
<br />
# systemctl reenable <unit><br />
# systemctl restart <unit><br />
<br />
{{Tip|Вы можете использовать команду {{ic|systemd-delta}}, чтобы увидеть, какие файлы юнитов были переопределены и что в точности было изменено.}}<br />
<br />
=== Подсветка синтаксиса файлов юнитов в Vim ===<br />
<br />
подсветка синтаксиса файлов юнитов для systemd в редакторе [[Vim]] может быть осуществлена путем установки пакета {{AUR|vim-systemd}} из [[Arch User Repository|AUR]].<br />
<br />
== Уровни запуска/цели ==<br />
<br />
Уровни запуска (по-английски уровень запуска - runlevel) для systemd являются устаревшей концепцией. Systemd использует ''цели'' (англ. target), которые выполняют ту же задачу, что и уровни запуска, но действуют немного по-другому. Каждая ''цель'' поименована (т.е. имеет собственное имя, а не номер) и, как предполагается, предназначена для конкретных задач; возможно иметь в одно и то же время активными несколько таких целей. Некоторые ''цели'' реализованы так, что наследуют все сервисы других ''целей'' и добавляют к ним свои сервисы. В systemd имеются также ''цели'', которые имитируют общие уровни запуска SystemVinit, поэтому вы можете переключаться между целевыми юнитами с использованием привычной команды {{ic|telinit RUNLEVEL}}. <br />
<br />
=== Получение информации о текущем уровне запуска/цели ===<br />
<br />
При использовании systemd для этого предназначена следующая команда (заменяющая {{ic|runlevel}}):<br />
<br />
$ systemctl list-units --type=target<br />
<br />
=== Создание пользовательской цели ===<br />
<br />
Уровни загрузки, по которым расписаны конкретные задачи на установке дистрибутива Fedora по умолчанию - 0, 1, 3, 5 и 6; есть маппинг 1:1 с помощью конкретной цели systemd. К сожалению, не существует хорошего способа сделать то же самое для определяемых пользователем уровней, таких, как 2 и 4. Использование их предполагает, что вы создаете новый именованный '' целевой юнит''systemd наподобие {{ic|/etc/systemd/system/<your target>}}, который берет за основу один из существующих уровней запуска (взгляните, например, на {{ic|/usr/lib/systemd/system/graphical.target}}), создаете также директорию {{ic|/etc/systemd/system/<your target>.wants}} и затем символические ссылки на те дополнительные сервисы из директории {{ic|/usr/lib/systemd/system/}}, которые вы хотите включить при загрузке.<br />
<br />
== Таблица уровней запуска и их аналогов в Systemd ==<br />
<br />
{| class="wikitable" border="1" cellpadding="5" cellspacing="0"<br />
! Уровнень запуска SysV !! systemd Target !! Примечание<br />
|-<br />
| 0 || runlevel0.target, poweroff.target || Выключить систему.<br />
|-<br />
| 1, s, single || runlevel1.target, rescue.target || Однопользовательский уровень запуска.<br />
|-<br />
| 2, 4 || runlevel2.target, runlevel4.target, multi-user.target || Уровень запуска, определенный пользователем/специфичный для узла. По умолчанию соответствует уровню запуска 3.<br />
|-<br />
| 3 || runlevel3.target, multi-user.target || Многопользовательский режим без графики. Пользователи, как правило, входят с помощью множества консолей или через сеть.<br />
|-<br />
| 5 || runlevel5.target, graphical.target || Многопользовательский режим с графикой. Обычно эквивалентен запуску всех сервисов уровня 3 и графическому менеджеру входа.<br />
|-<br />
| 6 || runlevel6.target, reboot.target || Перезагрузка.<br />
|-<br />
| emergency || emergency.target || Аварийная оболочка.<br />
|-<br />
|}<br />
<br />
=== Изменение текущей цели ===<br />
<br />
В systemd цели доступны посредством " целевых юнитов". Вы можете изменить их командой:<br />
<br />
# systemctl isolate graphical.target<br />
<br />
Данная команда изменит только лишь текущую цель и не повлияет на следующую загрузку системы. Она соответствует командам наподобие {{ic|telinit 3}} или {{ic|telinit 5}} для Sysvinit.<br />
<br />
=== Изменение цели для загрузки ===<br />
<br />
Стандартная цель - {{ic|default.target}}, которая по умолчанию является псевдонимом юнита {{ic|graphical.target}} (примерно соответствующего прежнему уровню выполнения 5). Для изменения цели при загрузке по умолчанию, добавьте следующий дополнительный [[kernel parameters|параметр ядра]] в вашем загрузчике:<br />
<br />
{{Tip|Расширение {{ic|.target}} можно опустить.}}<br />
<br />
* {{ic|1=systemd.unit=multi-user.target}} (что примерно соответствует прежнему уровню выполнения 3),<br />
* {{ic|1=systemd.unit=rescue.target}} (что примерно соответствует прежнему уровню выполнения 1).<br />
<br />
Другой путь заключается в том, чтобы оставить загрузчик без изменений и изменить целевой юнит по умолчанию - {{ic|default.target}}, что достигается командой {{ic|systemctl}}:<br />
<br />
# systemctl enable multi-user.target<br />
<br />
Эффект от применения данной команды выводится через {{ic|systemctl}}; символическая ссылка на новый целевой юнит по умолчанию создается в директории {{ic|/etc/systemd/system/default.target}}. Это сработает в том случае (и только в том случае), если имеется следующая секция:<br />
<br />
[Install]<br />
Alias=default.target<br />
<br />
в конфигурационном файле целевого юнита. В настоящий момент как {{ic|multi-user.target}}, так и {{ic|graphical.target}} оба имеют данную секцию.<br />
<br />
== Журнал ==<br />
С версии 38 systemd имеет собственную систему ведения логов - журнал (journal). По умолчанию, более не требуется запуск демона syslog. Для чтения логов используйте команду:<br />
<br />
# journalctl<br />
<br />
По умолчанию (когда в конфигурационном файле {{ic|/etc/systemd/journald.conf}} параметр {{ic|Storage&#61;}} имеет значение {{ic|auto}}) журнал записывается в директорию {{ic|/run/systemd/journal}}. Если директория {{ic|/var/log/journal/}} не существует (например, вы или какая-либо программа удалили ее), systemd '''не''' создаст ее автоматически, но вместо этого запишет свои логи в директорию {{ic|/run/systemd/journal}}. Это означает, что логи будут потеряны при перезагрузке.<br />
<br />
=== Фильтрация вывода ===<br />
<br />
{{ic|journalctl}} позволяет фильтровать вывод по особым полям.<br />
<br />
Примеры:<br />
<br />
Показать все сообщения с момента текущей загрузки системы:<br />
<br />
# journalctl -b<br />
<br />
Последние сообщения:<br />
<br />
# journalctl -f<br />
<br />
Показать все сообщения определенной программы:<br />
<br />
# journalctl /usr/lib/systemd/systemd<br />
<br />
Показать все сообщения определенного процесса:<br />
<br />
# journalctl _PID=1<br />
<br />
Показать все сообщения определенного юнита:<br />
<br />
# journalctl -u netcfg<br />
<br />
Обратитесь к {{ic|man journalctl}} и {{ic|systemd.journal-fields}} или [http://0pointer.de/blog/projects/journalctl.html блог Леннерта (англ.)] для получения детальной информации.<br />
<br />
=== Ограничение размера журнала ===<br />
<br />
Если журнал сохраняется при перезагрузке, размер его по умолчанию ограничен значением в 10% от объема соответствующей файловой системы. Например, для директории {{ic|/var/log/journal}}, расположенной на корневом разделе в 50 Гбайт, максимальный размер журналируемых данных составит до 5 Гбайт. Максимальный объем постоянного журнала можно контролировать при помощи значения {{ic|SystemMaxUse}} в конфигурационном файле {{ic|/etc/systemd/journald.conf}}, поэтому для ограничения его объемом в 50 Mбайт раскомментируйте и отредактируйте соответствующую строку:<br />
<br />
SystemMaxUse=50M<br />
<br />
Обратитесь к {{ic|man journald.conf}} для получения дальнейшей информации.<br />
<br />
=== Journald в связке с классическим демоном syslog ===<br />
<br />
Совместимость с классической реализацией syslog обеспечивается сокетом {{ic|/run/systemd/journal/syslog}}, в который перенаправляются все сообщения. Чтобы дать возможность демону syslog работать вместе с журналом systemd, следует привязать данный демон к указанному сокету вместо {{ic|/dev/log}} ([http://lwn.net/Articles/474968/ официальное сообщение]). Пакетом {{pkg|syslog-ng}} в репозиториях автоматически предоставляется необходимая конфигурация.<br />
<br />
# systemctl enable syslog-ng<br />
<br />
== Сеть ==<br />
<br />
{{Warning|Данный раздел в английской версии включен в состав статьи [[Configuring Network]]; в русской версии временно оставлен из-за того, что русский вариант [[Configuring Network (Русский)]] устарел в сравнении с английским.}}<br />
<br />
=== Динамическое подключение (DHCP) с использованием dhcpcd ===<br />
<br />
Если хотите использовать только DHCP для своего соединения Ethernet, вы можете воспользоваться сервисом {{ic|dhcpcd@.service}} (который поставляется пакетом {{Pkg|dhcpcd}}).<br />
<br />
Чтобы подключить DHCP для {{ic|eth0}}, просто выполните команду:<br />
<br />
# systemctl start dhcpcd@eth0.service<br />
<br />
Вы можете включить этот сервис, и он будет автоматически запускаться при загрузке. Это делается командой:<br />
<br />
# systemctl enable dhcpcd@eth0.service<br />
<br />
Иногда сервис dhcpd запускается до загрузки модуля вашей сетевой карты ({{bug|30235}}), в этом случае вручную добавьте вашу сетевую карту в конфигурационный файл {{ic|/etc/modules-load.d/*.conf}}. Например, для карты Realtek необходима загрузка модуля {{ic|r8169}}, поэтому создайте такой конфигурационный файл:<br />
<br />
{{hc|/etc/modules-load.d/realtek.conf|2=<br />
r8169}}<br />
<br />
=== Другие конфигурации ===<br />
<br />
Для статического подключения, беспроводной сети или сложной конфигурации сети наподобие сетевого моста, вы можете использовать [[Netcfg#systemd_support|netcfg]] или [[NetworkManager#Enable_NetworkManager_under_Native_systemd_system|NetworkManager]], для обоих этих инструментов управления сетью имеются сервис-файлы для systemd.<br />
<br />
{{Note|Если вы хотите использовать netcfg, NetworkManager или другие программы управления сетью, вам не надо в этом случае запускать или включать сервис dhcpcd как показано в предыдущем параграфе.}}<br />
<br />
== Оптимизация ==<br />
<br />
=== Анализ процесса загрузки ===<br />
<br />
==== Использование systemd-analyze ====<br />
<br />
Systemd предоставляет инструмент под названием {{ic|systemd-analyze}}, позволяющий проанализировать процесс загрузки вашей системы, чтобы можно было увидеть, какие файлы юнитов тормозят загрузку. Соответственно, вы можете оптимизировать вашу систему. Для использования данного инструмента вам потребуется установить пакеты {{Pkg|python2-dbus}} и {{Pkg|python2-cairo}}.<br />
<br />
Чтобы увидеть, сколько времени было потрачено на подготовку пространства ядра и пространства пользователя во время загрузки, просто выполните команду:<br />
<br />
$ systemd-analyze<br />
<br />
{{Tip|Чтобы увидеть, сколько времени ушло на загрузку образа initramfs, дополните хуком {{ic|timestamp}} ваш массив {{ic|HOOKS}} из конфигурационного файла {{ic|/etc/[[mkinitcpio]].conf}} и от суперпользователя root пересоберите ваш образ initramfs командой {{ic|mkinitcpio -p linux}} }}<br />
<br />
Чтобы увидеть список запускаемых файлов юнитов, отсортированный по потраченному каждым из них на загрузку времени, выполните команду:<br />
<br />
$ systemd-analyze blame<br />
<br />
Вы также можете создать файл SVG, показывающий процесс загрузки в графическом виде, наподобие [[Bootchart]]:<br />
<br />
$ systemd-analyze plot > plot.svg<br />
<br />
==== Использование bootchart ====<br />
<br />
Вы можете использовать версию bootchart для визуализации последовательности при загрузке системы.<br />
Из-за невозможности использовать стандартные установки bootchart (так как нельзя добавить в командную строку ядра вторую запись init), вам придется воспользоваться пакетом {{AUR|bootchart2}} из [[AUR]], поставляемым с недокументированным сервисом systemd. После установки bootchart2 выполните команду:<br />
<br />
# systemctl enable bootchart<br />
<br />
Обратитесь к [https://github.com/mmeeks/bootchart документации bootchart (англ.)] за дальнейшей и детализированной информацией об использовании данной версии bootchart.<br />
<br />
=== Readahead ===<br />
<br />
systemd поставляется со свой реализации технологии readahead, что в принципе должно усовершенствовать процесс загрузки системы. Однако, в зависимости от версии вашего ядра и типа жесткого диска, скорость обращения к данным может разниться (например, может быть медленнее). Чтобы включить данный сервис, выполните:<br />
<br />
# systemctl enable systemd-readahead-collect systemd-readahead-replay<br />
<br />
Не забудьте, что волшебство технологии readahead подействует только после нескольких перезапусков системы<br />
<br />
=== Ранний старт сервисов ===<br />
<br />
Одним из центральных элементов systemd является [[D-Bus]] и активация сокетов, что требует запуска сервисов при первой потребности в них. Обычно такой подход является удачным, но, если вы знаете, что какой-то сервис (вроде [[UPower]]) должен всегда запускаться во время загрузки системы, то вы можете сократить общее время загрузки, запуская его так рано, как это вообще возможно. Этого можно добиться (если сервис-файл устроен соответствующим образом, что верно в большинстве случаев) путем выполнения команды:<br />
<br />
# systemctl enable upower<br />
<br />
Это заставит systemd запустить UPower так рано, как это возможно, не устраивая перегонки данного сервиса с активацией сокета или D-Bus.<br />
<br />
=== Уменьшение вывода во время загрузки ===<br />
<br />
Измените параметр {{ic|verbose}} на {{ic|quiet}} в строке загрузки ядра вашего загрузчика. Для некоторых систем, в частности с SSD, узким местом является низкая производительность TTY, поэтому уменьшение вывода информации означает прирост скорости загрузки.<br />
<br />
== Устранение неполадок ==<br />
<br />
=== Выключение/перезагрузка происходят ужасно долго ===<br />
<br />
Если процесс выключения занимает очень долгое время (или, по-видимому, зависает), то, вероятно, виноват сервис, который не завершает свою работу. systemd ожидает некоторое время, пока каждый сервис завершит свою работу самостоятельно, и только потом пытается принудительно завершить (kill) его. Если вы столкнулись с такой проблемой, обратитесь к [http://freedesktop.org/wiki/Software/systemd/Debugging#Shutdown_Completes_Eventually данной статье (англ.)].<br />
<br />
== Полезные ссылки ==<br />
<br />
*[http://www.freedesktop.org/wiki/Software/systemd Официальный веб-сайт (англ.)]<br />
*[http://0pointer.de/public/systemd-man/ Страницы руководств (англ.)]<br />
*[http://freedesktop.org/wiki/Software/systemd/Optimizations systemd Optimizations (англ.)]<br />
*[http://www.freedesktop.org/wiki/Software/systemd/FrequentlyAskedQuestions FAQ (англ.)]<br />
*[http://www.freedesktop.org/wiki/Software/systemd/TipsAndTricks Tips And Tricks (англ.)]<br />
*[http://0pointer.de/public/systemd-ebook-psankar.pdf systemd для администраторов (PDF) - перевод цикла статей Леннарта Поттеринга (Lennart Poettering) (англ.)]<br />
*[http://0pointer.de/blog/projects/systemd.html Блог Lennart'а (англ.)]<br />
*[http://archlinux.org.ru/forum/viewtopic.php?f=9&t=9581 systemd mini FAQ]<br />
*[http://fedoraproject.org/wiki/Systemd Fedora Linux Wiki: Systemd (англ.)]<br />
*[http://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet Fedora's SysVinit to systemd cheatsheet (англ.)]<br />
*[http://wiki.russianfedora.ru/index.php/Systemd systemd - база знаний проекта Fedora]<br />
*[http://wiki.debian.org/ru/Systemd Debian Wiki: systemd - менеджер системы и сервисов]<br />
*[http://wiki.ubuntu.com/systemd Ubuntu Wiki: systemd (англ.)]</div>Archvillhttps://wiki.archlinux.org/index.php?title=Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=235566Systemd (Русский)2012-11-15T17:36:36Z<p>Archvill: /* Установка */</p>
<hr />
<div>{{DISPLAYTITLE:systemd (Русский)}}<br />
[[Category:Русский]]<br />
[[Category:Процесс Загрузки (Русский)]]<br />
[[en:systemd]]<br />
[[es:systemd]]<br />
[[fr:systemd]]<br />
[[it:systemd]]<br />
[[ja:Systemd]]<br />
[[zh-CN:systemd]]<br />
{{Article summary start|Сводка}}<br />
{{Article summary text|Статья охватывает установку и настройку systemd.}}<br />
{{Article summary heading|Связанные статьи}}<br />
{{Article summary wiki|systemd/User}}<br />
{{Article summary wiki|systemd/Services}}<br />
{{Article summary wiki|systemd FAQ}}<br />
{{Article summary wiki|init Rosetta (Русский)}}<br />
{{Article summary wiki|udev (Русский)}}<br />
{{Article summary end}}<br />
Цитата с [http://freedesktop.org/wiki/Software/systemd веб-страницы проекта]:<br />
<br />
''"'''systemd''' - система [инициализации] и менеджер служб для Linux, совместимые со скриптами инициализации SysV и LSB. '''systemd''' обеспечивает возможности агрессивной параллелизации, использует сокеты и активацию [[D-Bus]] для запускаемых служб, предлагает запуск демонов по необходимости, отслеживает процессы при помощи [[cgroups|контрольных групп]] Linux, поддерживает мгновенные снимки и восстановление состояния системы, монтирование и точки монтирования, а также внедряет основанную на зависимостях логику контроля процессов сложных транзакций. Эта система может выступать заменой [[SysVinit|sysvinit]]."''.<br />
<br />
{{Note|1=За детальным объяснением причин происходящего перехода Arch'а на systemd обратитесь к [https://bbs.archlinux.org/viewtopic.php?pid&#61;1149530#p1149530 сообщению на англоязычном форуме].}}<br />
<br />
Смотрите также [[Wikipedia:Systemd|статью в Википедии]].<br />
<br />
== Соображения перед началом миграции ==<br />
<br />
* Настоятельно рекомендуется перейти на новую конфигурацию '''initscripts''', описанную в статье [[rc.conf (Русский)|rc.conf]]. Сконфигурировав таким образом свою систему, вы проделаете бóльшую часть работы, необходимую для миграции на systemd.<br />
* Почитайте про systemd на [http://freedesktop.org/wiki/Software/systemd/ сайте разработчиков].<br />
* Обратите внимание, что systemd имеет собственный '''журнал (journal)''', заменяющий '''syslog''', хотя оба варианта ведения логов могут сосуществовать. Обратитесь к приведенному ниже [[#Журнал|разделу, посвященному журналу]].<br />
* Хотя systemd вполне способна заменить определенную функциональность таких демонов, как '''cron''', '''acpid''' или '''xinetd''', но если вы не хотите, можете не отказываться от использования традиционных демонов.<br />
* Интерактивные загрузочные скрипты (initscripts) не работают с systemd. В частности, '''netcfg-menu''' [https://bugs.archlinux.org/task/31377 не может] использоваться при загрузке системы.<br />
<br />
== Установка ==<br />
<br />
{{Note|Оба пакета - {{pkg|systemd}} и {{pkg|systemd-sysvcompat}} - ставаятся по умолчанию при установке с носителя новее, чем [https://www.archlinux.org/news/systemd-is-now-the-default-on-new-installations/ 2012-10-13].}}<br />
<br />
Следующий раздел предназначен для тех установок Arch Linux, которые все еще зависят от пакетов {{pkg|sysvinit}} и {{pkg|initscripts}} и не перешли на использование {{pkg|systemd}}.<br />
<br />
* Установите пакет {{pkg|systemd}} и добавьте следующую запись к командной строке загрузки ядра: {{ic|1=init=/usr/lib/systemd/systemd}}<br />
<br />
* выполнив это, вы сможете включать или отключать любой необходимый сервис путем применения команды {{ic|systemctl enable <service_name>}} (это примерно соответствует тому, что включалось в массив {{ic|DAEMONS}}).<br />
<br />
* Перезагрузите свою систему и убедитесь, что {{ic|systemd}} в настоящее время активен, выполнив слудующую команду: {{ic|$ cat /proc/1/comm}}. Данная команда должна вернуть строку {{ic|systemd}}.<br />
<br />
* Удалите {{pkg|initscripts}} и {{pkg|sysvinit}} из вашей системы и установите {{pkg|systemd-sysvcompat}}.<br />
<br />
* В последнюю очередь удалите параметр {{ic|1=init=/usr/lib/systemd/systemd}}, поскольку необходимости в нем более нет.<br />
<br />
=== Дополнительная информация ===<br />
<br />
* Если в параметрах ядра имеется значение {{ic|quiet}}, вероятно, вам стоит удалить его для нескольких первых загрузок systemd, чтобы видеть возникающие во время загрузке проблемы.<br />
<br />
* Теперь добавлять вашего пользователя в [[Users and Groups|группы]] ({{ic|optical}}, {{ic|audio}}, {{ic|scanner}}, ...) в большинстве случаев '''нет''' необходимости при использовании systemd. Это даже может нарушить работоспособность системы. Например, добавление в группу audio может привести к невозможности быстрого переключения между пользователями и позволит приложениям заблокировать программное микширование. Каждый вход PAM предоставляет сессию login, которое дает вам разрешения для локальной сессии посредством [[Wikipedia:Access control list|POSIX ACLs]] на аудио/видео устройства и позволяет выполнять некоторые операции, такие, как как монтирование съемных носителей через [[udisks]]. <br />
<br />
{{Note|Systemd-logind заменил [[ConsoleKit]], удаленный из репозиториев, поэтому для полной функциональности теперь система должна загружаться с использованием systemd. Смотрите [http://archlinux.org.ru/node/352/ новость] для получения дальнейшей информации.}<br />
<br />
Ранее ConsoleKit обеспечивал подобные разрешения для устройств на основе ACL и разрешения polkit для локальных сессий.}}<br />
<br />
== Родные системные файлы ==<br />
<br />
{{Note|Возможно, вам придется создать эти файлы. Установите для всех файлов права доступа 644 и владельца root:root.}}<br />
<br />
=== Имя компьютера (hostname) ===<br />
<br />
Имя компьютера настраивается в файле {{ic|/etc/hostname}}. Этот файл не должен содержать системный домен (если таковой имеется). Для установки имени компьютера выполните:<br />
<br />
# hostnamectl set-hostname '''myhostname'''<br />
<br />
Обратитесь к руководствам {{ic|man 5 hostname}} и {{ic|man hostnamectl}} для получения более подробной информации.<br />
<br />
Вот примерный файл:<br />
<br />
{{hc|/etc/hostname|<br />
myhostname<br />
}}<br />
<br />
=== Локаль ===<br />
<br />
Системная локаль по умолчанию настраивается в конфигурационном файле {{ic|/etc/locale.conf}}. Для установки локали по умолчанию выполните:<br />
<br />
# localectl set-locale LANG="ru_RU.UTF-8"<br />
<br />
{{Note|Перед установкой локали по умолчанию вам сперва необходимо сделать локали доступными системе, раскомментировав их в файле {{ic|/etc/locale.gen}} и затем выполнив команду {{ic|locale-gen}} от суперпользователя root. Локаль, установленная командой {{ic|localectl}}, должна быть одной из '''раскомментированных''' локалей в файле {{ic|/etc/locale.gen}}.}}<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 localectl}} и {{ic|man 5 locale.conf}}.<br />
* Дальнейшая информация содержится в статье [[Locale]].<br />
<br />
Вот примерный файл:<br />
<br />
{{hc|/etc/locale.conf|2=<br />
LANG=ru_RU.utf8}}<br />
<br />
=== Консоль и раскладка клавиатуры ===<br />
<br />
Файл {{ic|/etc/vconsole.conf}} устанавливает настройки виртуальной консоли (раскладку клавиатуры и консольный шрифт).<br />
<br />
{{hc|/etc/vconsole.conf|2=<br />
KEYMAP=ru<br />
FONT=cyr-sun16<br />
FONT_MAP=}}<br />
<br />
{{Note|С версии {{Pkg|systemd}}-194 используются шрифт ядра и раскладку по умолчанию (т.е. американскую английскую). Нет более необходимости (для тех, кто использует американскую английскую раскладку) настраивать в конфигурационном файле строки {{ic|1=KEYMAP=}} и {{ic|1=FONT=}}, их можно оставить пустыми.}}<br />
<br />
Другой способ настройки раскладки клавиатуры в консоли состоит в использовании команды:<br />
<br />
# localectl set-keymap ru<br />
<br />
Преимущество такого подхода - в том, что он также установит указанную раскладку клавиатуры и для X11.<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 localectl}} и {{ic|man 5 vconsole.conf}}.<br />
* Для получения детальной информации обратитесь к разделам [[Fonts#Console_fonts|консольные шрифты (англ.)]] и [[KEYMAP|раскладка клавиатуры (англ.)]].<br />
<br />
=== Временная зона ===<br />
<br />
Временная зона настраивается путем создания соответствующей символической ссылки {{ic|/etc/localtime}} на файл временной зоны в директории {{ic|/usr/share/zoneinfo/}}. Чтобы сделать это автоматически, выполните команду:<br />
<br />
# timedatectl set-timezone Europe/Moscow<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 timedatectl}} и {{ic|man 5 localtime}} и {{ic|man 7 archlinux}}.<br />
<br />
{{Note|Прежний конфигурационный файл {{ic|/etc/timezone}} объявлен устаревшим с выходом {{pkg|systemd}}-190 и должен быть удален.}}<br />
<br />
Альтернативный метод - создание символической ссылки вручную:<br />
<!-- использовать относительную символическую ссылку! --><br />
# ln -sf ../usr/share/zoneinfo/Europe/Moscow /etc/localtime<br />
<br />
=== Аппаратные часы ===<br />
<br />
Systemd будет использовать UTC для аппаратных часов по умолчанию.<br />
{{Tip|Обычно рекомендуется запускать [[NTP|демон Network Time Protocol]] для поддержания синхронизации аппаратных часов с системным временем.}}<br />
<br />
==== Аппаратные часы по localtime ====<br />
<br />
Если вы собираетесь выставить аппаратные часы по localtime (местному времени, что '''КАТЕГОРИЧЕСКИ НЕ РЕКОМЕНДУЕТСЯ'''), выполните команду:<br />
<br />
# timedatectl set-local-rtc true<br />
<br />
Если же захотите вернуть ваши аппаратные часы к использованию временного формата UTC, выполните:<br />
<br />
# timedatectl set-local-rtc false<br />
<br />
Помните, что настройка перехода на зимнее/летнее время - неблагодарное занятие. Если переход на зимнее/летнее время происходит в тот момент, когда ваш компьютер выключен, то при следующей загрузке ваши часы будут показывать ошибочное время ([http://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html здесь об этом чуть подробнее (англ.)]). Последние версии ядра устанавливают системное время из RTC (часов реального времени) непосредственно во время загрузки без использования {{ic|hwclock}}, при этом ядро всегда считает, что RTC выставлено по UTC. Это означает, что если RTC выставлено по местному времени (local time), системное время будет изначально установлено ошибочно и затем корректироваться вскоре после этого при каждой загрузке. Это является причиной некоторых досадных багов (идущие назад часы редко являются нужной вещью).<br />
<br />
Причиной, позволяющей RTC быть выставленными по местному времени, является двойная загрузка системы с Windows, ([http://blogs.msdn.com/b/oldnewthing/archive/2004/09/02/224672.aspx которая использует localtime (англ.)]). Windows воспринимает RTC, выставленные по UTC при помощи простого [[Time#UTC in Windows|исправления реестра (англ.)]]. Если вы столкнетесь с подобными проблемами при двойной загрузке с Windows, вы можете установить аппаратные часы на использование местного времени. <br />
<br />
Если вы настроите Windows на использование UTC, также не забудьте отключить функцию "Обновление времени по Интернету" ("Internet Time Update"), иначе для Windows возникнет проблема с аппаратными часами, поскольку система будет пытаться синхронизировать их с временем через Интернет. Вместо этого следует оставить время в формате RTC и синхронизовать через Интернет в Linux посредством демона [[NTP]], как это предлагалось выше.<br />
<br />
* За дальнейшей информацией обратитесь к статье [[Time]].<br />
<br />
=== Подгружаемые модули ядра ===<br />
<br />
Сегодня все необходимые модули для загрузки подгружаются автоматически с помощью [[Udev]], так что, если вам не надо (или же вы не должны) использовать какой-нибудь модуль не из дерева ядра , нет необходимости дополнительно помещать какие-либо модули в какой-то файл конфигурации загрузки. Тем не менее, бывают случаи, когда вы можете подгрузить дополнительный модуль в процессе загрузки или поместить какой-то модуль в черный список, чтобы ваш компьютер работал правильно.<br />
<br />
==== Дополнительно подгружаемые при загрузке модули ====<br />
<br />
Необходимые для загрузки дополнительные модули оформляются в статический список файлов в директории {{ic|/etc/modules-load.d/}}. Каждый из конфигурационных файлов имеет наименование вида {{ic|/etc/modules-load.d/<program>.conf}} (где <program> - имя подгружаемого модуля) и содержит список имен подгружаемых модулей ядра, каждое из которых начинается с новой строки. При этом игнорируются как пустые строки конфигурационных файлов, так и строки, у которых первым символом, отличным о пробела, является символ {{ic|#}} и {{ic|;}}. Например:<br />
<br />
{{hc|/etc/modules-load.d/virtio-net.conf|<br />
# Load virtio-net.ko at boot<br />
virtio-net}}<br />
<br />
Более подробная информация содержится в руководстве {{ic|man 5 modules-load.d}}.<br />
<br />
==== Черный список ====<br />
<br />
Добавление модулей в черный список работает также, как и в случае с {{Pkg|initscripts}}, поскольку в действительности эта функция выполняется таким инструментом, как {{Pkg|kmod}}. Обратитесь к разделу [[Kernel_modules#Blacklisting|Module Blacklisting]] за более подробной информацией.<br />
<br />
=== Монтирование файловых систем ===<br />
<br />
Установка по умолчанию автоматически проверяет файловые системы командой fsck и монтирует файловые системы перед запуском тех сервисов, котрым необходимо иметь эти системы примонтированными. Например, systemd позволяет в автоматическом режиме добиться, что удаленные файловые системы наподобие [[NFS]] и [[Samba]] подключаются после поднятия сети. Поэтому монтирование как локальных, так и удаленных файловых систем, прописанных в {{ic|/etc/fstab}} должно работать "из коробки".<br />
<br />
Обратитесь к руководству {{ic|man 5 systemd.mount}} для получения более подробной информации.<br />
<br />
==== Автомонтирование ====<br />
<br />
* Если ваш раздел {{ic|/home}} занимает большой объем, лучшим вариантом было бы позволить сервисам не зависеть от подключения {{ic|/home}} и запускать данные сервисы, когда {{ic|/home}} еще подвергается проверке при загрузке системы. Добиться такого результата можно добавлением следующих параметров в запись файла {{ic|/etc/fstab}}, касающуюся раздела {{ic|/home}}:<br />
<br />
noauto,x-systemd.automount<br />
<br />
Такие параметры вызовут команду fsck и примонтируют {{ic|/home}} при первом обращении к данному разделу, и ядро будет буферизовать все файлы доступа к {{ic|/home}} до готовности данного раздела.<br />
<br />
* То же самое применимо и к удаленным файловым системам. Если вы хотите, чтобы монтирование данных систем происходило только по мере доступа к ним, вы можете использовать параметр {{ic|1=x-systemd.device-timeout=#}} в файле {{ic|/etc/fstab}} для определения таймаута в том случае, кода сетевые ресурсы оказываются недоступны.<br />
<br />
* В случае использования зашифрованных файловых систем с ключами доступа, вам также Iследует добавить параметр {{ic|noauto}} в соответствующие записи файла {{ic|/etc/crypttab}}. systemd не будет подключать зашифрованные устройства при загрузке, но, вместо этого, дождется реального обращения к ним и автоматически откроет к ним доступ с использованием определенных ключей перед тем, как они будут примонтированы. Это сэкономит несколько секунд при загрузке системы, например, в случае использования зашифрованного устройства RAID, потому что systemd не будет дожидаться от устройства, когда оно станет доступным. Например:<br />
<br />
{{hc|/etc/crypttab|<br />
data /dev/md0 /root/key noauto}}<br />
<br />
=== LVM ===<br />
<br />
Если у вас имеются тома LVM, не активированные посредством [[Mkinitcpio|initramfs]], включите сервис {{ic|lvm.service}} (предоставляемый пакетом {{pkg|lvm2}}):<br />
<br />
# systemctl enable lvm<br />
<br />
Точно так же, если у вас LVM на устройствах с шифрованием, монтируемым позже в процессе загрузки (например, из {{ic|/etc/crypttab}}), вам необходимо включить сервис {{ic|lvm-on-crypt.service}} (также предоставляемый пакетом {{pkg|lvm2}}):<br />
<br />
# systemctl enable lvm-on-crypt<br />
<br />
=== Управлением питанием ACPI ===<br />
<br />
Systemd обрабатывает некоторые события, связанные с [http://кru.wikipedia.org/wiki/ACPI ACPI], что настраивается при помощи параметров в конфигурационном файле {{ic|/etc/systemd/logind.conf}}:<br />
<br />
* {{ic|HandlePowerKey}}: определяет действия системы при нажатии кнопки питания (вкл./выкл.).<br />
* {{ic|HandleSuspendKey}}: определяет действия системы при нажатии кнопки спящего режима.<br />
* {{ic|HandleHibernateKey}}: определяет действия системы при нажатии кнопки ждущего режимаs.<br />
* {{ic|HandleLidSwitch}}: определяет действия системы при закрытии крышки компьютера.<br />
<br />
Для соответствующих действий могут использоваться значения {{ic|ignore}} (пропустить), {{ic|poweroff}} (отключить питание), {{ic|reboot}} (перезагрузить), {{ic|halt}} (выключить), {{ic|suspend}} (включить спящий режим), {{ic|hibernate}} (включить ждущий режим) или {{ic|kexec}} (системный вызов позволяющий оперативно переключиться в другое ядро).<br />
<br />
Если данные параметры не определены, по умолчанию systemd будет использовать следующие: {{ic|1=HandlePowerKey=poweroff}}, {{ic|1=HandleSuspendKey=suspend}}, {{ic|1=HandleHibernateKey=hibernate}}, и {{ic|1=HandleLidSwitch=suspend}}.<br />
<br />
В системах без графического интерфейса или использующих простые оконные менеджеры наподобие like [[i3]] или [[awesome]], так можно заменить демон [[acpid]], который обычно используется для реагирования на данные события ACPI.<br />
<br />
В текущей версии systemd параметры {{ic|Handle}} будут применены ко всей системе, если только они не "подавляются (временно отключены) другой программой, такой, как менеджер питания данного окружения рабочего стола. Если эти ограничений нет, вы можете столкнуться с ситуацией, когда systemd приводит вашу систему в спящий режим, а затем, когда система пробуждается менеджером управлением питания, снова "усыпляет" ее.<br />
<br />
{{Warning|В настоящее время менеджеры управления питанием в новейших версиях сред [[KDE]] и [[GNOME]] являются единственными, которые использюет такие команды "подавления". До тех пор, пока их не будут применять другие менеджеры, вам надо выставить в параметрах {{ic|Handle}} значение {{ic|ignore}}, если вы хотите, чтобы события ACPI обрабатывались в случае использования [[Xfce]], [[acpid]] или других программ. Но на подходе новые версии, которые включат данную функциональность.}}<br />
<br />
{{Note|Systemd также может использовать для перевода системы в спящий/ждущий режим другие движки (такие, как [[Uswsusp]] или [[TuxOnIce]]), в дополнение к движку ''ядра''.}}<br />
<br />
==== Хуки спящего режима ====<br />
<br />
Systemd в своих командах {{ic|systemctl suspend}} или {{ic|systemctl hibernate}} не использует [[pm-utils]] для "усыпления" машины; хуки [[pm-utils]], включая любые [[Pm-utils#Creating_your_own_hooks|пользовательские хуки]] не будут работать. Тем не менее, systemd предоставляет схожий механизм запуска пользовательских скриптов для данных событий. Systemd запускает все исполняемые файлы в директории {{ic|/usr/lib/systemd/system-sleep/}}, передавая каждому из них два аргумента:<br />
<br />
* Аргумент 1: или {{ic|pre}}, или {{ic|post}}, в зависимости от которых машина либо "уснет", либо будет "пробуждена";<br />
* Аргумент 2: или {{ic|suspend}}, или {{ic|hibernate}}, в зависимости от того, что было вызвано.<br />
<br />
В отличие от [[pm-utils]], systemd запустит данные скрипты одновременно, а не один после другого.<br />
<br />
Вывод любого пользовательского скрипта будет записан сервисом {{ic|systemd-suspend.service}} или {{ic|systemd-hibernate.service}}. Вы вы можете увидеть данный выход в [[#Журнал systemd|журнале]] systemd:<br />
<br />
# journalctl -b -u systemd-suspend<br />
<br />
Обратите внимание, что вместо использования скриптов вы также можете использовать специальные целевые юниты - {{ic|sleep.target}}, {{ic|suspend.target}} или {{ic|hibernate.target}} для того, чтобы подключить к другим юнитам возможности перехода в спящий режима.<br />
<br />
Пример пример пользовательского скрипта по переходу в спящий режим:<br />
<br />
{{hc|/usr/lib/systemd/system-sleep/example.sh|<br />
#!/bin/sh<br />
case $1/$2 in<br />
pre/*)<br />
echo "Going to $2..."<br />
;;<br />
post/*)<br />
echo "Waking up from $2..."<br />
;;<br />
esac}}<br />
<br />
Обратитесь к руководствам {{ic|man 7 systemd.special}} и {{ic|man 8 systemd-sleep}} для получения дальнейшей информации.<br />
<br />
=== Временные файлы ===<br />
<br />
Systemd-tmpfiles использует конфигурационные файлы в директориях {{ic|/usr/lib/tmpfiles.d/}} и {{ic|/etc/tmpfiles.d/}} для определения действий с временными файлами и директориями (создание, очистка и удаление их), обычно расположенные в {{ic|/run}} or {{ic|/tmp}}. Каждый файл с настройками имеет название вида {{ic|/etc/tmpfiles.d/<program>.conf}}. Данные конфигурационные файлы имеют приоритет по сравнению с любыми файлами с таким же названием, расположенными в директории {{ic|/usr/lib/tmpfiles.d/}}.<br />
<br />
Временные файлы tmpfiles обычно поставляются вместе с сервис-файлами для создания директорийк. которые, как ожидается, будут использоваться определенными демонами. Например, демон [[Samba]] предполагает наличие директории {{ic|/var/run/samba}} с соответствующими правами доступа. В данном случае tmpfile выглядит следующим образом:<br />
<br />
{{hc|/usr/lib/tmpfiles.d/samba.conf|<br />
D /var/run/samba 0755 root root}}<br />
<br />
Тем не менее, tmpfiles также могут использоваться для записи значений в определенные файлы во врем загрузки. К примеру, если вы используете {{ic|/etc/rc.local}} для того, чтобы отключить пробуждение системы USB-устройствами, при помощи команды {{ic|echo USBE > /proc/acpi/wakeup}}, вы можете вместо этого использовать следующий tmpfile:<br />
<br />
{{hc|/etc/tmpfiles.d/disable-usb-wake.conf|<br />
w /proc/acpi/wakeup - - - - USBE}}<br />
<br />
Метод с использованием tmpfiles в данном случае рекомендуется, поскольку systemd в действительности не поддерживает {{ic|/etc/rc.local}}.<br />
<br />
Обратитесь к руководству {{ic|man 5 tmpfiles.d}} за более подробной информацией.<br />
<br />
=== Юнит ===<br />
<br />
Юнит (англ. unit) - конфигурационный файл, содержащий информацию о сервисе (службе), сокете, устройстве, точке монирования/автомонирования, файле подкачке или разделе, определяемом для загрузки уровне запуска, пути в файловой системе или таймере, которые контролируются и управляются при помощи systemd. Синтаксис юнитов навеян спецификацией .desktop-файлов (XDG Desktop Entry Specification), которая, в свою очередь, вдохновлялась .ini-файлами от Microsoft Windows. <br />
<br />
Обратитесь к руководству {{ic|man 5 systemd.unit}} для получения дальнейшей информации.<br />
<br />
== Переход от initscripts к использованию systemd ==<br />
<br />
=== Эмуляция initscripts ===<br />
<br />
Интеграция с классической конфигурацией Arch'а обеспечивается пакетом {{Pkg|initscripts}}. В том случае, если {{Pkg|initscripts}} установлен параллельно с systemd и система загружена с использованием systemd, systemd будет выполнять следующую последовательность действий:<br />
<br />
# # Проводить синтаксический разбор массива {{ic|DAEMONS}} в файле {{ic|/etc/rc.conf}} и запускать при загрузке все находящиеся там демоны (см. ниже)<br />
# Выполнять при загрузке {{ic|/etc/rc.local}}<br />
# Выполнять при завершении работы системы {{ic|/etc/rc.local.shutdown}}<br />
<br />
Эмуляция initscripts рассматривается как просто переходная мера для легкой миграции пользователей на systemd и '''в конечном итоге будет отброшена'''. Система с "родной" systemd не зависит от централизованной конфигурации в {{ic|rc.conf}}, поэтому рекомендуется использовать [[#Родные системные файлы|родные конфигурационные файлы systemd]], которые имеют приоритет над настройками из {{ic|/etc/rc.conf}}.<br />
<br />
{{Note|Рекомендуемый путь по замене {{ic|/etc/rc.local}} состоит в написании пользовательского сервис-файла для всего того, что вы хотите запускать при загрузке системы. Обратитесь к соответствующему [[#Написание_пользовательского_.service_файла|разделу]] данной статьи.}}<br />
<br />
{{Note|Если вы отключали использование сочетания клавиш для перезагрузки системы {{keypress|Ctrl+Alt+Del}} в файле {{ic|/etc/inittab}}, теперь вам надо заново сделать это для systemd командой {{ic|systemctl mask ctrl-alt-del.target}}, выполняемой от суперпользователя root.}}<br />
<br />
==== Отказ от массива DAEMONS ====<br />
<br />
Для "чистой" установки systemd, вы можете полностью удалить файл {{ic|/etc/rc.conf}} и включать сервисы только посредством systemd. Для каждого сервиса с именем {{ic|<service_name>}} в массиве {{ic|DAEMONS}} из файла {{ic|/etc/rc.conf}} выполните команду:<br />
<br />
# systemctl enable <service_name><br />
<br />
{{Tip|Для получения списка обычно используемых демонов с их эквивалентами в initscripts и systemd, обратитесь к [[Daemons List|данной таблице]].}}<br />
<br />
Если сервис-файл {{ic|<service_name>.service}} отсутствует:<br />
<br />
* сервис-файл может быть недоступен для systemd. В этом случае вам нужно сохранить конфигурационный файл {{ic|rc.conf}} для запуска этих сервисов во время загрузки системы.<br />
* Systemd может использовать для сервисов другие имена, например, {{ic|cronie.service}} заменяет демон {{ic|crond}}; {{ic|alsa-store.service}} и {{ic|alsa-restore.service}} заменяют демон {{ic|alsa}}. Другой важный пример - демон {{ic|network}}, которого сменил целый набор сервис-файлов (обратитесь к статье [[Configuring Network]] для получения дальнейшей информации.)<br />
<br />
{{Tip|Вы можете заглянуть вовнутрь пакета, содержащего стартовые скрипты демона, чтобы узнать имена его сервис-файла. К примеру:<br />
$ pacman -Ql cronie<br />
[...]<br />
cronie /etc/rc.d/crond #Демон initscript, указываемый в массиве {{ic|DAEMONS}} (не используется при "чистой" настройке systemd)<br />
[...]<br />
cronie /usr/lib/systemd/system/cronie.service #Соответствующий сервис systemd<br />
[...]<br />
}}<br />
<br />
* Наконец, пользователю не нужно включать некоторые сервисы явным образом. Например, {{ic|dbus.service}} будет включен автоматическики при установке {{ic|dbus-core}}. {{ic|alsa-store.service}} и {{ic|alsa-restore.service}} также включены systemd автоматически. Проверьте список доступных сервисов и их состояние при помощи команды {{ic|systemctl}}, например: {{ic|systemctl status <service_name>}} (где <service_name> - имя сервиса).<br />
<br />
=== Сравнительная таблица устаревшей и "родной" конфигураций ===<br />
<br />
{{Warning|Данный раздел оставлен в русской версии временно, до полной миграции пользователей на использование "чистого" systemd.}}<br />
<br />
{| class="wikitable"<br />
|-<br />
! scope="col"| Настройка<br />
! scope="col"| Конфигурационный файл (файлы)<br />
! scope="col"| Устаревшая секция [https://projects.archlinux.org/initscripts.git/tree/rc.conf?id=97f0cd6751e8d22c14d7492cdc2186cf41157ba6 rc.conf]<br />
|-<br />
| align="center"|Имя компьютера (Hostname)<br />
| align="left"|{{ic|/etc/hostname}}<br />
{{ic|/etc/hosts}}<br />
| align="center"|{{ic|NETWORKING}}<br />
|-<br />
| align="center"|Консоль и раскладка клавиатуры<br />
| align="left"|{{ic|/etc/vconsole.conf}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Локаль<br />
| align="left"|{{ic|/etc/locale.conf}}<br />
{{ic|/etc/locale.gen}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Временная зона<br />
| align="left"|{{ic|/etc/localtime}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Аппаратные часы<br />
| align="left"|{{ic|/etc/adjtime}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Модули ядра<br />
| align="left"|{{ic|/etc/modules-load.d/}}<br />
| align="center"|{{ic|HARDWARE}}<br />
|}<br />
<br />
=== Эмуляция /etc/rc.local ===<br />
<br />
{{Warning|Данный раздел оставлен в русской версии временно, до полной миграции пользователей на использование "чистого" systemd.}}<br />
<br />
Если вы хотите при использовании systemd сохранить простоту {{ic|/etc/rc.local}} , вам нужно создать следующий сервис-файл и включить его. Просто добавьте строки {{ic|1=ExecStart=}} для тех команд, которые вы хотите запустить. Если же вам в данном случае требуется более сложная функциональность (например, циклы с {{ic|for}}), то вы можете создать скрипт Bash и выполнять его из сервис-файла. Удалите {{ic|1=ExecStart=/bin/true}}, если вы здесь действительно добавляете команду.<br />
<br />
{{hc|/etc/systemd/system/rc-local.service|<nowiki><br />
[Unit]<br />
Description=/etc/rc.local compatibility<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/bin/true<br />
RemainAfterExit=yes<br />
<br />
[Install]<br />
WantedBy=multi-user.target<br />
</nowiki>}}<br />
<br />
== Основы использования systemctl ==<br />
<br />
Главная команда для наблюдения и контроля за состоянием systemd - команда {{ic|systemctl}}. Некоторые из вариантов ее использования связаны с изучением состояния системы и управлением сервисами. Обратитесь к странцам руководства {{ic|man 1 systemctl}} для получения более детальной информации.<br />
<br />
{{Tip|Вы можете использовать приведенные ниже команды {{ic|systemctl}} с ключом {{ic|-H <user>@<host>}} для того, чтобы контролировать systemd на удаленной машине. В этом случае для соединения с удаленным процессом systemd будет использовать [[SSH]].}}<br />
<br />
{{Note|{{ic|systemadm}} - официальная графическая оболочка для {{ic|systemctl}}. Она доступна в виде пакета {{AUR|systemd-ui-git}} из [[AUR]].}}<br />
<br />
=== Анализ состояния системы ===<br />
<br />
Список запущенных юнитов:<br />
<br />
$ systemctl<br />
<br />
или:<br />
<br />
$ systemctl list-units<br />
<br />
Список юнитов, попытка запуска которых завершилась неудачей:<br />
<br />
$ systemctl --failed<br />
<br />
Доступные юниты можно посмотреть в директориях {{ic|/usr/lib/systemd/system/}} и {{ic|/etc/systemd/system/}} (последняя директория имеет приоритет). Вы можете увидеть список установленных юнитов командой:<br />
<br />
$ systemctl list-unit-files<br />
<br />
=== Использование юнитов ===<br />
<br />
Юниты могут быть сервисами ({{ic|.service}}), точками монтирования ({{ic|.mount}}) или сокетами ({{ic|.sockets}}). При использовании команды {{ic|systemctl}} необходимо всегда указывать полное имя файла, включая расширение. Однако, есть несколько сокращений при определении юнита следующими командами{{ic|systemctl}}:<br />
<br />
* Ели вы не указали суффикс, systemctl предполагает, что это {{ic|.service}}. Например, {{ic|netcfg}} и {{ic|netcfg.service}} будут трактоваться одинаково.<br />
* Точки монтирования будут автоматически преобразованы в соответствующий юнит {{ic|.mount}}. Например, указание {{ic|/home}} равнозначно {{ic|home.mount}}.<br />
* Аналогично точкам монтирования, имена устройств автоматически преобразуются в соответствующий юнит {{ic|.device}}, поэтому указание {{ic|/dev/sda2}} полностью соответствует юниту {{ic|dev-sda2.device}}.<br />
<br />
Обратитесь к руководству {{ic|man systemd.unit}} для получения детальной информации.<br />
<br />
{{Note|При использовании юнитов следует обращать внимание на регистр букв в наименовании сервис-файлов: так, необходимо использовать ''NetworkManager.'''service''' '' (запомните употребление в данном названии букв в верхнем регистре) для включения сервиса NetworkManager'а, в противном случае вы получите сообщение об ошибке и сервис во время загрузки системы не запустится.}}<br />
<br />
Незамедлительно запустить юнит:<br />
<br />
# systemctl start <unit><br />
<br />
Незамедлительно остановить юнит:<br />
<br />
# systemctl stop <unit><br />
<br />
Перезапустить юнит:<br />
<br />
# systemctl restart <unit><br />
<br />
Запросить у юнита перезагрузку его настроек:<br />
<br />
# systemctl reload <unit><br />
<br />
Показать статус юнита, а также запущен он или нет:<br />
<br />
$ systemctl status <unit><br />
<br />
Проверить включение юнита (т.е. разрешен ли юниту запуск при загрузке системы):<br />
<br />
$ systemctl is-enabled <unit><br />
<br />
Включить юнит (разрешить юниту запуск при загрузке системы):<br />
<br />
# systemctl enable <unit><br />
<br />
{{Note| Если сервис-файлы не имеют раздела {{ic|Install}}, это обычно означает, что данные сервисы вызываются автоматически другими сервисами. Но если вам требуется установить их вручную, используйте следующую команду, заменив {{ic|foo}} именем вашего сервиса.<br />
# ln -s /usr/lib/systemd/system/''foo''.service /etc/systemd/system/graphical.target.wants/<br />
}}<br />
<br />
Выключить юнит (запретить юниту запуск при загрузке системы):<br />
<br />
# systemctl disable <unit>}}<br />
<br />
Показать страницу помощи для юнита (необходима поддержка этой функции в указанном файле юнита):<br />
<br />
$ systemctl help <unit><br />
<br />
=== Управление питанием ===<br />
<br />
Если у вас локальная пользовательская сессия {{ic|systemd-logind}} и нет других активных сессий, приведенные ниже команды сработают и без привилегий суперпользователя root. В противном случае (например, вследствие того, что пользователь залогинился в tty), systemd автоматически запросит у вас пароль root.<br />
<br />
Завершить работу и перезагрузить систему:<br />
<br />
$ systemctl reboot<br />
<br />
Завершить работу и выключить компьютер (с отключением питания):<br />
<br />
$ systemctl poweroff<br />
<br />
Завершить работу и остановить систему:<br />
<br />
$ systemctl halt<br />
<br />
Перевести систему в спящий режим:<br />
<br />
$ systemctl suspend<br />
<br />
Перевести систему в ждущий режим:<br />
<br />
$ systemctl hibernate<br />
<br />
== Запуск окружения рабочего стола из systemd ==<br />
<br />
Чтобы включить графический вход в систему, запустите выбранный вами демон [[Display Manager (Русский)|экранного менеджера]] (например, [[KDM]]). В настоящий момент доступны сервис-файлы для [[GDM]], [[KDM]], [[SLiM]], [[XDM]], [[LXDM]] и [[LightDM]].<br />
<br />
# systemctl enable kdm<br />
<br />
Эта команда должна работать "из коробки". Если вдруг она не сработала, то, возможно, у вас {{ic|default.target}} установлен вручную или остался с прежней установки:<br />
<br />
{{hc|# ls -l /etc/systemd/system/default.target|<br />
/etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target}}<br />
<br />
Просто удалите символическую ссылку и systemd будет использовать целевой юнит по умолчанию - {{ic|default.target}} (т.е. {{ic|graphical.target}}).<br />
<br />
# rm /etc/systemd/system/default.target<br />
<br />
=== Использование systemd-logind ===<br />
<br />
{{Note|С 30.10.2012 [[ConsoleKit]] был [http://archlinux.org.ru/node/352/ заменен на systemd-logind] как механизм входа в окружение рабочего стола по умолчанию.}}<br />
<br />
Для того, чтобы проверить статус вашей пользовательской сессии, вы можете использовать команду {{ic|loginctl}}. Все действия [[PolicyKit]] наподобие перевода системы в спящий режим или монтирования внешних носителей с помощью [[Udisks]] должны работать автоматически.<br />
<br />
$ loginctl show-session $XDG_SESSION_ID<br />
<br />
== Написание пользовательского .service файла ==<br />
<br />
=== Обработка зависимостей ===<br />
<br />
В случае использования systemd зависимости могут быть разрешены правильным построением файлов юнитов. ,Наиболее частый случай -- когда юниту {{ic|A}} требуется, чтобы юнит {{ic|B}} был запущен перед тем, как запустится сам юнит {{ic|A}}. В этом случае добавьте строки {{ic|1=Requires=B}} и {{ic|1=After=B}} в секцию {{ic|[Unit]}} сервис-файла юнита {{ic|A}}. Если подобная зависимость не является обязательной, добавьте соответственно взамен указанных выше строки {{ic|1=Wants=B}} и {{ic|1=After=B}}. Обратите внимание, что {{ic|1=Wants=}} и {{ic|1=Requires=}} не подразумевают {{ic|1=After=}}, что означает, что если {{ic|1=After=}} не определено, два юнита будут запущены параллельно друг другу.<br />
<br />
Обычно зависимости указываются в сервис-файлах, а не в целевых юнитах. Например, {{ic|network.target}} потребуется любому сервису, который связан с настройкой ваших сетевых интерфейсов, поэтому в любом случае определите загрузку вашего пользовательского юнита после запуска {{ic|network.target}}.<br />
<br />
=== Тип ===<br />
<br />
Существует несколько различных типов запуска служб, которые надо иметь в виду при написании пользовательского сервис-файла. Тип запуска определяется параметром {{ic|1=Type=}} в секции {{ic|[Service]}}. Обратитесь к руководству {{ic|man systemd.service}} для получения более детального объяснения.<br />
<br />
* {{ic|1=Type=simple}}: systemd предполагает, что сервис будет запущен незамедлительно. Процесс при этом не должен форкнуться. Не используйте этот тип, если другим сервисы зависят от очередности при запуске данного сервиса, за исключением активации сокета.<br />
* {{ic|1=Type=forking}}: systemd предполагает, что сервис запускается однократно, процесс форкается и родительский процесс завершается. Используйте данный тип для запуска классических демонов за исключением тех случаев, когда, как вам известно, в таком поведении процесса нет необходимости. Вам следует также определить {{ic|1=PIDFile=}}, чтобы systemd могла отслеживать основной процесс.<br />
* {{ic|1=Type=oneshot}}: Полезен для скриптов, которые выполняют одну работу, а потом завершаются. Вам может понадобиться также установить параметр {{ic|1=RemainAfterExit=}}, чтобы systemd по-прежнему считала процесс активным, даже после его завершения<br />
* {{ic|1=Type=notify}}: Идентичен параметру {{ic|1=Type=simple}}, но с той оговоркой, что демон пошлет systemd сигнал о своей готовности. Эталонная реализация данного уведомления обеспечивается библиотекой {{ic|libsystemd-daemon.so}}.<br />
* {{ic|1=Type=dbus}}: Сервис считается находящимся в состоянии готовности, когда определенное {{ic|BusName}} появляется в системной шине DBus.<br />
<br />
=== Замена предоставленных пакетами файлов юнитов ===<br />
<br />
Файлы юнитов в директории {{ic|/etc/systemd/system/}} имеют приоритет над такими же файлами в директории {{ic|/usr/lib/systemd/system/}}.<br />
Для создания собственной версии юнита (который не будет затерт при обновлении), скопируйте старый юнит из директории {{ic|/usr/lib/}} в директорию {{ic|/etc/}} и внесите в эту копию свои изменения. Альтернативным вариантом является использование {{ic|.include}} для парсинга существующего сервис-файла и затем переопределения или добавления новых опций. Например, если вы просто хотите добавить в сервис-файл дополнительную зависимость, вы можете использовать такую команду в юните:<br />
<br />
{{hc|/etc/systemd/system/<service-name>.service|2=<br />
.include /usr/lib/systemd/system/<service-name>.service<br />
<br />
[Unit]<br />
Requires=<new dependency><br />
After=<new dependency>}}<br />
<br />
Затем выполните следующие команды для того, чтобы изменения вступили в силу:<br />
<br />
# systemctl reenable <unit><br />
# systemctl restart <unit><br />
<br />
{{Tip|Вы можете использовать команду {{ic|systemd-delta}}, чтобы увидеть, какие файлы юнитов были переопределены и что в точности было изменено.}}<br />
<br />
=== Подсветка синтаксиса файлов юнитов в Vim ===<br />
<br />
подсветка синтаксиса файлов юнитов для systemd в редакторе [[Vim]] может быть осуществлена путем установки пакета {{AUR|vim-systemd}} из [[Arch User Repository|AUR]].<br />
<br />
== Уровни запуска/цели ==<br />
<br />
Уровни запуска (по-английски уровень запуска - runlevel) для systemd являются устаревшей концепцией. Systemd использует ''цели'' (англ. target), которые выполняют ту же задачу, что и уровни запуска, но действуют немного по-другому. Каждая ''цель'' поименована (т.е. имеет собственное имя, а не номер) и, как предполагается, предназначена для конкретных задач; возможно иметь в одно и то же время активными несколько таких целей. Некоторые ''цели'' реализованы так, что наследуют все сервисы других ''целей'' и добавляют к ним свои сервисы. В systemd имеются также ''цели'', которые имитируют общие уровни запуска SystemVinit, поэтому вы можете переключаться между целевыми юнитами с использованием привычной команды {{ic|telinit RUNLEVEL}}. <br />
<br />
=== Получение информации о текущем уровне запуска/цели ===<br />
<br />
При использовании systemd для этого предназначена следующая команда (заменяющая {{ic|runlevel}}):<br />
<br />
$ systemctl list-units --type=target<br />
<br />
=== Создание пользовательской цели ===<br />
<br />
Уровни загрузки, по которым расписаны конкретные задачи на установке дистрибутива Fedora по умолчанию - 0, 1, 3, 5 и 6; есть маппинг 1:1 с помощью конкретной цели systemd. К сожалению, не существует хорошего способа сделать то же самое для определяемых пользователем уровней, таких, как 2 и 4. Использование их предполагает, что вы создаете новый именованный '' целевой юнит''systemd наподобие {{ic|/etc/systemd/system/<your target>}}, который берет за основу один из существующих уровней запуска (взгляните, например, на {{ic|/usr/lib/systemd/system/graphical.target}}), создаете также директорию {{ic|/etc/systemd/system/<your target>.wants}} и затем символические ссылки на те дополнительные сервисы из директории {{ic|/usr/lib/systemd/system/}}, которые вы хотите включить при загрузке.<br />
<br />
== Таблица уровней запуска и их аналогов в Systemd ==<br />
<br />
{| class="wikitable" border="1" cellpadding="5" cellspacing="0"<br />
! Уровнень запуска SysV !! systemd Target !! Примечание<br />
|-<br />
| 0 || runlevel0.target, poweroff.target || Выключить систему.<br />
|-<br />
| 1, s, single || runlevel1.target, rescue.target || Однопользовательский уровень запуска.<br />
|-<br />
| 2, 4 || runlevel2.target, runlevel4.target, multi-user.target || Уровень запуска, определенный пользователем/специфичный для узла. По умолчанию соответствует уровню запуска 3.<br />
|-<br />
| 3 || runlevel3.target, multi-user.target || Многопользовательский режим без графики. Пользователи, как правило, входят с помощью множества консолей или через сеть.<br />
|-<br />
| 5 || runlevel5.target, graphical.target || Многопользовательский режим с графикой. Обычно эквивалентен запуску всех сервисов уровня 3 и графическому менеджеру входа.<br />
|-<br />
| 6 || runlevel6.target, reboot.target || Перезагрузка.<br />
|-<br />
| emergency || emergency.target || Аварийная оболочка.<br />
|-<br />
|}<br />
<br />
=== Изменение текущей цели ===<br />
<br />
В systemd цели доступны посредством " целевых юнитов". Вы можете изменить их командой:<br />
<br />
# systemctl isolate graphical.target<br />
<br />
Данная команда изменит только лишь текущую цель и не повлияет на следующую загрузку системы. Она соответствует командам наподобие {{ic|telinit 3}} или {{ic|telinit 5}} для Sysvinit.<br />
<br />
=== Изменение цели для загрузки ===<br />
<br />
Стандартная цель - {{ic|default.target}}, которая по умолчанию является псевдонимом юнита {{ic|graphical.target}} (примерно соответствующего прежнему уровню выполнения 5). Для изменения цели при загрузке по умолчанию, добавьте следующий дополнительный [[kernel parameters|параметр ядра]] в вашем загрузчике:<br />
<br />
{{Tip|Расширение {{ic|.target}} можно опустить.}}<br />
<br />
* {{ic|1=systemd.unit=multi-user.target}} (что примерно соответствует прежнему уровню выполнения 3),<br />
* {{ic|1=systemd.unit=rescue.target}} (что примерно соответствует прежнему уровню выполнения 1).<br />
<br />
Другой путь заключается в том, чтобы оставить загрузчик без изменений и изменить целевой юнит по умолчанию - {{ic|default.target}}, что достигается командой {{ic|systemctl}}:<br />
<br />
# systemctl enable multi-user.target<br />
<br />
Эффект от применения данной команды выводится через {{ic|systemctl}}; символическая ссылка на новый целевой юнит по умолчанию создается в директории {{ic|/etc/systemd/system/default.target}}. Это сработает в том случае (и только в том случае), если имеется следующая секция:<br />
<br />
[Install]<br />
Alias=default.target<br />
<br />
в конфигурационном файле целевого юнита. В настоящий момент как {{ic|multi-user.target}}, так и {{ic|graphical.target}} оба имеют данную секцию.<br />
<br />
== Журнал ==<br />
С версии 38 systemd имеет собственную систему ведения логов - журнал (journal). По умолчанию, более не требуется запуск демона syslog. Для чтения логов используйте команду:<br />
<br />
# journalctl<br />
<br />
По умолчанию (когда в конфигурационном файле {{ic|/etc/systemd/journald.conf}} параметр {{ic|Storage&#61;}} имеет значение {{ic|auto}}) журнал записывается в директорию {{ic|/run/systemd/journal}}. Если директория {{ic|/var/log/journal/}} не существует (например, вы или какая-либо программа удалили ее), systemd '''не''' создаст ее автоматически, но вместо этого запишет свои логи в директорию {{ic|/run/systemd/journal}}. Это означает, что логи будут потеряны при перезагрузке.<br />
<br />
=== Фильтрация вывода ===<br />
<br />
{{ic|journalctl}} позволяет фильтровать вывод по особым полям.<br />
<br />
Примеры:<br />
<br />
Показать все сообщения с момента текущей загрузки системы:<br />
<br />
# journalctl -b<br />
<br />
Последние сообщения:<br />
<br />
# journalctl -f<br />
<br />
Показать все сообщения определенной программы:<br />
<br />
# journalctl /usr/lib/systemd/systemd<br />
<br />
Показать все сообщения определенного процесса:<br />
<br />
# journalctl _PID=1<br />
<br />
Показать все сообщения определенного юнита:<br />
<br />
# journalctl -u netcfg<br />
<br />
Обратитесь к {{ic|man journalctl}} и {{ic|systemd.journal-fields}} или [http://0pointer.de/blog/projects/journalctl.html блог Леннерта (англ.)] для получения детальной информации.<br />
<br />
=== Ограничение размера журнала ===<br />
<br />
Если журнал сохраняется при перезагрузке, размер его по умолчанию ограничен значением в 10% от объема соответствующей файловой системы. Например, для директории {{ic|/var/log/journal}}, расположенной на корневом разделе в 50 Гбайт, максимальный размер журналируемых данных составит до 5 Гбайт. Максимальный объем постоянного журнала можно контролировать при помощи значения {{ic|SystemMaxUse}} в конфигурационном файле {{ic|/etc/systemd/journald.conf}}, поэтому для ограничения его объемом в 50 Mбайт раскомментируйте и отредактируйте соответствующую строку:<br />
<br />
SystemMaxUse=50M<br />
<br />
Обратитесь к {{ic|man journald.conf}} для получения дальнейшей информации.<br />
<br />
=== Journald в связке с классическим демоном syslog ===<br />
<br />
Совместимость с классической реализацией syslog обеспечивается сокетом {{ic|/run/systemd/journal/syslog}}, в который перенаправляются все сообщения. Чтобы дать возможность демону syslog работать вместе с журналом systemd, следует привязать данный демон к указанному сокету вместо {{ic|/dev/log}} ([http://lwn.net/Articles/474968/ официальное сообщение]). Пакетом {{pkg|syslog-ng}} в репозиториях автоматически предоставляется необходимая конфигурация.<br />
<br />
# systemctl enable syslog-ng<br />
<br />
== Сеть ==<br />
<br />
{{Warning|Данный раздел в английской версии включен в состав статьи [[Configuring Network]]; в русской версии временно оставлен из-за того, что русский вариант [[Configuring Network (Русский)]] устарел в сравнении с английским.}}<br />
<br />
=== Динамическое подключение (DHCP) с использованием dhcpcd ===<br />
<br />
Если хотите использовать только DHCP для своего соединения Ethernet, вы можете воспользоваться сервисом {{ic|dhcpcd@.service}} (который поставляется пакетом {{Pkg|dhcpcd}}).<br />
<br />
Чтобы подключить DHCP для {{ic|eth0}}, просто выполните команду:<br />
<br />
# systemctl start dhcpcd@eth0.service<br />
<br />
Вы можете включить этот сервис, и он будет автоматически запускаться при загрузке. Это делается командой:<br />
<br />
# systemctl enable dhcpcd@eth0.service<br />
<br />
Иногда сервис dhcpd запускается до загрузки модуля вашей сетевой карты ({{bug|30235}}), в этом случае вручную добавьте вашу сетевую карту в конфигурационный файл {{ic|/etc/modules-load.d/*.conf}}. Например, для карты Realtek необходима загрузка модуля {{ic|r8169}}, поэтому создайте такой конфигурационный файл:<br />
<br />
{{hc|/etc/modules-load.d/realtek.conf|2=<br />
r8169}}<br />
<br />
=== Другие конфигурации ===<br />
<br />
Для статического подключения, беспроводной сети или сложной конфигурации сети наподобие сетевого моста, вы можете использовать [[Netcfg#systemd_support|netcfg]] или [[NetworkManager#Enable_NetworkManager_under_Native_systemd_system|NetworkManager]], для обоих этих инструментов управления сетью имеются сервис-файлы для systemd.<br />
<br />
{{Note|Если вы хотите использовать netcfg, NetworkManager или другие программы управления сетью, вам не надо в этом случае запускать или включать сервис dhcpcd как показано в предыдущем параграфе.}}<br />
<br />
== Оптимизация ==<br />
<br />
=== Анализ процесса загрузки ===<br />
<br />
==== Использование systemd-analyze ====<br />
<br />
Systemd предоставляет инструмент под названием {{ic|systemd-analyze}}, позволяющий проанализировать процесс загрузки вашей системы, чтобы можно было увидеть, какие файлы юнитов тормозят загрузку. Соответственно, вы можете оптимизировать вашу систему. Для использования данного инструмента вам потребуется установить пакеты {{Pkg|python2-dbus}} и {{Pkg|python2-cairo}}.<br />
<br />
Чтобы увидеть, сколько времени было потрачено на подготовку пространства ядра и пространства пользователя во время загрузки, просто выполните команду:<br />
<br />
$ systemd-analyze<br />
<br />
{{Tip|Чтобы увидеть, сколько времени ушло на загрузку образа initramfs, дополните хуком {{ic|timestamp}} ваш массив {{ic|HOOKS}} из конфигурационного файла {{ic|/etc/[[mkinitcpio]].conf}} и от суперпользователя root пересоберите ваш образ initramfs командой {{ic|mkinitcpio -p linux}} }}<br />
<br />
Чтобы увидеть список запускаемых файлов юнитов, отсортированный по потраченному каждым из них на загрузку времени, выполните команду:<br />
<br />
$ systemd-analyze blame<br />
<br />
Вы также можете создать файл SVG, показывающий процесс загрузки в графическом виде, наподобие [[Bootchart]]:<br />
<br />
$ systemd-analyze plot > plot.svg<br />
<br />
==== Использование bootchart ====<br />
<br />
Вы можете использовать версию bootchart для визуализации последовательности при загрузке системы.<br />
Из-за невозможности использовать стандартные установки bootchart (так как нельзя добавить в командную строку ядра вторую запись init), вам придется воспользоваться пакетом {{AUR|bootchart2}} из [[AUR]], поставляемым с недокументированным сервисом systemd. После установки bootchart2 выполните команду:<br />
<br />
# systemctl enable bootchart<br />
<br />
Обратитесь к [https://github.com/mmeeks/bootchart документации bootchart (англ.)] за дальнейшей и детализированной информацией об использовании данной версии bootchart.<br />
<br />
=== Readahead ===<br />
<br />
systemd поставляется со свой реализации технологии readahead, что в принципе должно усовершенствовать процесс загрузки системы. Однако, в зависимости от версии вашего ядра и типа жесткого диска, скорость обращения к данным может разниться (например, может быть медленнее). Чтобы включить данный сервис, выполните:<br />
<br />
# systemctl enable systemd-readahead-collect systemd-readahead-replay<br />
<br />
Не забудьте, что волшебство технологии readahead подействует только после нескольких перезапусков системы<br />
<br />
=== Ранний старт сервисов ===<br />
<br />
Одним из центральных элементов systemd является [[D-Bus]] и активация сокетов, что требует запуска сервисов при первой потребности в них. Обычно такой подход является удачным, но, если вы знаете, что какой-то сервис (вроде [[UPower]]) должен всегда запускаться во время загрузки системы, то вы можете сократить общее время загрузки, запуская его так рано, как это вообще возможно. Этого можно добиться (если сервис-файл устроен соответствующим образом, что верно в большинстве случаев) путем выполнения команды:<br />
<br />
# systemctl enable upower<br />
<br />
Это заставит systemd запустить UPower так рано, как это возможно, не устраивая перегонки данного сервиса с активацией сокета или D-Bus.<br />
<br />
=== Уменьшение вывода во время загрузки ===<br />
<br />
Измените параметр {{ic|verbose}} на {{ic|quiet}} в строке загрузки ядра вашего загрузчика. Для некоторых систем, в частности с SSD, узким местом является низкая производительность TTY, поэтому уменьшение вывода информации означает прирост скорости загрузки.<br />
<br />
== Устранение неполадок ==<br />
<br />
=== Выключение/перезагрузка происходят ужасно долго ===<br />
<br />
Если процесс выключения занимает очень долгое время (или, по-видимому, зависает), то, вероятно, виноват сервис, который не завершает свою работу. systemd ожидает некоторое время, пока каждый сервис завершит свою работу самостоятельно, и только потом пытается принудительно завершить (kill) его. Если вы столкнулись с такой проблемой, обратитесь к [http://freedesktop.org/wiki/Software/systemd/Debugging#Shutdown_Completes_Eventually данной статье (англ.)].<br />
<br />
== Полезные ссылки ==<br />
<br />
*[http://www.freedesktop.org/wiki/Software/systemd Официальный веб-сайт (англ.)]<br />
*[http://0pointer.de/public/systemd-man/ Страницы руководств (англ.)]<br />
*[http://freedesktop.org/wiki/Software/systemd/Optimizations systemd Optimizations (англ.)]<br />
*[http://www.freedesktop.org/wiki/Software/systemd/FrequentlyAskedQuestions FAQ (англ.)]<br />
*[http://www.freedesktop.org/wiki/Software/systemd/TipsAndTricks Tips And Tricks (англ.)]<br />
*[http://0pointer.de/public/systemd-ebook-psankar.pdf systemd для администраторов (PDF) - перевод цикла статей Леннарта Поттеринга (Lennart Poettering) (англ.)]<br />
*[http://0pointer.de/blog/projects/systemd.html Блог Lennart'а (англ.)]<br />
*[http://archlinux.org.ru/forum/viewtopic.php?f=9&t=9581 systemd mini FAQ]<br />
*[http://fedoraproject.org/wiki/Systemd Fedora Linux Wiki: Systemd (англ.)]<br />
*[http://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet Fedora's SysVinit to systemd cheatsheet (англ.)]<br />
*[http://wiki.russianfedora.ru/index.php/Systemd systemd - база знаний проекта Fedora]<br />
*[http://wiki.debian.org/ru/Systemd Debian Wiki: systemd - менеджер системы и сервисов]<br />
*[http://wiki.ubuntu.com/systemd Ubuntu Wiki: systemd (англ.)]</div>Archvillhttps://wiki.archlinux.org/index.php?title=Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=235565Systemd (Русский)2012-11-15T17:35:29Z<p>Archvill: /* Установка */ fix</p>
<hr />
<div>{{DISPLAYTITLE:systemd (Русский)}}<br />
[[Category:Русский]]<br />
[[Category:Процесс Загрузки (Русский)]]<br />
[[en:systemd]]<br />
[[es:systemd]]<br />
[[fr:systemd]]<br />
[[it:systemd]]<br />
[[ja:Systemd]]<br />
[[zh-CN:systemd]]<br />
{{Article summary start|Сводка}}<br />
{{Article summary text|Статья охватывает установку и настройку systemd.}}<br />
{{Article summary heading|Связанные статьи}}<br />
{{Article summary wiki|systemd/User}}<br />
{{Article summary wiki|systemd/Services}}<br />
{{Article summary wiki|systemd FAQ}}<br />
{{Article summary wiki|init Rosetta (Русский)}}<br />
{{Article summary wiki|udev (Русский)}}<br />
{{Article summary end}}<br />
Цитата с [http://freedesktop.org/wiki/Software/systemd веб-страницы проекта]:<br />
<br />
''"'''systemd''' - система [инициализации] и менеджер служб для Linux, совместимые со скриптами инициализации SysV и LSB. '''systemd''' обеспечивает возможности агрессивной параллелизации, использует сокеты и активацию [[D-Bus]] для запускаемых служб, предлагает запуск демонов по необходимости, отслеживает процессы при помощи [[cgroups|контрольных групп]] Linux, поддерживает мгновенные снимки и восстановление состояния системы, монтирование и точки монтирования, а также внедряет основанную на зависимостях логику контроля процессов сложных транзакций. Эта система может выступать заменой [[SysVinit|sysvinit]]."''.<br />
<br />
{{Note|1=За детальным объяснением причин происходящего перехода Arch'а на systemd обратитесь к [https://bbs.archlinux.org/viewtopic.php?pid&#61;1149530#p1149530 сообщению на англоязычном форуме].}}<br />
<br />
Смотрите также [[Wikipedia:Systemd|статью в Википедии]].<br />
<br />
== Соображения перед началом миграции ==<br />
<br />
* Настоятельно рекомендуется перейти на новую конфигурацию '''initscripts''', описанную в статье [[rc.conf (Русский)|rc.conf]]. Сконфигурировав таким образом свою систему, вы проделаете бóльшую часть работы, необходимую для миграции на systemd.<br />
* Почитайте про systemd на [http://freedesktop.org/wiki/Software/systemd/ сайте разработчиков].<br />
* Обратите внимание, что systemd имеет собственный '''журнал (journal)''', заменяющий '''syslog''', хотя оба варианта ведения логов могут сосуществовать. Обратитесь к приведенному ниже [[#Журнал|разделу, посвященному журналу]].<br />
* Хотя systemd вполне способна заменить определенную функциональность таких демонов, как '''cron''', '''acpid''' или '''xinetd''', но если вы не хотите, можете не отказываться от использования традиционных демонов.<br />
* Интерактивные загрузочные скрипты (initscripts) не работают с systemd. В частности, '''netcfg-menu''' [https://bugs.archlinux.org/task/31377 не может] использоваться при загрузке системы.<br />
<br />
== Установка ==<br />
<br />
{{Note|Оба пакета - {{pkg|systemd}} и {{pkg|systemd-sysvcompat}} - ставаятся по умолчанию при установке с носителя новее, чем [https://www.archlinux.org/news/systemd-is-now-the-default-on-new-installations/ 2012-10-13].}}<br />
<br />
Следующий раздел предназначен для тех установок Arch Linux, которые все еще зависят от пакетов {{pkg|sysvinit}} и {{pkg|initscripts}} и не перешли на использование {{pkg|systemd}}.<br />
<br />
# Установите пакет {{pkg|systemd}} и добавьте следующую запись к командной строке загрузки ядра: {{ic|1=init=/usr/lib/systemd/systemd}}<br />
<br />
# выполнив это, вы сможете включать или отключать любой необходимый сервис путем применения команды {{ic|systemctl enable <service_name>}} (это примерно соответствует тому, что включалось в массив {{ic|DAEMONS}}).<br />
<br />
# Перезагрузите свою систему и убедитесь, что {{ic|systemd}} в настоящее время активен, выполнив слудующую команду: {{ic|$ cat /proc/1/comm}}. Данная команда должна вернуть строку {{ic|systemd}}.<br />
<br />
# Удалите {{pkg|initscripts}} и {{pkg|sysvinit}} из вашей системы и установите {{pkg|systemd-sysvcompat}}.<br />
<br />
# В последнюю очередь удалите параметр {{ic|1=init=/usr/lib/systemd/systemd}}, поскольку необходимости в нем более нет. parameter as it is no longer requir<br />
<br />
=== Дополнительная информация ===<br />
<br />
* Если в параметрах ядра имеется значение {{ic|quiet}}, вероятно, вам стоит удалить его для нескольких первых загрузок systemd, чтобы видеть возникающие во время загрузке проблемы.<br />
<br />
* Теперь добавлять вашего пользователя в [[Users and Groups|группы]] ({{ic|optical}}, {{ic|audio}}, {{ic|scanner}}, ...) в большинстве случаев '''нет''' необходимости при использовании systemd. Это даже может нарушить работоспособность системы. Например, добавление в группу audio может привести к невозможности быстрого переключения между пользователями и позволит приложениям заблокировать программное микширование. Каждый вход PAM предоставляет сессию login, которое дает вам разрешения для локальной сессии посредством [[Wikipedia:Access control list|POSIX ACLs]] на аудио/видео устройства и позволяет выполнять некоторые операции, такие, как как монтирование съемных носителей через [[udisks]]. <br />
<br />
{{Note|Systemd-logind заменил [[ConsoleKit]], удаленный из репозиториев, поэтому для полной функциональности теперь система должна загружаться с использованием systemd. Смотрите [http://archlinux.org.ru/node/352/ новость] для получения дальнейшей информации.}<br />
<br />
Ранее ConsoleKit обеспечивал подобные разрешения для устройств на основе ACL и разрешения polkit для локальных сессий.}}<br />
<br />
== Родные системные файлы ==<br />
<br />
{{Note|Возможно, вам придется создать эти файлы. Установите для всех файлов права доступа 644 и владельца root:root.}}<br />
<br />
=== Имя компьютера (hostname) ===<br />
<br />
Имя компьютера настраивается в файле {{ic|/etc/hostname}}. Этот файл не должен содержать системный домен (если таковой имеется). Для установки имени компьютера выполните:<br />
<br />
# hostnamectl set-hostname '''myhostname'''<br />
<br />
Обратитесь к руководствам {{ic|man 5 hostname}} и {{ic|man hostnamectl}} для получения более подробной информации.<br />
<br />
Вот примерный файл:<br />
<br />
{{hc|/etc/hostname|<br />
myhostname<br />
}}<br />
<br />
=== Локаль ===<br />
<br />
Системная локаль по умолчанию настраивается в конфигурационном файле {{ic|/etc/locale.conf}}. Для установки локали по умолчанию выполните:<br />
<br />
# localectl set-locale LANG="ru_RU.UTF-8"<br />
<br />
{{Note|Перед установкой локали по умолчанию вам сперва необходимо сделать локали доступными системе, раскомментировав их в файле {{ic|/etc/locale.gen}} и затем выполнив команду {{ic|locale-gen}} от суперпользователя root. Локаль, установленная командой {{ic|localectl}}, должна быть одной из '''раскомментированных''' локалей в файле {{ic|/etc/locale.gen}}.}}<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 localectl}} и {{ic|man 5 locale.conf}}.<br />
* Дальнейшая информация содержится в статье [[Locale]].<br />
<br />
Вот примерный файл:<br />
<br />
{{hc|/etc/locale.conf|2=<br />
LANG=ru_RU.utf8}}<br />
<br />
=== Консоль и раскладка клавиатуры ===<br />
<br />
Файл {{ic|/etc/vconsole.conf}} устанавливает настройки виртуальной консоли (раскладку клавиатуры и консольный шрифт).<br />
<br />
{{hc|/etc/vconsole.conf|2=<br />
KEYMAP=ru<br />
FONT=cyr-sun16<br />
FONT_MAP=}}<br />
<br />
{{Note|С версии {{Pkg|systemd}}-194 используются шрифт ядра и раскладку по умолчанию (т.е. американскую английскую). Нет более необходимости (для тех, кто использует американскую английскую раскладку) настраивать в конфигурационном файле строки {{ic|1=KEYMAP=}} и {{ic|1=FONT=}}, их можно оставить пустыми.}}<br />
<br />
Другой способ настройки раскладки клавиатуры в консоли состоит в использовании команды:<br />
<br />
# localectl set-keymap ru<br />
<br />
Преимущество такого подхода - в том, что он также установит указанную раскладку клавиатуры и для X11.<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 localectl}} и {{ic|man 5 vconsole.conf}}.<br />
* Для получения детальной информации обратитесь к разделам [[Fonts#Console_fonts|консольные шрифты (англ.)]] и [[KEYMAP|раскладка клавиатуры (англ.)]].<br />
<br />
=== Временная зона ===<br />
<br />
Временная зона настраивается путем создания соответствующей символической ссылки {{ic|/etc/localtime}} на файл временной зоны в директории {{ic|/usr/share/zoneinfo/}}. Чтобы сделать это автоматически, выполните команду:<br />
<br />
# timedatectl set-timezone Europe/Moscow<br />
<br />
Для получения подробной информации о вариантах настройки обратитесь к руководствам {{ic|man 1 timedatectl}} и {{ic|man 5 localtime}} и {{ic|man 7 archlinux}}.<br />
<br />
{{Note|Прежний конфигурационный файл {{ic|/etc/timezone}} объявлен устаревшим с выходом {{pkg|systemd}}-190 и должен быть удален.}}<br />
<br />
Альтернативный метод - создание символической ссылки вручную:<br />
<!-- использовать относительную символическую ссылку! --><br />
# ln -sf ../usr/share/zoneinfo/Europe/Moscow /etc/localtime<br />
<br />
=== Аппаратные часы ===<br />
<br />
Systemd будет использовать UTC для аппаратных часов по умолчанию.<br />
{{Tip|Обычно рекомендуется запускать [[NTP|демон Network Time Protocol]] для поддержания синхронизации аппаратных часов с системным временем.}}<br />
<br />
==== Аппаратные часы по localtime ====<br />
<br />
Если вы собираетесь выставить аппаратные часы по localtime (местному времени, что '''КАТЕГОРИЧЕСКИ НЕ РЕКОМЕНДУЕТСЯ'''), выполните команду:<br />
<br />
# timedatectl set-local-rtc true<br />
<br />
Если же захотите вернуть ваши аппаратные часы к использованию временного формата UTC, выполните:<br />
<br />
# timedatectl set-local-rtc false<br />
<br />
Помните, что настройка перехода на зимнее/летнее время - неблагодарное занятие. Если переход на зимнее/летнее время происходит в тот момент, когда ваш компьютер выключен, то при следующей загрузке ваши часы будут показывать ошибочное время ([http://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html здесь об этом чуть подробнее (англ.)]). Последние версии ядра устанавливают системное время из RTC (часов реального времени) непосредственно во время загрузки без использования {{ic|hwclock}}, при этом ядро всегда считает, что RTC выставлено по UTC. Это означает, что если RTC выставлено по местному времени (local time), системное время будет изначально установлено ошибочно и затем корректироваться вскоре после этого при каждой загрузке. Это является причиной некоторых досадных багов (идущие назад часы редко являются нужной вещью).<br />
<br />
Причиной, позволяющей RTC быть выставленными по местному времени, является двойная загрузка системы с Windows, ([http://blogs.msdn.com/b/oldnewthing/archive/2004/09/02/224672.aspx которая использует localtime (англ.)]). Windows воспринимает RTC, выставленные по UTC при помощи простого [[Time#UTC in Windows|исправления реестра (англ.)]]. Если вы столкнетесь с подобными проблемами при двойной загрузке с Windows, вы можете установить аппаратные часы на использование местного времени. <br />
<br />
Если вы настроите Windows на использование UTC, также не забудьте отключить функцию "Обновление времени по Интернету" ("Internet Time Update"), иначе для Windows возникнет проблема с аппаратными часами, поскольку система будет пытаться синхронизировать их с временем через Интернет. Вместо этого следует оставить время в формате RTC и синхронизовать через Интернет в Linux посредством демона [[NTP]], как это предлагалось выше.<br />
<br />
* За дальнейшей информацией обратитесь к статье [[Time]].<br />
<br />
=== Подгружаемые модули ядра ===<br />
<br />
Сегодня все необходимые модули для загрузки подгружаются автоматически с помощью [[Udev]], так что, если вам не надо (или же вы не должны) использовать какой-нибудь модуль не из дерева ядра , нет необходимости дополнительно помещать какие-либо модули в какой-то файл конфигурации загрузки. Тем не менее, бывают случаи, когда вы можете подгрузить дополнительный модуль в процессе загрузки или поместить какой-то модуль в черный список, чтобы ваш компьютер работал правильно.<br />
<br />
==== Дополнительно подгружаемые при загрузке модули ====<br />
<br />
Необходимые для загрузки дополнительные модули оформляются в статический список файлов в директории {{ic|/etc/modules-load.d/}}. Каждый из конфигурационных файлов имеет наименование вида {{ic|/etc/modules-load.d/<program>.conf}} (где <program> - имя подгружаемого модуля) и содержит список имен подгружаемых модулей ядра, каждое из которых начинается с новой строки. При этом игнорируются как пустые строки конфигурационных файлов, так и строки, у которых первым символом, отличным о пробела, является символ {{ic|#}} и {{ic|;}}. Например:<br />
<br />
{{hc|/etc/modules-load.d/virtio-net.conf|<br />
# Load virtio-net.ko at boot<br />
virtio-net}}<br />
<br />
Более подробная информация содержится в руководстве {{ic|man 5 modules-load.d}}.<br />
<br />
==== Черный список ====<br />
<br />
Добавление модулей в черный список работает также, как и в случае с {{Pkg|initscripts}}, поскольку в действительности эта функция выполняется таким инструментом, как {{Pkg|kmod}}. Обратитесь к разделу [[Kernel_modules#Blacklisting|Module Blacklisting]] за более подробной информацией.<br />
<br />
=== Монтирование файловых систем ===<br />
<br />
Установка по умолчанию автоматически проверяет файловые системы командой fsck и монтирует файловые системы перед запуском тех сервисов, котрым необходимо иметь эти системы примонтированными. Например, systemd позволяет в автоматическом режиме добиться, что удаленные файловые системы наподобие [[NFS]] и [[Samba]] подключаются после поднятия сети. Поэтому монтирование как локальных, так и удаленных файловых систем, прописанных в {{ic|/etc/fstab}} должно работать "из коробки".<br />
<br />
Обратитесь к руководству {{ic|man 5 systemd.mount}} для получения более подробной информации.<br />
<br />
==== Автомонтирование ====<br />
<br />
* Если ваш раздел {{ic|/home}} занимает большой объем, лучшим вариантом было бы позволить сервисам не зависеть от подключения {{ic|/home}} и запускать данные сервисы, когда {{ic|/home}} еще подвергается проверке при загрузке системы. Добиться такого результата можно добавлением следующих параметров в запись файла {{ic|/etc/fstab}}, касающуюся раздела {{ic|/home}}:<br />
<br />
noauto,x-systemd.automount<br />
<br />
Такие параметры вызовут команду fsck и примонтируют {{ic|/home}} при первом обращении к данному разделу, и ядро будет буферизовать все файлы доступа к {{ic|/home}} до готовности данного раздела.<br />
<br />
* То же самое применимо и к удаленным файловым системам. Если вы хотите, чтобы монтирование данных систем происходило только по мере доступа к ним, вы можете использовать параметр {{ic|1=x-systemd.device-timeout=#}} в файле {{ic|/etc/fstab}} для определения таймаута в том случае, кода сетевые ресурсы оказываются недоступны.<br />
<br />
* В случае использования зашифрованных файловых систем с ключами доступа, вам также Iследует добавить параметр {{ic|noauto}} в соответствующие записи файла {{ic|/etc/crypttab}}. systemd не будет подключать зашифрованные устройства при загрузке, но, вместо этого, дождется реального обращения к ним и автоматически откроет к ним доступ с использованием определенных ключей перед тем, как они будут примонтированы. Это сэкономит несколько секунд при загрузке системы, например, в случае использования зашифрованного устройства RAID, потому что systemd не будет дожидаться от устройства, когда оно станет доступным. Например:<br />
<br />
{{hc|/etc/crypttab|<br />
data /dev/md0 /root/key noauto}}<br />
<br />
=== LVM ===<br />
<br />
Если у вас имеются тома LVM, не активированные посредством [[Mkinitcpio|initramfs]], включите сервис {{ic|lvm.service}} (предоставляемый пакетом {{pkg|lvm2}}):<br />
<br />
# systemctl enable lvm<br />
<br />
Точно так же, если у вас LVM на устройствах с шифрованием, монтируемым позже в процессе загрузки (например, из {{ic|/etc/crypttab}}), вам необходимо включить сервис {{ic|lvm-on-crypt.service}} (также предоставляемый пакетом {{pkg|lvm2}}):<br />
<br />
# systemctl enable lvm-on-crypt<br />
<br />
=== Управлением питанием ACPI ===<br />
<br />
Systemd обрабатывает некоторые события, связанные с [http://кru.wikipedia.org/wiki/ACPI ACPI], что настраивается при помощи параметров в конфигурационном файле {{ic|/etc/systemd/logind.conf}}:<br />
<br />
* {{ic|HandlePowerKey}}: определяет действия системы при нажатии кнопки питания (вкл./выкл.).<br />
* {{ic|HandleSuspendKey}}: определяет действия системы при нажатии кнопки спящего режима.<br />
* {{ic|HandleHibernateKey}}: определяет действия системы при нажатии кнопки ждущего режимаs.<br />
* {{ic|HandleLidSwitch}}: определяет действия системы при закрытии крышки компьютера.<br />
<br />
Для соответствующих действий могут использоваться значения {{ic|ignore}} (пропустить), {{ic|poweroff}} (отключить питание), {{ic|reboot}} (перезагрузить), {{ic|halt}} (выключить), {{ic|suspend}} (включить спящий режим), {{ic|hibernate}} (включить ждущий режим) или {{ic|kexec}} (системный вызов позволяющий оперативно переключиться в другое ядро).<br />
<br />
Если данные параметры не определены, по умолчанию systemd будет использовать следующие: {{ic|1=HandlePowerKey=poweroff}}, {{ic|1=HandleSuspendKey=suspend}}, {{ic|1=HandleHibernateKey=hibernate}}, и {{ic|1=HandleLidSwitch=suspend}}.<br />
<br />
В системах без графического интерфейса или использующих простые оконные менеджеры наподобие like [[i3]] или [[awesome]], так можно заменить демон [[acpid]], который обычно используется для реагирования на данные события ACPI.<br />
<br />
В текущей версии systemd параметры {{ic|Handle}} будут применены ко всей системе, если только они не "подавляются (временно отключены) другой программой, такой, как менеджер питания данного окружения рабочего стола. Если эти ограничений нет, вы можете столкнуться с ситуацией, когда systemd приводит вашу систему в спящий режим, а затем, когда система пробуждается менеджером управлением питания, снова "усыпляет" ее.<br />
<br />
{{Warning|В настоящее время менеджеры управления питанием в новейших версиях сред [[KDE]] и [[GNOME]] являются единственными, которые использюет такие команды "подавления". До тех пор, пока их не будут применять другие менеджеры, вам надо выставить в параметрах {{ic|Handle}} значение {{ic|ignore}}, если вы хотите, чтобы события ACPI обрабатывались в случае использования [[Xfce]], [[acpid]] или других программ. Но на подходе новые версии, которые включат данную функциональность.}}<br />
<br />
{{Note|Systemd также может использовать для перевода системы в спящий/ждущий режим другие движки (такие, как [[Uswsusp]] или [[TuxOnIce]]), в дополнение к движку ''ядра''.}}<br />
<br />
==== Хуки спящего режима ====<br />
<br />
Systemd в своих командах {{ic|systemctl suspend}} или {{ic|systemctl hibernate}} не использует [[pm-utils]] для "усыпления" машины; хуки [[pm-utils]], включая любые [[Pm-utils#Creating_your_own_hooks|пользовательские хуки]] не будут работать. Тем не менее, systemd предоставляет схожий механизм запуска пользовательских скриптов для данных событий. Systemd запускает все исполняемые файлы в директории {{ic|/usr/lib/systemd/system-sleep/}}, передавая каждому из них два аргумента:<br />
<br />
* Аргумент 1: или {{ic|pre}}, или {{ic|post}}, в зависимости от которых машина либо "уснет", либо будет "пробуждена";<br />
* Аргумент 2: или {{ic|suspend}}, или {{ic|hibernate}}, в зависимости от того, что было вызвано.<br />
<br />
В отличие от [[pm-utils]], systemd запустит данные скрипты одновременно, а не один после другого.<br />
<br />
Вывод любого пользовательского скрипта будет записан сервисом {{ic|systemd-suspend.service}} или {{ic|systemd-hibernate.service}}. Вы вы можете увидеть данный выход в [[#Журнал systemd|журнале]] systemd:<br />
<br />
# journalctl -b -u systemd-suspend<br />
<br />
Обратите внимание, что вместо использования скриптов вы также можете использовать специальные целевые юниты - {{ic|sleep.target}}, {{ic|suspend.target}} или {{ic|hibernate.target}} для того, чтобы подключить к другим юнитам возможности перехода в спящий режима.<br />
<br />
Пример пример пользовательского скрипта по переходу в спящий режим:<br />
<br />
{{hc|/usr/lib/systemd/system-sleep/example.sh|<br />
#!/bin/sh<br />
case $1/$2 in<br />
pre/*)<br />
echo "Going to $2..."<br />
;;<br />
post/*)<br />
echo "Waking up from $2..."<br />
;;<br />
esac}}<br />
<br />
Обратитесь к руководствам {{ic|man 7 systemd.special}} и {{ic|man 8 systemd-sleep}} для получения дальнейшей информации.<br />
<br />
=== Временные файлы ===<br />
<br />
Systemd-tmpfiles использует конфигурационные файлы в директориях {{ic|/usr/lib/tmpfiles.d/}} и {{ic|/etc/tmpfiles.d/}} для определения действий с временными файлами и директориями (создание, очистка и удаление их), обычно расположенные в {{ic|/run}} or {{ic|/tmp}}. Каждый файл с настройками имеет название вида {{ic|/etc/tmpfiles.d/<program>.conf}}. Данные конфигурационные файлы имеют приоритет по сравнению с любыми файлами с таким же названием, расположенными в директории {{ic|/usr/lib/tmpfiles.d/}}.<br />
<br />
Временные файлы tmpfiles обычно поставляются вместе с сервис-файлами для создания директорийк. которые, как ожидается, будут использоваться определенными демонами. Например, демон [[Samba]] предполагает наличие директории {{ic|/var/run/samba}} с соответствующими правами доступа. В данном случае tmpfile выглядит следующим образом:<br />
<br />
{{hc|/usr/lib/tmpfiles.d/samba.conf|<br />
D /var/run/samba 0755 root root}}<br />
<br />
Тем не менее, tmpfiles также могут использоваться для записи значений в определенные файлы во врем загрузки. К примеру, если вы используете {{ic|/etc/rc.local}} для того, чтобы отключить пробуждение системы USB-устройствами, при помощи команды {{ic|echo USBE > /proc/acpi/wakeup}}, вы можете вместо этого использовать следующий tmpfile:<br />
<br />
{{hc|/etc/tmpfiles.d/disable-usb-wake.conf|<br />
w /proc/acpi/wakeup - - - - USBE}}<br />
<br />
Метод с использованием tmpfiles в данном случае рекомендуется, поскольку systemd в действительности не поддерживает {{ic|/etc/rc.local}}.<br />
<br />
Обратитесь к руководству {{ic|man 5 tmpfiles.d}} за более подробной информацией.<br />
<br />
=== Юнит ===<br />
<br />
Юнит (англ. unit) - конфигурационный файл, содержащий информацию о сервисе (службе), сокете, устройстве, точке монирования/автомонирования, файле подкачке или разделе, определяемом для загрузки уровне запуска, пути в файловой системе или таймере, которые контролируются и управляются при помощи systemd. Синтаксис юнитов навеян спецификацией .desktop-файлов (XDG Desktop Entry Specification), которая, в свою очередь, вдохновлялась .ini-файлами от Microsoft Windows. <br />
<br />
Обратитесь к руководству {{ic|man 5 systemd.unit}} для получения дальнейшей информации.<br />
<br />
== Переход от initscripts к использованию systemd ==<br />
<br />
=== Эмуляция initscripts ===<br />
<br />
Интеграция с классической конфигурацией Arch'а обеспечивается пакетом {{Pkg|initscripts}}. В том случае, если {{Pkg|initscripts}} установлен параллельно с systemd и система загружена с использованием systemd, systemd будет выполнять следующую последовательность действий:<br />
<br />
# # Проводить синтаксический разбор массива {{ic|DAEMONS}} в файле {{ic|/etc/rc.conf}} и запускать при загрузке все находящиеся там демоны (см. ниже)<br />
# Выполнять при загрузке {{ic|/etc/rc.local}}<br />
# Выполнять при завершении работы системы {{ic|/etc/rc.local.shutdown}}<br />
<br />
Эмуляция initscripts рассматривается как просто переходная мера для легкой миграции пользователей на systemd и '''в конечном итоге будет отброшена'''. Система с "родной" systemd не зависит от централизованной конфигурации в {{ic|rc.conf}}, поэтому рекомендуется использовать [[#Родные системные файлы|родные конфигурационные файлы systemd]], которые имеют приоритет над настройками из {{ic|/etc/rc.conf}}.<br />
<br />
{{Note|Рекомендуемый путь по замене {{ic|/etc/rc.local}} состоит в написании пользовательского сервис-файла для всего того, что вы хотите запускать при загрузке системы. Обратитесь к соответствующему [[#Написание_пользовательского_.service_файла|разделу]] данной статьи.}}<br />
<br />
{{Note|Если вы отключали использование сочетания клавиш для перезагрузки системы {{keypress|Ctrl+Alt+Del}} в файле {{ic|/etc/inittab}}, теперь вам надо заново сделать это для systemd командой {{ic|systemctl mask ctrl-alt-del.target}}, выполняемой от суперпользователя root.}}<br />
<br />
==== Отказ от массива DAEMONS ====<br />
<br />
Для "чистой" установки systemd, вы можете полностью удалить файл {{ic|/etc/rc.conf}} и включать сервисы только посредством systemd. Для каждого сервиса с именем {{ic|<service_name>}} в массиве {{ic|DAEMONS}} из файла {{ic|/etc/rc.conf}} выполните команду:<br />
<br />
# systemctl enable <service_name><br />
<br />
{{Tip|Для получения списка обычно используемых демонов с их эквивалентами в initscripts и systemd, обратитесь к [[Daemons List|данной таблице]].}}<br />
<br />
Если сервис-файл {{ic|<service_name>.service}} отсутствует:<br />
<br />
* сервис-файл может быть недоступен для systemd. В этом случае вам нужно сохранить конфигурационный файл {{ic|rc.conf}} для запуска этих сервисов во время загрузки системы.<br />
* Systemd может использовать для сервисов другие имена, например, {{ic|cronie.service}} заменяет демон {{ic|crond}}; {{ic|alsa-store.service}} и {{ic|alsa-restore.service}} заменяют демон {{ic|alsa}}. Другой важный пример - демон {{ic|network}}, которого сменил целый набор сервис-файлов (обратитесь к статье [[Configuring Network]] для получения дальнейшей информации.)<br />
<br />
{{Tip|Вы можете заглянуть вовнутрь пакета, содержащего стартовые скрипты демона, чтобы узнать имена его сервис-файла. К примеру:<br />
$ pacman -Ql cronie<br />
[...]<br />
cronie /etc/rc.d/crond #Демон initscript, указываемый в массиве {{ic|DAEMONS}} (не используется при "чистой" настройке systemd)<br />
[...]<br />
cronie /usr/lib/systemd/system/cronie.service #Соответствующий сервис systemd<br />
[...]<br />
}}<br />
<br />
* Наконец, пользователю не нужно включать некоторые сервисы явным образом. Например, {{ic|dbus.service}} будет включен автоматическики при установке {{ic|dbus-core}}. {{ic|alsa-store.service}} и {{ic|alsa-restore.service}} также включены systemd автоматически. Проверьте список доступных сервисов и их состояние при помощи команды {{ic|systemctl}}, например: {{ic|systemctl status <service_name>}} (где <service_name> - имя сервиса).<br />
<br />
=== Сравнительная таблица устаревшей и "родной" конфигураций ===<br />
<br />
{{Warning|Данный раздел оставлен в русской версии временно, до полной миграции пользователей на использование "чистого" systemd.}}<br />
<br />
{| class="wikitable"<br />
|-<br />
! scope="col"| Настройка<br />
! scope="col"| Конфигурационный файл (файлы)<br />
! scope="col"| Устаревшая секция [https://projects.archlinux.org/initscripts.git/tree/rc.conf?id=97f0cd6751e8d22c14d7492cdc2186cf41157ba6 rc.conf]<br />
|-<br />
| align="center"|Имя компьютера (Hostname)<br />
| align="left"|{{ic|/etc/hostname}}<br />
{{ic|/etc/hosts}}<br />
| align="center"|{{ic|NETWORKING}}<br />
|-<br />
| align="center"|Консоль и раскладка клавиатуры<br />
| align="left"|{{ic|/etc/vconsole.conf}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Локаль<br />
| align="left"|{{ic|/etc/locale.conf}}<br />
{{ic|/etc/locale.gen}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Временная зона<br />
| align="left"|{{ic|/etc/localtime}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Аппаратные часы<br />
| align="left"|{{ic|/etc/adjtime}}<br />
| align="center"|{{ic|LOCALIZATION}}<br />
|-<br />
| align="center"|Модули ядра<br />
| align="left"|{{ic|/etc/modules-load.d/}}<br />
| align="center"|{{ic|HARDWARE}}<br />
|}<br />
<br />
=== Эмуляция /etc/rc.local ===<br />
<br />
{{Warning|Данный раздел оставлен в русской версии временно, до полной миграции пользователей на использование "чистого" systemd.}}<br />
<br />
Если вы хотите при использовании systemd сохранить простоту {{ic|/etc/rc.local}} , вам нужно создать следующий сервис-файл и включить его. Просто добавьте строки {{ic|1=ExecStart=}} для тех команд, которые вы хотите запустить. Если же вам в данном случае требуется более сложная функциональность (например, циклы с {{ic|for}}), то вы можете создать скрипт Bash и выполнять его из сервис-файла. Удалите {{ic|1=ExecStart=/bin/true}}, если вы здесь действительно добавляете команду.<br />
<br />
{{hc|/etc/systemd/system/rc-local.service|<nowiki><br />
[Unit]<br />
Description=/etc/rc.local compatibility<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/bin/true<br />
RemainAfterExit=yes<br />
<br />
[Install]<br />
WantedBy=multi-user.target<br />
</nowiki>}}<br />
<br />
== Основы использования systemctl ==<br />
<br />
Главная команда для наблюдения и контроля за состоянием systemd - команда {{ic|systemctl}}. Некоторые из вариантов ее использования связаны с изучением состояния системы и управлением сервисами. Обратитесь к странцам руководства {{ic|man 1 systemctl}} для получения более детальной информации.<br />
<br />
{{Tip|Вы можете использовать приведенные ниже команды {{ic|systemctl}} с ключом {{ic|-H <user>@<host>}} для того, чтобы контролировать systemd на удаленной машине. В этом случае для соединения с удаленным процессом systemd будет использовать [[SSH]].}}<br />
<br />
{{Note|{{ic|systemadm}} - официальная графическая оболочка для {{ic|systemctl}}. Она доступна в виде пакета {{AUR|systemd-ui-git}} из [[AUR]].}}<br />
<br />
=== Анализ состояния системы ===<br />
<br />
Список запущенных юнитов:<br />
<br />
$ systemctl<br />
<br />
или:<br />
<br />
$ systemctl list-units<br />
<br />
Список юнитов, попытка запуска которых завершилась неудачей:<br />
<br />
$ systemctl --failed<br />
<br />
Доступные юниты можно посмотреть в директориях {{ic|/usr/lib/systemd/system/}} и {{ic|/etc/systemd/system/}} (последняя директория имеет приоритет). Вы можете увидеть список установленных юнитов командой:<br />
<br />
$ systemctl list-unit-files<br />
<br />
=== Использование юнитов ===<br />
<br />
Юниты могут быть сервисами ({{ic|.service}}), точками монтирования ({{ic|.mount}}) или сокетами ({{ic|.sockets}}). При использовании команды {{ic|systemctl}} необходимо всегда указывать полное имя файла, включая расширение. Однако, есть несколько сокращений при определении юнита следующими командами{{ic|systemctl}}:<br />
<br />
* Ели вы не указали суффикс, systemctl предполагает, что это {{ic|.service}}. Например, {{ic|netcfg}} и {{ic|netcfg.service}} будут трактоваться одинаково.<br />
* Точки монтирования будут автоматически преобразованы в соответствующий юнит {{ic|.mount}}. Например, указание {{ic|/home}} равнозначно {{ic|home.mount}}.<br />
* Аналогично точкам монтирования, имена устройств автоматически преобразуются в соответствующий юнит {{ic|.device}}, поэтому указание {{ic|/dev/sda2}} полностью соответствует юниту {{ic|dev-sda2.device}}.<br />
<br />
Обратитесь к руководству {{ic|man systemd.unit}} для получения детальной информации.<br />
<br />
{{Note|При использовании юнитов следует обращать внимание на регистр букв в наименовании сервис-файлов: так, необходимо использовать ''NetworkManager.'''service''' '' (запомните употребление в данном названии букв в верхнем регистре) для включения сервиса NetworkManager'а, в противном случае вы получите сообщение об ошибке и сервис во время загрузки системы не запустится.}}<br />
<br />
Незамедлительно запустить юнит:<br />
<br />
# systemctl start <unit><br />
<br />
Незамедлительно остановить юнит:<br />
<br />
# systemctl stop <unit><br />
<br />
Перезапустить юнит:<br />
<br />
# systemctl restart <unit><br />
<br />
Запросить у юнита перезагрузку его настроек:<br />
<br />
# systemctl reload <unit><br />
<br />
Показать статус юнита, а также запущен он или нет:<br />
<br />
$ systemctl status <unit><br />
<br />
Проверить включение юнита (т.е. разрешен ли юниту запуск при загрузке системы):<br />
<br />
$ systemctl is-enabled <unit><br />
<br />
Включить юнит (разрешить юниту запуск при загрузке системы):<br />
<br />
# systemctl enable <unit><br />
<br />
{{Note| Если сервис-файлы не имеют раздела {{ic|Install}}, это обычно означает, что данные сервисы вызываются автоматически другими сервисами. Но если вам требуется установить их вручную, используйте следующую команду, заменив {{ic|foo}} именем вашего сервиса.<br />
# ln -s /usr/lib/systemd/system/''foo''.service /etc/systemd/system/graphical.target.wants/<br />
}}<br />
<br />
Выключить юнит (запретить юниту запуск при загрузке системы):<br />
<br />
# systemctl disable <unit>}}<br />
<br />
Показать страницу помощи для юнита (необходима поддержка этой функции в указанном файле юнита):<br />
<br />
$ systemctl help <unit><br />
<br />
=== Управление питанием ===<br />
<br />
Если у вас локальная пользовательская сессия {{ic|systemd-logind}} и нет других активных сессий, приведенные ниже команды сработают и без привилегий суперпользователя root. В противном случае (например, вследствие того, что пользователь залогинился в tty), systemd автоматически запросит у вас пароль root.<br />
<br />
Завершить работу и перезагрузить систему:<br />
<br />
$ systemctl reboot<br />
<br />
Завершить работу и выключить компьютер (с отключением питания):<br />
<br />
$ systemctl poweroff<br />
<br />
Завершить работу и остановить систему:<br />
<br />
$ systemctl halt<br />
<br />
Перевести систему в спящий режим:<br />
<br />
$ systemctl suspend<br />
<br />
Перевести систему в ждущий режим:<br />
<br />
$ systemctl hibernate<br />
<br />
== Запуск окружения рабочего стола из systemd ==<br />
<br />
Чтобы включить графический вход в систему, запустите выбранный вами демон [[Display Manager (Русский)|экранного менеджера]] (например, [[KDM]]). В настоящий момент доступны сервис-файлы для [[GDM]], [[KDM]], [[SLiM]], [[XDM]], [[LXDM]] и [[LightDM]].<br />
<br />
# systemctl enable kdm<br />
<br />
Эта команда должна работать "из коробки". Если вдруг она не сработала, то, возможно, у вас {{ic|default.target}} установлен вручную или остался с прежней установки:<br />
<br />
{{hc|# ls -l /etc/systemd/system/default.target|<br />
/etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target}}<br />
<br />
Просто удалите символическую ссылку и systemd будет использовать целевой юнит по умолчанию - {{ic|default.target}} (т.е. {{ic|graphical.target}}).<br />
<br />
# rm /etc/systemd/system/default.target<br />
<br />
=== Использование systemd-logind ===<br />
<br />
{{Note|С 30.10.2012 [[ConsoleKit]] был [http://archlinux.org.ru/node/352/ заменен на systemd-logind] как механизм входа в окружение рабочего стола по умолчанию.}}<br />
<br />
Для того, чтобы проверить статус вашей пользовательской сессии, вы можете использовать команду {{ic|loginctl}}. Все действия [[PolicyKit]] наподобие перевода системы в спящий режим или монтирования внешних носителей с помощью [[Udisks]] должны работать автоматически.<br />
<br />
$ loginctl show-session $XDG_SESSION_ID<br />
<br />
== Написание пользовательского .service файла ==<br />
<br />
=== Обработка зависимостей ===<br />
<br />
В случае использования systemd зависимости могут быть разрешены правильным построением файлов юнитов. ,Наиболее частый случай -- когда юниту {{ic|A}} требуется, чтобы юнит {{ic|B}} был запущен перед тем, как запустится сам юнит {{ic|A}}. В этом случае добавьте строки {{ic|1=Requires=B}} и {{ic|1=After=B}} в секцию {{ic|[Unit]}} сервис-файла юнита {{ic|A}}. Если подобная зависимость не является обязательной, добавьте соответственно взамен указанных выше строки {{ic|1=Wants=B}} и {{ic|1=After=B}}. Обратите внимание, что {{ic|1=Wants=}} и {{ic|1=Requires=}} не подразумевают {{ic|1=After=}}, что означает, что если {{ic|1=After=}} не определено, два юнита будут запущены параллельно друг другу.<br />
<br />
Обычно зависимости указываются в сервис-файлах, а не в целевых юнитах. Например, {{ic|network.target}} потребуется любому сервису, который связан с настройкой ваших сетевых интерфейсов, поэтому в любом случае определите загрузку вашего пользовательского юнита после запуска {{ic|network.target}}.<br />
<br />
=== Тип ===<br />
<br />
Существует несколько различных типов запуска служб, которые надо иметь в виду при написании пользовательского сервис-файла. Тип запуска определяется параметром {{ic|1=Type=}} в секции {{ic|[Service]}}. Обратитесь к руководству {{ic|man systemd.service}} для получения более детального объяснения.<br />
<br />
* {{ic|1=Type=simple}}: systemd предполагает, что сервис будет запущен незамедлительно. Процесс при этом не должен форкнуться. Не используйте этот тип, если другим сервисы зависят от очередности при запуске данного сервиса, за исключением активации сокета.<br />
* {{ic|1=Type=forking}}: systemd предполагает, что сервис запускается однократно, процесс форкается и родительский процесс завершается. Используйте данный тип для запуска классических демонов за исключением тех случаев, когда, как вам известно, в таком поведении процесса нет необходимости. Вам следует также определить {{ic|1=PIDFile=}}, чтобы systemd могла отслеживать основной процесс.<br />
* {{ic|1=Type=oneshot}}: Полезен для скриптов, которые выполняют одну работу, а потом завершаются. Вам может понадобиться также установить параметр {{ic|1=RemainAfterExit=}}, чтобы systemd по-прежнему считала процесс активным, даже после его завершения<br />
* {{ic|1=Type=notify}}: Идентичен параметру {{ic|1=Type=simple}}, но с той оговоркой, что демон пошлет systemd сигнал о своей готовности. Эталонная реализация данного уведомления обеспечивается библиотекой {{ic|libsystemd-daemon.so}}.<br />
* {{ic|1=Type=dbus}}: Сервис считается находящимся в состоянии готовности, когда определенное {{ic|BusName}} появляется в системной шине DBus.<br />
<br />
=== Замена предоставленных пакетами файлов юнитов ===<br />
<br />
Файлы юнитов в директории {{ic|/etc/systemd/system/}} имеют приоритет над такими же файлами в директории {{ic|/usr/lib/systemd/system/}}.<br />
Для создания собственной версии юнита (который не будет затерт при обновлении), скопируйте старый юнит из директории {{ic|/usr/lib/}} в директорию {{ic|/etc/}} и внесите в эту копию свои изменения. Альтернативным вариантом является использование {{ic|.include}} для парсинга существующего сервис-файла и затем переопределения или добавления новых опций. Например, если вы просто хотите добавить в сервис-файл дополнительную зависимость, вы можете использовать такую команду в юните:<br />
<br />
{{hc|/etc/systemd/system/<service-name>.service|2=<br />
.include /usr/lib/systemd/system/<service-name>.service<br />
<br />
[Unit]<br />
Requires=<new dependency><br />
After=<new dependency>}}<br />
<br />
Затем выполните следующие команды для того, чтобы изменения вступили в силу:<br />
<br />
# systemctl reenable <unit><br />
# systemctl restart <unit><br />
<br />
{{Tip|Вы можете использовать команду {{ic|systemd-delta}}, чтобы увидеть, какие файлы юнитов были переопределены и что в точности было изменено.}}<br />
<br />
=== Подсветка синтаксиса файлов юнитов в Vim ===<br />
<br />
подсветка синтаксиса файлов юнитов для systemd в редакторе [[Vim]] может быть осуществлена путем установки пакета {{AUR|vim-systemd}} из [[Arch User Repository|AUR]].<br />
<br />
== Уровни запуска/цели ==<br />
<br />
Уровни запуска (по-английски уровень запуска - runlevel) для systemd являются устаревшей концепцией. Systemd использует ''цели'' (англ. target), которые выполняют ту же задачу, что и уровни запуска, но действуют немного по-другому. Каждая ''цель'' поименована (т.е. имеет собственное имя, а не номер) и, как предполагается, предназначена для конкретных задач; возможно иметь в одно и то же время активными несколько таких целей. Некоторые ''цели'' реализованы так, что наследуют все сервисы других ''целей'' и добавляют к ним свои сервисы. В systemd имеются также ''цели'', которые имитируют общие уровни запуска SystemVinit, поэтому вы можете переключаться между целевыми юнитами с использованием привычной команды {{ic|telinit RUNLEVEL}}. <br />
<br />
=== Получение информации о текущем уровне запуска/цели ===<br />
<br />
При использовании systemd для этого предназначена следующая команда (заменяющая {{ic|runlevel}}):<br />
<br />
$ systemctl list-units --type=target<br />
<br />
=== Создание пользовательской цели ===<br />
<br />
Уровни загрузки, по которым расписаны конкретные задачи на установке дистрибутива Fedora по умолчанию - 0, 1, 3, 5 и 6; есть маппинг 1:1 с помощью конкретной цели systemd. К сожалению, не существует хорошего способа сделать то же самое для определяемых пользователем уровней, таких, как 2 и 4. Использование их предполагает, что вы создаете новый именованный '' целевой юнит''systemd наподобие {{ic|/etc/systemd/system/<your target>}}, который берет за основу один из существующих уровней запуска (взгляните, например, на {{ic|/usr/lib/systemd/system/graphical.target}}), создаете также директорию {{ic|/etc/systemd/system/<your target>.wants}} и затем символические ссылки на те дополнительные сервисы из директории {{ic|/usr/lib/systemd/system/}}, которые вы хотите включить при загрузке.<br />
<br />
== Таблица уровней запуска и их аналогов в Systemd ==<br />
<br />
{| class="wikitable" border="1" cellpadding="5" cellspacing="0"<br />
! Уровнень запуска SysV !! systemd Target !! Примечание<br />
|-<br />
| 0 || runlevel0.target, poweroff.target || Выключить систему.<br />
|-<br />
| 1, s, single || runlevel1.target, rescue.target || Однопользовательский уровень запуска.<br />
|-<br />
| 2, 4 || runlevel2.target, runlevel4.target, multi-user.target || Уровень запуска, определенный пользователем/специфичный для узла. По умолчанию соответствует уровню запуска 3.<br />
|-<br />
| 3 || runlevel3.target, multi-user.target || Многопользовательский режим без графики. Пользователи, как правило, входят с помощью множества консолей или через сеть.<br />
|-<br />
| 5 || runlevel5.target, graphical.target || Многопользовательский режим с графикой. Обычно эквивалентен запуску всех сервисов уровня 3 и графическому менеджеру входа.<br />
|-<br />
| 6 || runlevel6.target, reboot.target || Перезагрузка.<br />
|-<br />
| emergency || emergency.target || Аварийная оболочка.<br />
|-<br />
|}<br />
<br />
=== Изменение текущей цели ===<br />
<br />
В systemd цели доступны посредством " целевых юнитов". Вы можете изменить их командой:<br />
<br />
# systemctl isolate graphical.target<br />
<br />
Данная команда изменит только лишь текущую цель и не повлияет на следующую загрузку системы. Она соответствует командам наподобие {{ic|telinit 3}} или {{ic|telinit 5}} для Sysvinit.<br />
<br />
=== Изменение цели для загрузки ===<br />
<br />
Стандартная цель - {{ic|default.target}}, которая по умолчанию является псевдонимом юнита {{ic|graphical.target}} (примерно соответствующего прежнему уровню выполнения 5). Для изменения цели при загрузке по умолчанию, добавьте следующий дополнительный [[kernel parameters|параметр ядра]] в вашем загрузчике:<br />
<br />
{{Tip|Расширение {{ic|.target}} можно опустить.}}<br />
<br />
* {{ic|1=systemd.unit=multi-user.target}} (что примерно соответствует прежнему уровню выполнения 3),<br />
* {{ic|1=systemd.unit=rescue.target}} (что примерно соответствует прежнему уровню выполнения 1).<br />
<br />
Другой путь заключается в том, чтобы оставить загрузчик без изменений и изменить целевой юнит по умолчанию - {{ic|default.target}}, что достигается командой {{ic|systemctl}}:<br />
<br />
# systemctl enable multi-user.target<br />
<br />
Эффект от применения данной команды выводится через {{ic|systemctl}}; символическая ссылка на новый целевой юнит по умолчанию создается в директории {{ic|/etc/systemd/system/default.target}}. Это сработает в том случае (и только в том случае), если имеется следующая секция:<br />
<br />
[Install]<br />
Alias=default.target<br />
<br />
в конфигурационном файле целевого юнита. В настоящий момент как {{ic|multi-user.target}}, так и {{ic|graphical.target}} оба имеют данную секцию.<br />
<br />
== Журнал ==<br />
С версии 38 systemd имеет собственную систему ведения логов - журнал (journal). По умолчанию, более не требуется запуск демона syslog. Для чтения логов используйте команду:<br />
<br />
# journalctl<br />
<br />
По умолчанию (когда в конфигурационном файле {{ic|/etc/systemd/journald.conf}} параметр {{ic|Storage&#61;}} имеет значение {{ic|auto}}) журнал записывается в директорию {{ic|/run/systemd/journal}}. Если директория {{ic|/var/log/journal/}} не существует (например, вы или какая-либо программа удалили ее), systemd '''не''' создаст ее автоматически, но вместо этого запишет свои логи в директорию {{ic|/run/systemd/journal}}. Это означает, что логи будут потеряны при перезагрузке.<br />
<br />
=== Фильтрация вывода ===<br />
<br />
{{ic|journalctl}} позволяет фильтровать вывод по особым полям.<br />
<br />
Примеры:<br />
<br />
Показать все сообщения с момента текущей загрузки системы:<br />
<br />
# journalctl -b<br />
<br />
Последние сообщения:<br />
<br />
# journalctl -f<br />
<br />
Показать все сообщения определенной программы:<br />
<br />
# journalctl /usr/lib/systemd/systemd<br />
<br />
Показать все сообщения определенного процесса:<br />
<br />
# journalctl _PID=1<br />
<br />
Показать все сообщения определенного юнита:<br />
<br />
# journalctl -u netcfg<br />
<br />
Обратитесь к {{ic|man journalctl}} и {{ic|systemd.journal-fields}} или [http://0pointer.de/blog/projects/journalctl.html блог Леннерта (англ.)] для получения детальной информации.<br />
<br />
=== Ограничение размера журнала ===<br />
<br />
Если журнал сохраняется при перезагрузке, размер его по умолчанию ограничен значением в 10% от объема соответствующей файловой системы. Например, для директории {{ic|/var/log/journal}}, расположенной на корневом разделе в 50 Гбайт, максимальный размер журналируемых данных составит до 5 Гбайт. Максимальный объем постоянного журнала можно контролировать при помощи значения {{ic|SystemMaxUse}} в конфигурационном файле {{ic|/etc/systemd/journald.conf}}, поэтому для ограничения его объемом в 50 Mбайт раскомментируйте и отредактируйте соответствующую строку:<br />
<br />
SystemMaxUse=50M<br />
<br />
Обратитесь к {{ic|man journald.conf}} для получения дальнейшей информации.<br />
<br />
=== Journald в связке с классическим демоном syslog ===<br />
<br />
Совместимость с классической реализацией syslog обеспечивается сокетом {{ic|/run/systemd/journal/syslog}}, в который перенаправляются все сообщения. Чтобы дать возможность демону syslog работать вместе с журналом systemd, следует привязать данный демон к указанному сокету вместо {{ic|/dev/log}} ([http://lwn.net/Articles/474968/ официальное сообщение]). Пакетом {{pkg|syslog-ng}} в репозиториях автоматически предоставляется необходимая конфигурация.<br />
<br />
# systemctl enable syslog-ng<br />
<br />
== Сеть ==<br />
<br />
{{Warning|Данный раздел в английской версии включен в состав статьи [[Configuring Network]]; в русской версии временно оставлен из-за того, что русский вариант [[Configuring Network (Русский)]] устарел в сравнении с английским.}}<br />
<br />
=== Динамическое подключение (DHCP) с использованием dhcpcd ===<br />
<br />
Если хотите использовать только DHCP для своего соединения Ethernet, вы можете воспользоваться сервисом {{ic|dhcpcd@.service}} (который поставляется пакетом {{Pkg|dhcpcd}}).<br />
<br />
Чтобы подключить DHCP для {{ic|eth0}}, просто выполните команду:<br />
<br />
# systemctl start dhcpcd@eth0.service<br />
<br />
Вы можете включить этот сервис, и он будет автоматически запускаться при загрузке. Это делается командой:<br />
<br />
# systemctl enable dhcpcd@eth0.service<br />
<br />
Иногда сервис dhcpd запускается до загрузки модуля вашей сетевой карты ({{bug|30235}}), в этом случае вручную добавьте вашу сетевую карту в конфигурационный файл {{ic|/etc/modules-load.d/*.conf}}. Например, для карты Realtek необходима загрузка модуля {{ic|r8169}}, поэтому создайте такой конфигурационный файл:<br />
<br />
{{hc|/etc/modules-load.d/realtek.conf|2=<br />
r8169}}<br />
<br />
=== Другие конфигурации ===<br />
<br />
Для статического подключения, беспроводной сети или сложной конфигурации сети наподобие сетевого моста, вы можете использовать [[Netcfg#systemd_support|netcfg]] или [[NetworkManager#Enable_NetworkManager_under_Native_systemd_system|NetworkManager]], для обоих этих инструментов управления сетью имеются сервис-файлы для systemd.<br />
<br />
{{Note|Если вы хотите использовать netcfg, NetworkManager или другие программы управления сетью, вам не надо в этом случае запускать или включать сервис dhcpcd как показано в предыдущем параграфе.}}<br />
<br />
== Оптимизация ==<br />
<br />
=== Анализ процесса загрузки ===<br />
<br />
==== Использование systemd-analyze ====<br />
<br />
Systemd предоставляет инструмент под названием {{ic|systemd-analyze}}, позволяющий проанализировать процесс загрузки вашей системы, чтобы можно было увидеть, какие файлы юнитов тормозят загрузку. Соответственно, вы можете оптимизировать вашу систему. Для использования данного инструмента вам потребуется установить пакеты {{Pkg|python2-dbus}} и {{Pkg|python2-cairo}}.<br />
<br />
Чтобы увидеть, сколько времени было потрачено на подготовку пространства ядра и пространства пользователя во время загрузки, просто выполните команду:<br />
<br />
$ systemd-analyze<br />
<br />
{{Tip|Чтобы увидеть, сколько времени ушло на загрузку образа initramfs, дополните хуком {{ic|timestamp}} ваш массив {{ic|HOOKS}} из конфигурационного файла {{ic|/etc/[[mkinitcpio]].conf}} и от суперпользователя root пересоберите ваш образ initramfs командой {{ic|mkinitcpio -p linux}} }}<br />
<br />
Чтобы увидеть список запускаемых файлов юнитов, отсортированный по потраченному каждым из них на загрузку времени, выполните команду:<br />
<br />
$ systemd-analyze blame<br />
<br />
Вы также можете создать файл SVG, показывающий процесс загрузки в графическом виде, наподобие [[Bootchart]]:<br />
<br />
$ systemd-analyze plot > plot.svg<br />
<br />
==== Использование bootchart ====<br />
<br />
Вы можете использовать версию bootchart для визуализации последовательности при загрузке системы.<br />
Из-за невозможности использовать стандартные установки bootchart (так как нельзя добавить в командную строку ядра вторую запись init), вам придется воспользоваться пакетом {{AUR|bootchart2}} из [[AUR]], поставляемым с недокументированным сервисом systemd. После установки bootchart2 выполните команду:<br />
<br />
# systemctl enable bootchart<br />
<br />
Обратитесь к [https://github.com/mmeeks/bootchart документации bootchart (англ.)] за дальнейшей и детализированной информацией об использовании данной версии bootchart.<br />
<br />
=== Readahead ===<br />
<br />
systemd поставляется со свой реализации технологии readahead, что в принципе должно усовершенствовать процесс загрузки системы. Однако, в зависимости от версии вашего ядра и типа жесткого диска, скорость обращения к данным может разниться (например, может быть медленнее). Чтобы включить данный сервис, выполните:<br />
<br />
# systemctl enable systemd-readahead-collect systemd-readahead-replay<br />
<br />
Не забудьте, что волшебство технологии readahead подействует только после нескольких перезапусков системы<br />
<br />
=== Ранний старт сервисов ===<br />
<br />
Одним из центральных элементов systemd является [[D-Bus]] и активация сокетов, что требует запуска сервисов при первой потребности в них. Обычно такой подход является удачным, но, если вы знаете, что какой-то сервис (вроде [[UPower]]) должен всегда запускаться во время загрузки системы, то вы можете сократить общее время загрузки, запуская его так рано, как это вообще возможно. Этого можно добиться (если сервис-файл устроен соответствующим образом, что верно в большинстве случаев) путем выполнения команды:<br />
<br />
# systemctl enable upower<br />
<br />
Это заставит systemd запустить UPower так рано, как это возможно, не устраивая перегонки данного сервиса с активацией сокета или D-Bus.<br />
<br />
=== Уменьшение вывода во время загрузки ===<br />
<br />
Измените параметр {{ic|verbose}} на {{ic|quiet}} в строке загрузки ядра вашего загрузчика. Для некоторых систем, в частности с SSD, узким местом является низкая производительность TTY, поэтому уменьшение вывода информации означает прирост скорости загрузки.<br />
<br />
== Устранение неполадок ==<br />
<br />
=== Выключение/перезагрузка происходят ужасно долго ===<br />
<br />
Если процесс выключения занимает очень долгое время (или, по-видимому, зависает), то, вероятно, виноват сервис, который не завершает свою работу. systemd ожидает некоторое время, пока каждый сервис завершит свою работу самостоятельно, и только потом пытается принудительно завершить (kill) его. Если вы столкнулись с такой проблемой, обратитесь к [http://freedesktop.org/wiki/Software/systemd/Debugging#Shutdown_Completes_Eventually данной статье (англ.)].<br />
<br />
== Полезные ссылки ==<br />
<br />
*[http://www.freedesktop.org/wiki/Software/systemd Официальный веб-сайт (англ.)]<br />
*[http://0pointer.de/public/systemd-man/ Страницы руководств (англ.)]<br />
*[http://freedesktop.org/wiki/Software/systemd/Optimizations systemd Optimizations (англ.)]<br />
*[http://www.freedesktop.org/wiki/Software/systemd/FrequentlyAskedQuestions FAQ (англ.)]<br />
*[http://www.freedesktop.org/wiki/Software/systemd/TipsAndTricks Tips And Tricks (англ.)]<br />
*[http://0pointer.de/public/systemd-ebook-psankar.pdf systemd для администраторов (PDF) - перевод цикла статей Леннарта Поттеринга (Lennart Poettering) (англ.)]<br />
*[http://0pointer.de/blog/projects/systemd.html Блог Lennart'а (англ.)]<br />
*[http://archlinux.org.ru/forum/viewtopic.php?f=9&t=9581 systemd mini FAQ]<br />
*[http://fedoraproject.org/wiki/Systemd Fedora Linux Wiki: Systemd (англ.)]<br />
*[http://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet Fedora's SysVinit to systemd cheatsheet (англ.)]<br />
*[http://wiki.russianfedora.ru/index.php/Systemd systemd - база знаний проекта Fedora]<br />
*[http://wiki.debian.org/ru/Systemd Debian Wiki: systemd - менеджер системы и сервисов]<br />
*[http://wiki.ubuntu.com/systemd Ubuntu Wiki: systemd (англ.)]</div>Archvillhttps://wiki.archlinux.org/index.php?title=GRUB_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=235563GRUB (Русский)2012-11-15T17:21:09Z<p>Archvill: /* Установка загрузчика */ what is grub_bios-install O_o? I dunno lol. Replaced it with "grub-install"</p>
<hr />
<div>[[Category:Процесс Загрузки (Русский)]]<br />
[[Category:Руководства (Русский)]]<br />
[[cs:GRUB2]]<br />
[[en:GRUB2]]<br />
[[es:GRUB2]]<br />
[[fr:GRUB2]]<br />
[[id:GRUB2]]<br />
[[it:GRUB2]]<br />
[[tr:GRUB2]]<br />
[[zh-CN:GRUB2]]<br />
[[zh-TW:GRUB2]]<br />
{{Article summary start}}<br />
{{Article summary text|Covers various aspects of the next generation of the GRand Unified Bootloader (GRUB2).}}<br />
{{Article summary end}}<br />
<br />
[http://www.gnu.org/software/grub/grub-2.en.html GRUB2] - это следующее поколение GRand Uniform Bootloader (GRUB). GRUB2 основывается на [http://www.nongnu.org/pupa/ PUPA], который является исследовательским проектом, изучающим следующее поколение GRUB. GRUB 2 был переписан с нуля, чтобы исключить мусор и внедрить модульность и портативность.<br />
<br />
Вкратце, загрузчик - это первая программа, которая загружается при старте компьютера. Она отвечает за загрузку и передачу управления ядру Linux. Ядро, в свою очередь, запускает остальную часть операционной системы.<br />
<br />
В данный момент, GRUB де-фа́кто является стандартным загрузчиком LINUX, и в скором времени будет заменён на GRUB2. Когда это случится, "GRUB" станет "GRUB Legacy". <br />
<br />
== Предисловие ==<br />
GRUB2 до сих пор разрабатывается, и мы вынужденны сделать предупреждение. '''Считайте, что вы предупреждены!''' GRUB2 может не оправдать ожиданий, новшества могут отсутствовать, функциональность может изменится. Если нет особой причины использовать GRUB2, пользователь должен использовать более стабильный [[GRUB]].<br />
<br />
=== Замечание для текущих пользователей GRUB ===<br />
<br />
* Существуют различия между командами GRUB и GRUB2. Изучите [http://grub.enbug.org/CommandList команды GRUB2].<br />
<br />
* GRUB2 теперь ''модульный'' и больше не требует "stage 1.5". В результате, загрузчик сам по себе ограничен -- модули загружаются с жёсткого диска по надобности для расширения функциональности.<br />
<br />
* Наименования устройств изменились между GRUB и GRUB2. Разделы нумеруются с 1, приводы с 0. Например, {{ic|/dev/sda1}} будет ссылатся на {{Ic|(hd0,1)}} в GRUB2.<br />
<br />
== Установка ==<br />
<br />
GRUB2 может быть установлен через pacman (и заменит grub, если он установлен):<br />
# pacman -S grub2<br />
Также, GRUB2 должен быть установлен в загрузочный сектор диска или раздела, чтобы быть загрузчиком. Это описано в секции [[#Установка загрузчика]].<br />
<br />
=== Установка GRUB2 в процессе установки Arch Linux ===<br />
<br />
* Пропустите шаг '''Установка загрузчика''' и выйдите из установщика.<br />
* Вы должны настроить сеть:<br />
# aif -p partial-configure-network<br />
* Полученные настройки нужно скопировать в установленную систему:<br />
# cp /etc/resolv.conf /mnt/etc/resolv.conf<br />
* Из живого окружения установщика, измените корневую папку на установленную систему:<br />
# mount -o bind /dev /mnt/dev<br />
# chroot /mnt bash<br />
* Установите пакет GRUB2:<br />
# pacman -S grub2-bios<br />
<br />
=== Установка загрузчика ===<br />
<br />
GRUB2 должен быть установлен из живого окружения или напрямую из консоли установщика Arch.<br />
<br />
Для установки GRUB2 нужно выполнить две команды от пользователя root:<br />
# grub-install --boot-directory=/boot --no-floppy --recheck /dev/sda<br />
# cp /usr/share/grub/{unicode.pf2,ascii.pf2} /boot/grub/<br />
<br />
* Также рекомендуется сгенерировать файл grub.cfg командой:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
где {{ic|/dev/sda}} это место установки (в данном случае это MBR первого диска SATA). Если вы используете [[LVM]] для вашего {{ic|/boot}}, вы можете установить GRUB2 на различные физические диски.<br />
<br />
Эта команда читает конфигурационный файл /etc/default/grub, и, в случае вызова с консоли установщика, необходимо предварительно выполнить команду arch-chroot (чтобы не был использован файл /etc/default/grub с установочного образа).<br />
<br />
Если при этом происходит ошибка:<br />
<br />
grub-probe: error: Cannot get the real path of '/dev/fd0'<br />
Auto-detection of a filesystem module failed.<br />
Please specify the module with the option '--modules' explicitly.<br />
<br />
Попробуйте добавить {{Ic|--recheck}} в аргументы как показано ниже:<br />
# grub-install --recheck /dev/sda<br />
<br />
== Настройка ==<br />
<br />
Файл настройки находится в {{ic|/boot/grub/grub.cfg}}. '''Не редактируйте этот файл вручную'''. Для изменения конфигураций используйте файл /etc/default/grub и файлы в каталоге /etc/grub.d/. Если Вы хотите добавить свои пункты в меню граба то настроить их можно в файле /etc/grub.d/40_custom, либо в /boot/grub/custom.cfg. После изменений запускайте команду:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
Она не только создаст файл boot/grub/grub.cfg, но и проверит конфигурации на наличие ошибок.<br />
<br />
=== grub-mkconfig ===<br />
<br />
Скрипт grub-mkconfig может быть использован для генерации файла {{ic|grub.cfg}}. Чтобы получить файл {{ic|grub.cfg}}, выполните команду:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
Для автоматического обнаружения ОС отличных от Linux установите пакет {{Ic|os-prober}}.<br />
<br />
=== grub.cfg ===<br />
<br />
Основные файлы grub используют следующие опции:<br />
* {{Ic|(hdX,Y)}} - раздел {{Ic|Y}} на диске {{Ic|X}}, нумерация разделов начинается с 1,дисков с 0<br />
* {{Ic|1=set default=N}} - это загрузка записи с номером N, которую делает загрузчик после истечения таймера на действие пользователя.<br />
* {{Ic|1=set timeout=M}} - это время {{Ic|M}} ожидания в секундах для выбора пользователя, до того, как система по умолчанию не будет загружена.<br />
* {{Ic|<nowiki>menuentry "title" {entry options}</nowiki>}} - это название загрузочной записи {{Ic|title}}<br />
* {{Ic|1=set root=(hdX,Y)}} устанавливает загрузочный раздел, где хранится ядро и модули GRUB (boot может быть не отдельным разделом, а просто папкой в корневом разделе ({{ic|/}})<br />
<br />
Пример конфигурации:<br />
<br />
{{hc|/boot/grub/grub.cfg<br />
|2=<nowiki><br />
# Config file for GRUB2 - The GNU GRand Unified Bootloader<br />
# /boot/grub/grub.cfg<br />
<br />
# DEVICE NAME CONVERSIONS<br />
#<br />
# Linux Grub<br />
# -------------------------<br />
# /dev/fd0 (fd0)<br />
# /dev/sda (hd0)<br />
# /dev/sdb2 (hd1,2)<br />
# /dev/sda3 (hd0,3)<br />
#<br />
<br />
# Timeout for menu<br />
set timeout=5<br />
<br />
# Set default boot entry as Entry 0<br />
set default=0<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
set root=(hd0,1)<br />
linux /vmlinuz26 root=/dev/sda3 ro<br />
initrd /kernel26.img<br />
}<br />
<br />
## (1) Windows<br />
#menuentry "Windows" {<br />
#set root=(hd0,3)<br />
#chainloader +1<br />
#}<br />
</nowiki>}}<br />
<br />
Если у вас нет отдельного раздела boot, {{Ic|'/boot'}} должен присутствовать в указании пути в {{ic|grub.cfg}}. Пример:<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
set root=(hd0,1)<br />
linux /boot/vmlinuz26 root=/dev/sda1 ro<br />
initrd /boot/kernel26.img<br />
}<br />
<br />
=== Мультизагрузка ===<br />
<br />
Для добавления пунктов в загрузочное меню GRUB необходимо отредактировать файл /etc/grub.d/40_cutsom. Все, что добавлено в этот файл, будет дозаписано в grub.cfg вызовом команды grub-mkconfig.<br />
Примеры конфигурации для дополнительных пунктов меню запуска Linux и Windows приведены ниже. Их необходимо дописать в конец файла 40_custom и обновить конфигурацию GRUB2 командой grub-mkconfig -o /boot/grub/grub.cfg.<br />
<br />
==== С GNU/Linux ====<br />
<br />
Если другой дистрибутив Linux на разделе {{ic|sda2}}:<br />
<br />
# (1) Other GNU/Linux<br />
menuentry "Other Linux" {<br />
set root=(hd0,2)<br />
linux /boot/vmlinuz #(add other options here as required)<br />
initrd /boot/initrd.img #(if the other kernel uses/needs one)<br />
}<br />
<br />
==== С Windows ====<br />
<br />
В данном примере Windows находится на разделе {{ic|sda3}}.<br />
<br />
# (2) Windows 7<br />
menuentry "Windows 7" {<br />
set root=(hd0,3)<br />
chainloader +1<br />
}<br />
<br />
==== С Windows при помощи EasyBCD и NeoGRUB ====<br />
<br />
До тех пор, пока EasyBCD's NeoGRUB не совместимы с форматом меню GRUB2, установите цепную загрузку через них, заменив содержимое файла {{ic|C:\NST\menu.lst}} на строки, подобные следующим:<br />
<br />
default 0<br />
timeout 1<br />
<br />
title Chainload into GRUB v2<br />
root (hd0,7)<br />
kernel /boot/grub/core.img<br />
<br />
===Визуальная настройка===<br />
<br />
В GRUB2 это возможно сделать, меняя вид меню.<br />
<br />
====Фоновое изображение и растровые шрифты====<br />
<br />
GRUB2 имеет поддержку фоновых изображений и растровых шрифтов в формате pf2. Шрифты unifont включены в пакет grub2 под именем {{ic|unicode.pf2}}, или, как только ascii знаки, под именем {{ic|ascii.pf2}}. Поддерживаемые форматы изображений включают tga, png и jpeg, (обеспечивается загрузкой нужных модулей). Максимальное поддерживаемое разрешение зависит от вашего оборудования. Пример настройки, устанавливающий tga файл как фоновое изображение показан ниже:<br />
<br />
if loadfont /usr/share/grub/unicode.pf2 ; then<br />
set gfxmode="1024x768x32"<br />
insmod gfxterm<br />
insmod vbe<br />
terminal_output gfxterm<br />
if terminal_output gfxterm; then true ; else<br />
terminal gfxterm<br />
fi<br />
fi<br />
insmod tga<br />
background_image /boot/grub/archlinux.tga<br />
<br />
{{Note|Если этот пример вам не подходит, попробуйте заменить {{Ic|1=gfxmode="1024x768x32"}} на {{Ic|1=vbemode="0x105"}}.}}<br />
{{Note|Чтобы показать все режимы, которые вы можете использовать, введите команду {{Ic|1=vbeinfo}} в командной строке grub2 (вы должны загрузить модуль vbe перед этим).}}<br />
{{Note|Если у вас Grub установлен на отдельный раздел, /boot/grub/archlinux.tga заменяется на /grub/archlinux.tga.}}<br />
<br />
====Цвета меню====<br />
<br />
Чтобы изменить цвета в GRUB2, вы должны сделать настройку в файле {{ic|/boot/grub/grub.cfg}}. Например, цвета по умолчанию для Arch:<br />
<br />
set menu_color_normal=light-blue/black<br />
set menu_color_highlight=light-cyan/blue<br />
<br />
Доступные цвета для GRUB2 находятся на сайте: http://www.gnu.org/software/grub/manual/html_node/Theme-file-format.html#Theme-file-format.<br />
<br />
====Скрытое меню====<br />
<br />
Для скрытого меню вставьте эти строки в файл grub.cfg после инициализации картинки, но до ''menuentries'' (например: background_image /boot/grub/archlinux.tga).<br />
<br />
set timeout=5<br />
<br />
echo -n "Press ESC to see the menu... "<br />
if sleep --verbose --interruptible 5 ; then<br />
set timeout=0<br />
fi<br />
<br />
====Установка разрешения буфера кадров====<br />
<br />
Чтобы изменить разрешение буфера кадров в grub2, добавьте строку, подобную этой, в раздел ''linux'' в grub.cfg:<br />
<br />
video=vesafb:mode=1024x768-32 vga=790<br />
<br />
В следующей формулировке, режим=<разрешение>-<глубина цвета> vga=<разрешение буфера кадров> используется, где разрешение буфера кадров можно найти по следующей схеме:<br />
<br />
+-------------------------------------------------+<br />
| 640x480 800x600 1024x768 1280x1024<br />
----+--------------------------------------------<br />
256 | 0x301=769 0x303=771 0x305=773 0x307=775<br />
32K | 0x310=784 0x313=787 0x316=790 0x319=793<br />
64K | 0x311=785 0x314=788 0x317=791 0x31A=794<br />
16M | 0x312=786 0x315=789 0x318=792 0x31B=795<br />
+-------------------------------------------------+<br />
<br />
Убедитесь, что вы вставили следующую строку где-нибудь, (insmod обычно можно найти на верху файла grub.cfg):<br />
<br />
insmod vbe<br />
<br />
=== Другие настойки ===<br />
<br />
==== LVM ====<br />
<br />
Если вы используете [[LVM]] для {{ic|/boot}}, добавьте следующую строку после до строк menuentry:<br />
<br />
insmod lvm<br />
<br />
и обозначьте ваш root в menuentry как:<br />
<br />
set root=(''lvm_group_name''-''lvm_logical_boot_partition_name'')<br />
<br />
Пример:<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
insmod lvm<br />
set root=(VolumeGroup-lv_boot)<br />
# you can only set following two lines<br />
linux /vmlinuz26 root=/dev/mapper/VolumeGroup-root ro<br />
initrd /kernel26.img<br />
}<br />
<br />
==== Постоянное наименование устройств ====<br />
<br />
Чтобы просмотреть UUIDs, наберите:<br />
# blkid<br />
<br />
Замените линию {{Ic|root}} следующей:<br />
<br />
linux /vmlinuz26 root=/dev/disk/by-uuid/<UUID> ro<br />
<br />
Тем не менее, вы ещё должны установить упоминание о Grub2's в раздел root. Чтобы сделать это, используйте команду {{Ic|search}}. Так мы устанавливаем переменную grub'а "root" через поиск раздела по его UUID'у:<br />
<br />
search --fs-uuid <UUID> --set=root<br />
Пример содержимого загрузочной записи, использующей Постоянное наименование устройств будет выглядеть так:<br />
<br />
menuentry "Arch Linux" {<br />
search --fs-uuid 355ccb5c-99e1-400d-b612-451f9247e35e --set root<br />
linux /boot/vmlinuz26 root=/dev/disk/by-uuid/355ccb5c-99e1-400d-b612-451f9247e35e ro<br />
initrd /boot/kernel26.img<br />
}<br />
<br />
==== Использование меток ====<br />
<br />
Есть возможность использовать метки - легко читаемые записи, присоединяемые к файловым системам при помощи опции {{Ic|--label}} в {{Ic|search}}. Сначала, пометьте ваши сущестующие разделы:<br />
<br />
# tune2fs -L a <LABEL> <PARTITION><br />
<br />
Затем, добавьте содержимое используя метки. Например:<br />
<br />
menuentry "Arch Linux, session texte" {<br />
search --label archroot --set root<br />
linux /boot/vmlinuz26 root=/dev/disk/by-label/archroot ro<br />
initrd /boot/kernel26.img<br />
}<br />
<br />
== Использование командной строки ==<br />
<br />
Так как MBR слишком мал, чтобы хранить все модули GRUB2, здесь располагаются только меню и несколько базовых команд. Основная часть функциональности GRUB2 заложена в модулях в {{ic|/boot/grub}}, которые загружаются по надобности. В случае возникновения ошибки GRUB2 может не загрузится. Тогда появится командная строка.<br />
<br />
GRUB2 поддерживает много консолей. Если есть проблема чтения меню, но загрузчик может найти диски, вас перебросит в "нормальную" консоль.<br />
<br />
sh:grub><br />
<br />
Если проблема серьёзная, (напримерЮ GRUB не может найти требуемые файлы),вас перебросит в консоль "восстановления".<br />
<br />
grub rescue><br />
<br />
Консоль восстановления - это ограниченная версия обычной консоли, с меньшей функциональностью. Если вы переброшены в консоль восстановления, сначала попытаетесь загрузить модуль нормальной консоли, затем запустите её.<br />
<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
grub rescue> insmod (hdX,Y)/boot/grub/normal.mod<br />
rescue:grub> normal<br />
<br />
== Использование консоли восстановления ==<br />
<br />
Сначала прочтите [[#Использование командной строки]]. Если невозможно активировать нормальную консоль, возможным решением может стать загрузка с Живого CD (LiveCD), или с других дисков восстановления чтобы исправить настройки и переустановить GRUB. Тем не менее, загрузочные диски не всегда доступны или необходимы.<br />
<br />
Доступные команды в этой консоли включают "insmod", "ls", "set", и "unset". В следующем примере используется "set" и "insmod". "set" изменяет переменные, а "insmod" загружает модули для повышения функциональности.<br />
<br />
Перед началом, пользователь должен знать местоположение своей папки {{ic|/boot}} (будь она отдельным разделом, или подпапкой в корневом разделе):<br />
<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
<br />
Где Х - это номер физического диска и Y - номер раздела.<br />
<br />
Чтобы расширить возможности консоли, загрузите модуль "linux":<br />
<br />
grub rescue> insmod (hdX,Y)/boot/grub/linux.mod<br />
<br />
{{Note|Если у вас отдельный boot раздел, исключите {{ic|/boot}} из пути, (например, пишите {{Ic|1=set prefix=(hdX,Y)/grub}} и {{Ic|insmod (hdX,Y)/grub/linux.mod}}).}}<br />
<br />
Это описание "linux" и "initrd" команд, которые должны быть вам знакомы (смотри [[#Настройка]]).<br />
<br />
Например, загрузка Arch Linux:<br />
<br />
set root=(hd0,5)<br />
linux /boot/vmlinuz26 root=/dev/sda5<br />
initrd /boot/kernel26.img<br />
boot<br />
<br />
С отдельным разделом boot измените пути, как было описано выше. Например:<br />
<br />
set root=(hd0,5)<br />
linux /vmlinuz26 root=/dev/sda6<br />
initrd /kernel26.img<br />
boot<br />
<br />
После успешной загрузки Arch Linux, пользователь сможет подкорректировать {{ic|grub.cfg}} и затем запустить:<br />
<br />
# grub-install /dev/sda<br />
<br />
для того, чтобы переустановить GRUB2 и полностью устранить проблему. Измените {{ic|/dev/sda}}, если требуется. Смотрите [[#Установка загрузчика]] для детальной информации.<br />
<br />
== Примеры исправления проблем ==<br />
<br />
Добавьте сюда сами.<br />
<br />
=== Сообщение об ошибке msdos-style ===<br />
<br />
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding won't be possible!<br />
grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.<br />
However, blocklists are UNRELIABLE and its use is discouraged.<br />
grub-setup: error: If you really want blocklists, use --force.<br />
<br />
Эта ошибка может возникнуть, когда вы попытаетесь установить в виртуальную машину VMware. Читайте больше об этом [http://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 здесь].<br />
<br />
Это также может случится, если первый раздел начинается сразу после MBR, без необходимого места в 60 блоков перед первым разделом.<br />
<br />
=== Grub-install вызывает зависание grub2 / legacy grub ===<br />
Отключите флоппи дисковод в биосе, даже если у вас его нет. Попробуйте использовать также --no-floppy и удалить fd0 строку из /boot/grub/device.map. Тем не менее, без отключения его в биосе, GRUB2 может всё равно не работать.<br />
<br />
=== Прочее ===<br />
Я не нашёл, как удалять grub1, и установил grub2 в MBR, но после этого он не стал по умолчанию загружаться. Загружался по умолчанию grub1. Лёгкий способ это исправить, это переименовать {{ic|menu.lst.pacsave}} или подобное, в {{ic|menu.lst}} (в /boot/grub/) для каждой строки меню, для которой вы хотите использовать grub2. В конце введите {{Ic|"chainloader +1"}}. Это даст команду grub1 вернуть контроль к grub2.<br />
<br />
Возможное решение: Допустим, boot раздел {{Ic|(hd0,1)}}, и корневой раздел {{Ic|(hd0,3)}} (grub2 наименование). grub-setup ищет {{ic|(hd0,3)/boot/grub/core.img}}. Он не может его найти просто потому, что он в {{ic|(hd0,1)/grub/core.img}}. Я скопировал папку grub в мою корневую дерикторию, и всё заработало отлично:<br />
<br />
Например (от root:)<br />
# mount /boot<br />
# cp -a /boot/grub /<br />
# umount /boot<br />
# mv /grub /boot/<br />
# grub-install /dev/sda</div>Archvillhttps://wiki.archlinux.org/index.php?title=GRUB_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=233856GRUB (Русский)2012-11-05T10:48:18Z<p>Archvill: /* Мультизагрузка */ fixes related to prev commits</p>
<hr />
<div>[[Category:Процесс Загрузки (Русский)]]<br />
[[Category:Руководства (Русский)]]<br />
[[cs:GRUB2]]<br />
[[en:GRUB2]]<br />
[[es:GRUB2]]<br />
[[fr:GRUB2]]<br />
[[id:GRUB2]]<br />
[[it:GRUB2]]<br />
[[tr:GRUB2]]<br />
[[zh-CN:GRUB2]]<br />
[[zh-TW:GRUB2]]<br />
{{Article summary start}}<br />
{{Article summary text|Covers various aspects of the next generation of the GRand Unified Bootloader (GRUB2).}}<br />
{{Article summary end}}<br />
<br />
[http://www.gnu.org/software/grub/grub-2.en.html GRUB2] - это следующее поколение GRand Uniform Bootloader (GRUB). GRUB2 основывается на [http://www.nongnu.org/pupa/ PUPA], который является исследовательским проектом, изучающим следующее поколение GRUB. GRUB 2 был переписан с нуля, чтобы исключить мусор и внедрить модульность и портативность.<br />
<br />
Вкратце, загрузчик - это первая программа, которая загружается при старте компьютера. Она отвечает за загрузку и передачу управления ядру Linux. Ядро, в свою очередь, запускает остальную часть операционной системы.<br />
<br />
В данный момент, GRUB де-фа́кто является стандартным загрузчиком LINUX, и в скором времени будет заменён на GRUB2. Когда это случится, "GRUB" станет "GRUB Legacy". <br />
<br />
== Предисловие ==<br />
GRUB2 до сих пор разрабатывается, и мы вынужденны сделать предупреждение. '''Считайте, что вы предупреждены!''' GRUB2 может не оправдать ожиданий, новшества могут отсутствовать, функциональность может изменится. Если нет особой причины использовать GRUB2, пользователь должен использовать более стабильный [[GRUB]].<br />
<br />
=== Замечание для текущих пользователей GRUB ===<br />
<br />
* Существуют различия между командами GRUB и GRUB2. Изучите [http://grub.enbug.org/CommandList команды GRUB2].<br />
<br />
* GRUB2 теперь ''модульный'' и больше не требует "stage 1.5". В результате, загрузчик сам по себе ограничен -- модули загружаются с жёсткого диска по надобности для расширения функциональности.<br />
<br />
* Наименования устройств изменились между GRUB и GRUB2. Разделы нумеруются с 1, приводы с 0. Например, {{ic|/dev/sda1}} будет ссылатся на {{Ic|(hd0,1)}} в GRUB2.<br />
<br />
== Установка ==<br />
<br />
GRUB2 может быть установлен через pacman (и заменит grub, если он установлен):<br />
# pacman -S grub2<br />
Также, GRUB2 должен быть установлен в загрузочный сектор диска или раздела, чтобы быть загрузчиком. Это описано в секции [[#Установка загрузчика]].<br />
<br />
=== Установка GRUB2 в процессе установки Arch Linux ===<br />
<br />
* Пропустите шаг '''Установка загрузчика''' и выйдите из установщика.<br />
* Вы должны настроить сеть:<br />
# aif -p partial-configure-network<br />
* Полученные настройки нужно скопировать в установленную систему:<br />
# cp /etc/resolv.conf /mnt/etc/resolv.conf<br />
* Из живого окружения установщика, измените корневую папку на установленную систему:<br />
# mount -o bind /dev /mnt/dev<br />
# chroot /mnt bash<br />
* Установите пакет GRUB2:<br />
# pacman -S grub2-bios<br />
<br />
=== Установка загрузчика ===<br />
<br />
GRUB2 должен быть установлен из живого окружения или напрямую из консоли установщика Arch.<br />
<br />
Для установки GRUB2 нужно выполнить две команды от пользователя root:<br />
# grub_bios-install --boot-directory=/boot --no-floppy --recheck /dev/sda<br />
# cp /usr/share/grub/{unicode.pf2,ascii.pf2} /boot/grub/<br />
<br />
* Также рекомендуется сгенерировать файл grub.cfg командой:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
где {{ic|/dev/sda}} это место установки (в данном случае это MBR первого диска SATA). Если вы используете [[LVM]] для вашего {{ic|/boot}}, вы можете установить GRUB2 на различные физические диски.<br />
<br />
Эта команда читает конфигурационный файл /etc/default/grub, и, в случае вызова с консоли установщика, необходимо предварительно выполнить команду arch-chroot (чтобы не был использован файл /etc/default/grub с установочного образа).<br />
<br />
Если при этом происходит ошибка:<br />
<br />
grub-probe: error: Cannot get the real path of '/dev/fd0'<br />
Auto-detection of a filesystem module failed.<br />
Please specify the module with the option '--modules' explicitly.<br />
<br />
Попробуйте добавить {{Ic|--recheck}} в аргументы как показано ниже:<br />
# grub-install --recheck /dev/sda<br />
<br />
== Настройка ==<br />
<br />
Файл настройки находится в {{ic|/boot/grub/grub.cfg}}. '''Не редактируйте этот файл вручную'''. Для изменения конфигураций используйте файл /etc/default/grub и файлы в каталоге /etc/grub.d/. Если Вы хотите добавить свои пункты в меню граба то настроить их можно в файле /etc/grub.d/40_custom, либо в /boot/grub/custom.cfg. После изменений запускайте команду:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
Она не только создаст файл boot/grub/grub.cfg, но и проверит конфигурации на наличие ошибок.<br />
<br />
=== grub-mkconfig ===<br />
<br />
Скрипт grub-mkconfig может быть использован для генерации файла {{ic|grub.cfg}}. Чтобы получить файл {{ic|grub.cfg}}, выполните команду:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
Для автоматического обнаружения ОС отличных от Linux установите пакет {{Ic|os-prober}}.<br />
<br />
=== grub.cfg ===<br />
<br />
Основные файлы grub используют следующие опции:<br />
* {{Ic|(hdX,Y)}} - раздел {{Ic|Y}} на диске {{Ic|X}}, нумерация разделов начинается с 1,дисков с 0<br />
* {{Ic|1=set default=N}} - это загрузка записи с номером N, которую делает загрузчик после истечения таймера на действие пользователя.<br />
* {{Ic|1=set timeout=M}} - это время {{Ic|M}} ожидания в секундах для выбора пользователя, до того, как система по умолчанию не будет загружена.<br />
* {{Ic|<nowiki>menuentry "title" {entry options}</nowiki>}} - это название загрузочной записи {{Ic|title}}<br />
* {{Ic|1=set root=(hdX,Y)}} устанавливает загрузочный раздел, где хранится ядро и модули GRUB (boot может быть не отдельным разделом, а просто папкой в корневом разделе ({{ic|/}})<br />
<br />
Пример конфигурации:<br />
<br />
{{hc|/boot/grub/grub.cfg<br />
|2=<nowiki><br />
# Config file for GRUB2 - The GNU GRand Unified Bootloader<br />
# /boot/grub/grub.cfg<br />
<br />
# DEVICE NAME CONVERSIONS<br />
#<br />
# Linux Grub<br />
# -------------------------<br />
# /dev/fd0 (fd0)<br />
# /dev/sda (hd0)<br />
# /dev/sdb2 (hd1,2)<br />
# /dev/sda3 (hd0,3)<br />
#<br />
<br />
# Timeout for menu<br />
set timeout=5<br />
<br />
# Set default boot entry as Entry 0<br />
set default=0<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
set root=(hd0,1)<br />
linux /vmlinuz26 root=/dev/sda3 ro<br />
initrd /kernel26.img<br />
}<br />
<br />
## (1) Windows<br />
#menuentry "Windows" {<br />
#set root=(hd0,3)<br />
#chainloader +1<br />
#}<br />
</nowiki>}}<br />
<br />
Если у вас нет отдельного раздела boot, {{Ic|'/boot'}} должен присутствовать в указании пути в {{ic|grub.cfg}}. Пример:<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
set root=(hd0,1)<br />
linux /boot/vmlinuz26 root=/dev/sda1 ro<br />
initrd /boot/kernel26.img<br />
}<br />
<br />
=== Мультизагрузка ===<br />
<br />
Для добавления пунктов в загрузочное меню GRUB необходимо отредактировать файл /etc/grub.d/40_cutsom. Все, что добавлено в этот файл, будет дозаписано в grub.cfg вызовом команды grub-mkconfig.<br />
Примеры конфигурации для дополнительных пунктов меню запуска Linux и Windows приведены ниже. Их необходимо дописать в конец файла 40_custom и обновить конфигурацию GRUB2 командой grub-mkconfig -o /boot/grub/grub.cfg.<br />
<br />
==== С GNU/Linux ====<br />
<br />
Если другой дистрибутив Linux на разделе {{ic|sda2}}:<br />
<br />
# (1) Other GNU/Linux<br />
menuentry "Other Linux" {<br />
set root=(hd0,2)<br />
linux /boot/vmlinuz #(add other options here as required)<br />
initrd /boot/initrd.img #(if the other kernel uses/needs one)<br />
}<br />
<br />
==== С Windows ====<br />
<br />
В данном примере Windows находится на разделе {{ic|sda3}}.<br />
<br />
# (2) Windows 7<br />
menuentry "Windows 7" {<br />
set root=(hd0,3)<br />
chainloader +1<br />
}<br />
<br />
==== С Windows при помощи EasyBCD и NeoGRUB ====<br />
<br />
До тех пор, пока EasyBCD's NeoGRUB не совместимы с форматом меню GRUB2, установите цепную загрузку через них, заменив содержимое файла {{ic|C:\NST\menu.lst}} на строки, подобные следующим:<br />
<br />
default 0<br />
timeout 1<br />
<br />
title Chainload into GRUB v2<br />
root (hd0,7)<br />
kernel /boot/grub/core.img<br />
<br />
===Визуальная настройка===<br />
<br />
В GRUB2 это возможно сделать, меняя вид меню.<br />
<br />
====Фоновое изображение и растровые шрифты====<br />
<br />
GRUB2 имеет поддержку фоновых изображений и растровых шрифтов в формате pf2. Шрифты unifont включены в пакет grub2 под именем {{ic|unicode.pf2}}, или, как только ascii знаки, под именем {{ic|ascii.pf2}}. Поддерживаемые форматы изображений включают tga, png и jpeg, (обеспечивается загрузкой нужных модулей). Максимальное поддерживаемое разрешение зависит от вашего оборудования. Пример настройки, устанавливающий tga файл как фоновое изображение показан ниже:<br />
<br />
if loadfont /usr/share/grub/unicode.pf2 ; then<br />
set gfxmode="1024x768x32"<br />
insmod gfxterm<br />
insmod vbe<br />
terminal_output gfxterm<br />
if terminal_output gfxterm; then true ; else<br />
terminal gfxterm<br />
fi<br />
fi<br />
insmod tga<br />
background_image /boot/grub/archlinux.tga<br />
<br />
{{Note|Если этот пример вам не подходит, попробуйте заменить {{Ic|1=gfxmode="1024x768x32"}} на {{Ic|1=vbemode="0x105"}}.}}<br />
{{Note|Чтобы показать все режимы, которые вы можете использовать, введите команду {{Ic|1=vbeinfo}} в командной строке grub2 (вы должны загрузить модуль vbe перед этим).}}<br />
{{Note|Если у вас Grub установлен на отдельный раздел, /boot/grub/archlinux.tga заменяется на /grub/archlinux.tga.}}<br />
<br />
====Цвета меню====<br />
<br />
Чтобы изменить цвета в GRUB2, вы должны сделать настройку в файле {{ic|/boot/grub/grub.cfg}}. Например, цвета по умолчанию для Arch:<br />
<br />
set menu_color_normal=light-blue/black<br />
set menu_color_highlight=light-cyan/blue<br />
<br />
Доступные цвета для GRUB2 находятся на сайте: http://www.gnu.org/software/grub/manual/html_node/Theme-file-format.html#Theme-file-format.<br />
<br />
====Скрытое меню====<br />
<br />
Для скрытого меню вставьте эти строки в файл grub.cfg после инициализации картинки, но до ''menuentries'' (например: background_image /boot/grub/archlinux.tga).<br />
<br />
set timeout=5<br />
<br />
echo -n "Press ESC to see the menu... "<br />
if sleep --verbose --interruptible 5 ; then<br />
set timeout=0<br />
fi<br />
<br />
====Установка разрешения буфера кадров====<br />
<br />
Чтобы изменить разрешение буфера кадров в grub2, добавьте строку, подобную этой, в раздел ''linux'' в grub.cfg:<br />
<br />
video=vesafb:mode=1024x768-32 vga=790<br />
<br />
В следующей формулировке, режим=<разрешение>-<глубина цвета> vga=<разрешение буфера кадров> используется, где разрешение буфера кадров можно найти по следующей схеме:<br />
<br />
+-------------------------------------------------+<br />
| 640x480 800x600 1024x768 1280x1024<br />
----+--------------------------------------------<br />
256 | 0x301=769 0x303=771 0x305=773 0x307=775<br />
32K | 0x310=784 0x313=787 0x316=790 0x319=793<br />
64K | 0x311=785 0x314=788 0x317=791 0x31A=794<br />
16M | 0x312=786 0x315=789 0x318=792 0x31B=795<br />
+-------------------------------------------------+<br />
<br />
Убедитесь, что вы вставили следующую строку где-нибудь, (insmod обычно можно найти на верху файла grub.cfg):<br />
<br />
insmod vbe<br />
<br />
=== Другие настойки ===<br />
<br />
==== LVM ====<br />
<br />
Если вы используете [[LVM]] для {{ic|/boot}}, добавьте следующую строку после до строк menuentry:<br />
<br />
insmod lvm<br />
<br />
и обозначьте ваш root в menuentry как:<br />
<br />
set root=(''lvm_group_name''-''lvm_logical_boot_partition_name'')<br />
<br />
Пример:<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
insmod lvm<br />
set root=(VolumeGroup-lv_boot)<br />
# you can only set following two lines<br />
linux /vmlinuz26 root=/dev/mapper/VolumeGroup-root ro<br />
initrd /kernel26.img<br />
}<br />
<br />
==== Постоянное наименование устройств ====<br />
<br />
Чтобы просмотреть UUIDs, наберите:<br />
# blkid<br />
<br />
Замените линию {{Ic|root}} следующей:<br />
<br />
linux /vmlinuz26 root=/dev/disk/by-uuid/<UUID> ro<br />
<br />
Тем не менее, вы ещё должны установить упоминание о Grub2's в раздел root. Чтобы сделать это, используйте команду {{Ic|search}}. Так мы устанавливаем переменную grub'а "root" через поиск раздела по его UUID'у:<br />
<br />
search --fs-uuid <UUID> --set=root<br />
Пример содержимого загрузочной записи, использующей Постоянное наименование устройств будет выглядеть так:<br />
<br />
menuentry "Arch Linux" {<br />
search --fs-uuid 355ccb5c-99e1-400d-b612-451f9247e35e --set root<br />
linux /boot/vmlinuz26 root=/dev/disk/by-uuid/355ccb5c-99e1-400d-b612-451f9247e35e ro<br />
initrd /boot/kernel26.img<br />
}<br />
<br />
==== Использование меток ====<br />
<br />
Есть возможность использовать метки - легко читаемые записи, присоединяемые к файловым системам при помощи опции {{Ic|--label}} в {{Ic|search}}. Сначала, пометьте ваши сущестующие разделы:<br />
<br />
# tune2fs -L a <LABEL> <PARTITION><br />
<br />
Затем, добавьте содержимое используя метки. Например:<br />
<br />
menuentry "Arch Linux, session texte" {<br />
search --label archroot --set root<br />
linux /boot/vmlinuz26 root=/dev/disk/by-label/archroot ro<br />
initrd /boot/kernel26.img<br />
}<br />
<br />
== Использование командной строки ==<br />
<br />
Так как MBR слишком мал, чтобы хранить все модули GRUB2, здесь располагаются только меню и несколько базовых команд. Основная часть функциональности GRUB2 заложена в модулях в {{ic|/boot/grub}}, которые загружаются по надобности. В случае возникновения ошибки GRUB2 может не загрузится. Тогда появится командная строка.<br />
<br />
GRUB2 поддерживает много консолей. Если есть проблема чтения меню, но загрузчик может найти диски, вас перебросит в "нормальную" консоль.<br />
<br />
sh:grub><br />
<br />
Если проблема серьёзная, (напримерЮ GRUB не может найти требуемые файлы),вас перебросит в консоль "восстановления".<br />
<br />
grub rescue><br />
<br />
Консоль восстановления - это ограниченная версия обычной консоли, с меньшей функциональностью. Если вы переброшены в консоль восстановления, сначала попытаетесь загрузить модуль нормальной консоли, затем запустите её.<br />
<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
grub rescue> insmod (hdX,Y)/boot/grub/normal.mod<br />
rescue:grub> normal<br />
<br />
== Использование консоли восстановления ==<br />
<br />
Сначала прочтите [[#Использование командной строки]]. Если невозможно активировать нормальную консоль, возможным решением может стать загрузка с Живого CD (LiveCD), или с других дисков восстановления чтобы исправить настройки и переустановить GRUB. Тем не менее, загрузочные диски не всегда доступны или необходимы.<br />
<br />
Доступные команды в этой консоли включают "insmod", "ls", "set", и "unset". В следующем примере используется "set" и "insmod". "set" изменяет переменные, а "insmod" загружает модули для повышения функциональности.<br />
<br />
Перед началом, пользователь должен знать местоположение своей папки {{ic|/boot}} (будь она отдельным разделом, или подпапкой в корневом разделе):<br />
<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
<br />
Где Х - это номер физического диска и Y - номер раздела.<br />
<br />
Чтобы расширить возможности консоли, загрузите модуль "linux":<br />
<br />
grub rescue> insmod (hdX,Y)/boot/grub/linux.mod<br />
<br />
{{Note|Если у вас отдельный boot раздел, исключите {{ic|/boot}} из пути, (например, пишите {{Ic|1=set prefix=(hdX,Y)/grub}} и {{Ic|insmod (hdX,Y)/grub/linux.mod}}).}}<br />
<br />
Это описание "linux" и "initrd" команд, которые должны быть вам знакомы (смотри [[#Настройка]]).<br />
<br />
Например, загрузка Arch Linux:<br />
<br />
set root=(hd0,5)<br />
linux /boot/vmlinuz26 root=/dev/sda5<br />
initrd /boot/kernel26.img<br />
boot<br />
<br />
С отдельным разделом boot измените пути, как было описано выше. Например:<br />
<br />
set root=(hd0,5)<br />
linux /vmlinuz26 root=/dev/sda6<br />
initrd /kernel26.img<br />
boot<br />
<br />
После успешной загрузки Arch Linux, пользователь сможет подкорректировать {{ic|grub.cfg}} и затем запустить:<br />
<br />
# grub-install /dev/sda<br />
<br />
для того, чтобы переустановить GRUB2 и полностью устранить проблему. Измените {{ic|/dev/sda}}, если требуется. Смотрите [[#Установка загрузчика]] для детальной информации.<br />
<br />
== Примеры исправления проблем ==<br />
<br />
Добавьте сюда сами.<br />
<br />
=== Сообщение об ошибке msdos-style ===<br />
<br />
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding won't be possible!<br />
grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.<br />
However, blocklists are UNRELIABLE and its use is discouraged.<br />
grub-setup: error: If you really want blocklists, use --force.<br />
<br />
Эта ошибка может возникнуть, когда вы попытаетесь установить в виртуальную машину VMware. Читайте больше об этом [http://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 здесь].<br />
<br />
Это также может случится, если первый раздел начинается сразу после MBR, без необходимого места в 60 блоков перед первым разделом.<br />
<br />
=== Grub-install вызывает зависание grub2 / legacy grub ===<br />
Отключите флоппи дисковод в биосе, даже если у вас его нет. Попробуйте использовать также --no-floppy и удалить fd0 строку из /boot/grub/device.map. Тем не менее, без отключения его в биосе, GRUB2 может всё равно не работать.<br />
<br />
=== Прочее ===<br />
Я не нашёл, как удалять grub1, и установил grub2 в MBR, но после этого он не стал по умолчанию загружаться. Загружался по умолчанию grub1. Лёгкий способ это исправить, это переименовать {{ic|menu.lst.pacsave}} или подобное, в {{ic|menu.lst}} (в /boot/grub/) для каждой строки меню, для которой вы хотите использовать grub2. В конце введите {{Ic|"chainloader +1"}}. Это даст команду grub1 вернуть контроль к grub2.<br />
<br />
Возможное решение: Допустим, boot раздел {{Ic|(hd0,1)}}, и корневой раздел {{Ic|(hd0,3)}} (grub2 наименование). grub-setup ищет {{ic|(hd0,3)/boot/grub/core.img}}. Он не может его найти просто потому, что он в {{ic|(hd0,1)/grub/core.img}}. Я скопировал папку grub в мою корневую дерикторию, и всё заработало отлично:<br />
<br />
Например (от root:)<br />
# mount /boot<br />
# cp -a /boot/grub /<br />
# umount /boot<br />
# mv /grub /boot/<br />
# grub-install /dev/sda</div>Archvillhttps://wiki.archlinux.org/index.php?title=GRUB_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=233855GRUB (Русский)2012-11-05T10:42:49Z<p>Archvill: /* Мультизагрузка */ some fixes. Replaced some instructions which required manual editing grub.cfg.</p>
<hr />
<div>[[Category:Процесс Загрузки (Русский)]]<br />
[[Category:Руководства (Русский)]]<br />
[[cs:GRUB2]]<br />
[[en:GRUB2]]<br />
[[es:GRUB2]]<br />
[[fr:GRUB2]]<br />
[[id:GRUB2]]<br />
[[it:GRUB2]]<br />
[[tr:GRUB2]]<br />
[[zh-CN:GRUB2]]<br />
[[zh-TW:GRUB2]]<br />
{{Article summary start}}<br />
{{Article summary text|Covers various aspects of the next generation of the GRand Unified Bootloader (GRUB2).}}<br />
{{Article summary end}}<br />
<br />
[http://www.gnu.org/software/grub/grub-2.en.html GRUB2] - это следующее поколение GRand Uniform Bootloader (GRUB). GRUB2 основывается на [http://www.nongnu.org/pupa/ PUPA], который является исследовательским проектом, изучающим следующее поколение GRUB. GRUB 2 был переписан с нуля, чтобы исключить мусор и внедрить модульность и портативность.<br />
<br />
Вкратце, загрузчик - это первая программа, которая загружается при старте компьютера. Она отвечает за загрузку и передачу управления ядру Linux. Ядро, в свою очередь, запускает остальную часть операционной системы.<br />
<br />
В данный момент, GRUB де-фа́кто является стандартным загрузчиком LINUX, и в скором времени будет заменён на GRUB2. Когда это случится, "GRUB" станет "GRUB Legacy". <br />
<br />
== Предисловие ==<br />
GRUB2 до сих пор разрабатывается, и мы вынужденны сделать предупреждение. '''Считайте, что вы предупреждены!''' GRUB2 может не оправдать ожиданий, новшества могут отсутствовать, функциональность может изменится. Если нет особой причины использовать GRUB2, пользователь должен использовать более стабильный [[GRUB]].<br />
<br />
=== Замечание для текущих пользователей GRUB ===<br />
<br />
* Существуют различия между командами GRUB и GRUB2. Изучите [http://grub.enbug.org/CommandList команды GRUB2].<br />
<br />
* GRUB2 теперь ''модульный'' и больше не требует "stage 1.5". В результате, загрузчик сам по себе ограничен -- модули загружаются с жёсткого диска по надобности для расширения функциональности.<br />
<br />
* Наименования устройств изменились между GRUB и GRUB2. Разделы нумеруются с 1, приводы с 0. Например, {{ic|/dev/sda1}} будет ссылатся на {{Ic|(hd0,1)}} в GRUB2.<br />
<br />
== Установка ==<br />
<br />
GRUB2 может быть установлен через pacman (и заменит grub, если он установлен):<br />
# pacman -S grub2<br />
Также, GRUB2 должен быть установлен в загрузочный сектор диска или раздела, чтобы быть загрузчиком. Это описано в секции [[#Установка загрузчика]].<br />
<br />
=== Установка GRUB2 в процессе установки Arch Linux ===<br />
<br />
* Пропустите шаг '''Установка загрузчика''' и выйдите из установщика.<br />
* Вы должны настроить сеть:<br />
# aif -p partial-configure-network<br />
* Полученные настройки нужно скопировать в установленную систему:<br />
# cp /etc/resolv.conf /mnt/etc/resolv.conf<br />
* Из живого окружения установщика, измените корневую папку на установленную систему:<br />
# mount -o bind /dev /mnt/dev<br />
# chroot /mnt bash<br />
* Установите пакет GRUB2:<br />
# pacman -S grub2-bios<br />
<br />
=== Установка загрузчика ===<br />
<br />
GRUB2 должен быть установлен из живого окружения или напрямую из консоли установщика Arch.<br />
<br />
Для установки GRUB2 нужно выполнить две команды от пользователя root:<br />
# grub_bios-install --boot-directory=/boot --no-floppy --recheck /dev/sda<br />
# cp /usr/share/grub/{unicode.pf2,ascii.pf2} /boot/grub/<br />
<br />
* Также рекомендуется сгенерировать файл grub.cfg командой:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
где {{ic|/dev/sda}} это место установки (в данном случае это MBR первого диска SATA). Если вы используете [[LVM]] для вашего {{ic|/boot}}, вы можете установить GRUB2 на различные физические диски.<br />
<br />
Эта команда читает конфигурационный файл /etc/default/grub, и, в случае вызова с консоли установщика, необходимо предварительно выполнить команду arch-chroot (чтобы не был использован файл /etc/default/grub с установочного образа).<br />
<br />
Если при этом происходит ошибка:<br />
<br />
grub-probe: error: Cannot get the real path of '/dev/fd0'<br />
Auto-detection of a filesystem module failed.<br />
Please specify the module with the option '--modules' explicitly.<br />
<br />
Попробуйте добавить {{Ic|--recheck}} в аргументы как показано ниже:<br />
# grub-install --recheck /dev/sda<br />
<br />
== Настройка ==<br />
<br />
Файл настройки находится в {{ic|/boot/grub/grub.cfg}}. '''Не редактируйте этот файл вручную'''. Для изменения конфигураций используйте файл /etc/default/grub и файлы в каталоге /etc/grub.d/. Если Вы хотите добавить свои пункты в меню граба то настроить их можно в файле /etc/grub.d/40_custom, либо в /boot/grub/custom.cfg. После изменений запускайте команду:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
Она не только создаст файл boot/grub/grub.cfg, но и проверит конфигурации на наличие ошибок.<br />
<br />
=== grub-mkconfig ===<br />
<br />
Скрипт grub-mkconfig может быть использован для генерации файла {{ic|grub.cfg}}. Чтобы получить файл {{ic|grub.cfg}}, выполните команду:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
Для автоматического обнаружения ОС отличных от Linux установите пакет {{Ic|os-prober}}.<br />
<br />
=== grub.cfg ===<br />
<br />
Основные файлы grub используют следующие опции:<br />
* {{Ic|(hdX,Y)}} - раздел {{Ic|Y}} на диске {{Ic|X}}, нумерация разделов начинается с 1,дисков с 0<br />
* {{Ic|1=set default=N}} - это загрузка записи с номером N, которую делает загрузчик после истечения таймера на действие пользователя.<br />
* {{Ic|1=set timeout=M}} - это время {{Ic|M}} ожидания в секундах для выбора пользователя, до того, как система по умолчанию не будет загружена.<br />
* {{Ic|<nowiki>menuentry "title" {entry options}</nowiki>}} - это название загрузочной записи {{Ic|title}}<br />
* {{Ic|1=set root=(hdX,Y)}} устанавливает загрузочный раздел, где хранится ядро и модули GRUB (boot может быть не отдельным разделом, а просто папкой в корневом разделе ({{ic|/}})<br />
<br />
Пример конфигурации:<br />
<br />
{{hc|/boot/grub/grub.cfg<br />
|2=<nowiki><br />
# Config file for GRUB2 - The GNU GRand Unified Bootloader<br />
# /boot/grub/grub.cfg<br />
<br />
# DEVICE NAME CONVERSIONS<br />
#<br />
# Linux Grub<br />
# -------------------------<br />
# /dev/fd0 (fd0)<br />
# /dev/sda (hd0)<br />
# /dev/sdb2 (hd1,2)<br />
# /dev/sda3 (hd0,3)<br />
#<br />
<br />
# Timeout for menu<br />
set timeout=5<br />
<br />
# Set default boot entry as Entry 0<br />
set default=0<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
set root=(hd0,1)<br />
linux /vmlinuz26 root=/dev/sda3 ro<br />
initrd /kernel26.img<br />
}<br />
<br />
## (1) Windows<br />
#menuentry "Windows" {<br />
#set root=(hd0,3)<br />
#chainloader +1<br />
#}<br />
</nowiki>}}<br />
<br />
Если у вас нет отдельного раздела boot, {{Ic|'/boot'}} должен присутствовать в указании пути в {{ic|grub.cfg}}. Пример:<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
set root=(hd0,1)<br />
linux /boot/vmlinuz26 root=/dev/sda1 ro<br />
initrd /boot/kernel26.img<br />
}<br />
<br />
=== Мультизагрузка ===<br />
<br />
Для добавления пунктов в загрузочное меню GRUB необходимо отредактировать файл /etc/grub.d/40_cutsom. Все, что добавлено в этот файл, будет дозаписано в grub.cfg вызовом команды grub-mkconfig.<br />
Примеры конфигурации для дополнительных пунктов меню запуска Linux и Windows приведены ниже. Их необходимо дописать в конец файла 40_custom и обновить конфигурацию GRUB2 командой grub-mkconfig -o /boot/grub/grub.cfg.<br />
<br />
==== С GNU/Linux ====<br />
<br />
Если другой дистрибутив на разделе {{ic|sda2}}:<br />
<br />
menuentry "Other Linux" {<br />
set root=(hd0,2)<br />
linux /boot/vmlinuz (add other options here as required)<br />
initrd /boot/initrd.img (if the other kernel uses/needs one)<br />
}<br />
<br />
==== С Windows ====<br />
<br />
Добавьте это в конец файла {{ic|/boot/grub/grub.cfg}}. В этом случае ваш Windows находится на разделе {{ic|sda3}}.<br />
<br />
# (2) Windows XP<br />
menuentry "Windows XP" {<br />
set root=(hd0,3)<br />
chainloader +1<br />
}<br />
<br />
==== С Windows при помощи EasyBCD и NeoGRUB ====<br />
<br />
До тех пор, пока EasyBCD's NeoGRUB не совместимы с форматом меню GRUB2, установите цепную загрузку через них, заменив содержимое файла {{ic|C:\NST\menu.lst}} на строки, подобные следующим:<br />
<br />
default 0<br />
timeout 1<br />
<br />
title Chainload into GRUB v2<br />
root (hd0,7)<br />
kernel /boot/grub/core.img<br />
<br />
===Визуальная настройка===<br />
<br />
В GRUB2 это возможно сделать, меняя вид меню.<br />
<br />
====Фоновое изображение и растровые шрифты====<br />
<br />
GRUB2 имеет поддержку фоновых изображений и растровых шрифтов в формате pf2. Шрифты unifont включены в пакет grub2 под именем {{ic|unicode.pf2}}, или, как только ascii знаки, под именем {{ic|ascii.pf2}}. Поддерживаемые форматы изображений включают tga, png и jpeg, (обеспечивается загрузкой нужных модулей). Максимальное поддерживаемое разрешение зависит от вашего оборудования. Пример настройки, устанавливающий tga файл как фоновое изображение показан ниже:<br />
<br />
if loadfont /usr/share/grub/unicode.pf2 ; then<br />
set gfxmode="1024x768x32"<br />
insmod gfxterm<br />
insmod vbe<br />
terminal_output gfxterm<br />
if terminal_output gfxterm; then true ; else<br />
terminal gfxterm<br />
fi<br />
fi<br />
insmod tga<br />
background_image /boot/grub/archlinux.tga<br />
<br />
{{Note|Если этот пример вам не подходит, попробуйте заменить {{Ic|1=gfxmode="1024x768x32"}} на {{Ic|1=vbemode="0x105"}}.}}<br />
{{Note|Чтобы показать все режимы, которые вы можете использовать, введите команду {{Ic|1=vbeinfo}} в командной строке grub2 (вы должны загрузить модуль vbe перед этим).}}<br />
{{Note|Если у вас Grub установлен на отдельный раздел, /boot/grub/archlinux.tga заменяется на /grub/archlinux.tga.}}<br />
<br />
====Цвета меню====<br />
<br />
Чтобы изменить цвета в GRUB2, вы должны сделать настройку в файле {{ic|/boot/grub/grub.cfg}}. Например, цвета по умолчанию для Arch:<br />
<br />
set menu_color_normal=light-blue/black<br />
set menu_color_highlight=light-cyan/blue<br />
<br />
Доступные цвета для GRUB2 находятся на сайте: http://www.gnu.org/software/grub/manual/html_node/Theme-file-format.html#Theme-file-format.<br />
<br />
====Скрытое меню====<br />
<br />
Для скрытого меню вставьте эти строки в файл grub.cfg после инициализации картинки, но до ''menuentries'' (например: background_image /boot/grub/archlinux.tga).<br />
<br />
set timeout=5<br />
<br />
echo -n "Press ESC to see the menu... "<br />
if sleep --verbose --interruptible 5 ; then<br />
set timeout=0<br />
fi<br />
<br />
====Установка разрешения буфера кадров====<br />
<br />
Чтобы изменить разрешение буфера кадров в grub2, добавьте строку, подобную этой, в раздел ''linux'' в grub.cfg:<br />
<br />
video=vesafb:mode=1024x768-32 vga=790<br />
<br />
В следующей формулировке, режим=<разрешение>-<глубина цвета> vga=<разрешение буфера кадров> используется, где разрешение буфера кадров можно найти по следующей схеме:<br />
<br />
+-------------------------------------------------+<br />
| 640x480 800x600 1024x768 1280x1024<br />
----+--------------------------------------------<br />
256 | 0x301=769 0x303=771 0x305=773 0x307=775<br />
32K | 0x310=784 0x313=787 0x316=790 0x319=793<br />
64K | 0x311=785 0x314=788 0x317=791 0x31A=794<br />
16M | 0x312=786 0x315=789 0x318=792 0x31B=795<br />
+-------------------------------------------------+<br />
<br />
Убедитесь, что вы вставили следующую строку где-нибудь, (insmod обычно можно найти на верху файла grub.cfg):<br />
<br />
insmod vbe<br />
<br />
=== Другие настойки ===<br />
<br />
==== LVM ====<br />
<br />
Если вы используете [[LVM]] для {{ic|/boot}}, добавьте следующую строку после до строк menuentry:<br />
<br />
insmod lvm<br />
<br />
и обозначьте ваш root в menuentry как:<br />
<br />
set root=(''lvm_group_name''-''lvm_logical_boot_partition_name'')<br />
<br />
Пример:<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
insmod lvm<br />
set root=(VolumeGroup-lv_boot)<br />
# you can only set following two lines<br />
linux /vmlinuz26 root=/dev/mapper/VolumeGroup-root ro<br />
initrd /kernel26.img<br />
}<br />
<br />
==== Постоянное наименование устройств ====<br />
<br />
Чтобы просмотреть UUIDs, наберите:<br />
# blkid<br />
<br />
Замените линию {{Ic|root}} следующей:<br />
<br />
linux /vmlinuz26 root=/dev/disk/by-uuid/<UUID> ro<br />
<br />
Тем не менее, вы ещё должны установить упоминание о Grub2's в раздел root. Чтобы сделать это, используйте команду {{Ic|search}}. Так мы устанавливаем переменную grub'а "root" через поиск раздела по его UUID'у:<br />
<br />
search --fs-uuid <UUID> --set=root<br />
Пример содержимого загрузочной записи, использующей Постоянное наименование устройств будет выглядеть так:<br />
<br />
menuentry "Arch Linux" {<br />
search --fs-uuid 355ccb5c-99e1-400d-b612-451f9247e35e --set root<br />
linux /boot/vmlinuz26 root=/dev/disk/by-uuid/355ccb5c-99e1-400d-b612-451f9247e35e ro<br />
initrd /boot/kernel26.img<br />
}<br />
<br />
==== Использование меток ====<br />
<br />
Есть возможность использовать метки - легко читаемые записи, присоединяемые к файловым системам при помощи опции {{Ic|--label}} в {{Ic|search}}. Сначала, пометьте ваши сущестующие разделы:<br />
<br />
# tune2fs -L a <LABEL> <PARTITION><br />
<br />
Затем, добавьте содержимое используя метки. Например:<br />
<br />
menuentry "Arch Linux, session texte" {<br />
search --label archroot --set root<br />
linux /boot/vmlinuz26 root=/dev/disk/by-label/archroot ro<br />
initrd /boot/kernel26.img<br />
}<br />
<br />
== Использование командной строки ==<br />
<br />
Так как MBR слишком мал, чтобы хранить все модули GRUB2, здесь располагаются только меню и несколько базовых команд. Основная часть функциональности GRUB2 заложена в модулях в {{ic|/boot/grub}}, которые загружаются по надобности. В случае возникновения ошибки GRUB2 может не загрузится. Тогда появится командная строка.<br />
<br />
GRUB2 поддерживает много консолей. Если есть проблема чтения меню, но загрузчик может найти диски, вас перебросит в "нормальную" консоль.<br />
<br />
sh:grub><br />
<br />
Если проблема серьёзная, (напримерЮ GRUB не может найти требуемые файлы),вас перебросит в консоль "восстановления".<br />
<br />
grub rescue><br />
<br />
Консоль восстановления - это ограниченная версия обычной консоли, с меньшей функциональностью. Если вы переброшены в консоль восстановления, сначала попытаетесь загрузить модуль нормальной консоли, затем запустите её.<br />
<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
grub rescue> insmod (hdX,Y)/boot/grub/normal.mod<br />
rescue:grub> normal<br />
<br />
== Использование консоли восстановления ==<br />
<br />
Сначала прочтите [[#Использование командной строки]]. Если невозможно активировать нормальную консоль, возможным решением может стать загрузка с Живого CD (LiveCD), или с других дисков восстановления чтобы исправить настройки и переустановить GRUB. Тем не менее, загрузочные диски не всегда доступны или необходимы.<br />
<br />
Доступные команды в этой консоли включают "insmod", "ls", "set", и "unset". В следующем примере используется "set" и "insmod". "set" изменяет переменные, а "insmod" загружает модули для повышения функциональности.<br />
<br />
Перед началом, пользователь должен знать местоположение своей папки {{ic|/boot}} (будь она отдельным разделом, или подпапкой в корневом разделе):<br />
<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
<br />
Где Х - это номер физического диска и Y - номер раздела.<br />
<br />
Чтобы расширить возможности консоли, загрузите модуль "linux":<br />
<br />
grub rescue> insmod (hdX,Y)/boot/grub/linux.mod<br />
<br />
{{Note|Если у вас отдельный boot раздел, исключите {{ic|/boot}} из пути, (например, пишите {{Ic|1=set prefix=(hdX,Y)/grub}} и {{Ic|insmod (hdX,Y)/grub/linux.mod}}).}}<br />
<br />
Это описание "linux" и "initrd" команд, которые должны быть вам знакомы (смотри [[#Настройка]]).<br />
<br />
Например, загрузка Arch Linux:<br />
<br />
set root=(hd0,5)<br />
linux /boot/vmlinuz26 root=/dev/sda5<br />
initrd /boot/kernel26.img<br />
boot<br />
<br />
С отдельным разделом boot измените пути, как было описано выше. Например:<br />
<br />
set root=(hd0,5)<br />
linux /vmlinuz26 root=/dev/sda6<br />
initrd /kernel26.img<br />
boot<br />
<br />
После успешной загрузки Arch Linux, пользователь сможет подкорректировать {{ic|grub.cfg}} и затем запустить:<br />
<br />
# grub-install /dev/sda<br />
<br />
для того, чтобы переустановить GRUB2 и полностью устранить проблему. Измените {{ic|/dev/sda}}, если требуется. Смотрите [[#Установка загрузчика]] для детальной информации.<br />
<br />
== Примеры исправления проблем ==<br />
<br />
Добавьте сюда сами.<br />
<br />
=== Сообщение об ошибке msdos-style ===<br />
<br />
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding won't be possible!<br />
grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.<br />
However, blocklists are UNRELIABLE and its use is discouraged.<br />
grub-setup: error: If you really want blocklists, use --force.<br />
<br />
Эта ошибка может возникнуть, когда вы попытаетесь установить в виртуальную машину VMware. Читайте больше об этом [http://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 здесь].<br />
<br />
Это также может случится, если первый раздел начинается сразу после MBR, без необходимого места в 60 блоков перед первым разделом.<br />
<br />
=== Grub-install вызывает зависание grub2 / legacy grub ===<br />
Отключите флоппи дисковод в биосе, даже если у вас его нет. Попробуйте использовать также --no-floppy и удалить fd0 строку из /boot/grub/device.map. Тем не менее, без отключения его в биосе, GRUB2 может всё равно не работать.<br />
<br />
=== Прочее ===<br />
Я не нашёл, как удалять grub1, и установил grub2 в MBR, но после этого он не стал по умолчанию загружаться. Загружался по умолчанию grub1. Лёгкий способ это исправить, это переименовать {{ic|menu.lst.pacsave}} или подобное, в {{ic|menu.lst}} (в /boot/grub/) для каждой строки меню, для которой вы хотите использовать grub2. В конце введите {{Ic|"chainloader +1"}}. Это даст команду grub1 вернуть контроль к grub2.<br />
<br />
Возможное решение: Допустим, boot раздел {{Ic|(hd0,1)}}, и корневой раздел {{Ic|(hd0,3)}} (grub2 наименование). grub-setup ищет {{ic|(hd0,3)/boot/grub/core.img}}. Он не может его найти просто потому, что он в {{ic|(hd0,1)/grub/core.img}}. Я скопировал папку grub в мою корневую дерикторию, и всё заработало отлично:<br />
<br />
Например (от root:)<br />
# mount /boot<br />
# cp -a /boot/grub /<br />
# umount /boot<br />
# mv /grub /boot/<br />
# grub-install /dev/sda</div>Archvillhttps://wiki.archlinux.org/index.php?title=GRUB_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=233854GRUB (Русский)2012-11-05T10:30:31Z<p>Archvill: /* Установка загрузчика */</p>
<hr />
<div>[[Category:Процесс Загрузки (Русский)]]<br />
[[Category:Руководства (Русский)]]<br />
[[cs:GRUB2]]<br />
[[en:GRUB2]]<br />
[[es:GRUB2]]<br />
[[fr:GRUB2]]<br />
[[id:GRUB2]]<br />
[[it:GRUB2]]<br />
[[tr:GRUB2]]<br />
[[zh-CN:GRUB2]]<br />
[[zh-TW:GRUB2]]<br />
{{Article summary start}}<br />
{{Article summary text|Covers various aspects of the next generation of the GRand Unified Bootloader (GRUB2).}}<br />
{{Article summary end}}<br />
<br />
[http://www.gnu.org/software/grub/grub-2.en.html GRUB2] - это следующее поколение GRand Uniform Bootloader (GRUB). GRUB2 основывается на [http://www.nongnu.org/pupa/ PUPA], который является исследовательским проектом, изучающим следующее поколение GRUB. GRUB 2 был переписан с нуля, чтобы исключить мусор и внедрить модульность и портативность.<br />
<br />
Вкратце, загрузчик - это первая программа, которая загружается при старте компьютера. Она отвечает за загрузку и передачу управления ядру Linux. Ядро, в свою очередь, запускает остальную часть операционной системы.<br />
<br />
В данный момент, GRUB де-фа́кто является стандартным загрузчиком LINUX, и в скором времени будет заменён на GRUB2. Когда это случится, "GRUB" станет "GRUB Legacy". <br />
<br />
== Предисловие ==<br />
GRUB2 до сих пор разрабатывается, и мы вынужденны сделать предупреждение. '''Считайте, что вы предупреждены!''' GRUB2 может не оправдать ожиданий, новшества могут отсутствовать, функциональность может изменится. Если нет особой причины использовать GRUB2, пользователь должен использовать более стабильный [[GRUB]].<br />
<br />
=== Замечание для текущих пользователей GRUB ===<br />
<br />
* Существуют различия между командами GRUB и GRUB2. Изучите [http://grub.enbug.org/CommandList команды GRUB2].<br />
<br />
* GRUB2 теперь ''модульный'' и больше не требует "stage 1.5". В результате, загрузчик сам по себе ограничен -- модули загружаются с жёсткого диска по надобности для расширения функциональности.<br />
<br />
* Наименования устройств изменились между GRUB и GRUB2. Разделы нумеруются с 1, приводы с 0. Например, {{ic|/dev/sda1}} будет ссылатся на {{Ic|(hd0,1)}} в GRUB2.<br />
<br />
== Установка ==<br />
<br />
GRUB2 может быть установлен через pacman (и заменит grub, если он установлен):<br />
# pacman -S grub2<br />
Также, GRUB2 должен быть установлен в загрузочный сектор диска или раздела, чтобы быть загрузчиком. Это описано в секции [[#Установка загрузчика]].<br />
<br />
=== Установка GRUB2 в процессе установки Arch Linux ===<br />
<br />
* Пропустите шаг '''Установка загрузчика''' и выйдите из установщика.<br />
* Вы должны настроить сеть:<br />
# aif -p partial-configure-network<br />
* Полученные настройки нужно скопировать в установленную систему:<br />
# cp /etc/resolv.conf /mnt/etc/resolv.conf<br />
* Из живого окружения установщика, измените корневую папку на установленную систему:<br />
# mount -o bind /dev /mnt/dev<br />
# chroot /mnt bash<br />
* Установите пакет GRUB2:<br />
# pacman -S grub2-bios<br />
<br />
=== Установка загрузчика ===<br />
<br />
GRUB2 должен быть установлен из живого окружения или напрямую из консоли установщика Arch.<br />
<br />
Для установки GRUB2 нужно выполнить две команды от пользователя root:<br />
# grub_bios-install --boot-directory=/boot --no-floppy --recheck /dev/sda<br />
# cp /usr/share/grub/{unicode.pf2,ascii.pf2} /boot/grub/<br />
<br />
* Также рекомендуется сгенерировать файл grub.cfg командой:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
где {{ic|/dev/sda}} это место установки (в данном случае это MBR первого диска SATA). Если вы используете [[LVM]] для вашего {{ic|/boot}}, вы можете установить GRUB2 на различные физические диски.<br />
<br />
Эта команда читает конфигурационный файл /etc/default/grub, и, в случае вызова с консоли установщика, необходимо предварительно выполнить команду arch-chroot (чтобы не был использован файл /etc/default/grub с установочного образа).<br />
<br />
Если при этом происходит ошибка:<br />
<br />
grub-probe: error: Cannot get the real path of '/dev/fd0'<br />
Auto-detection of a filesystem module failed.<br />
Please specify the module with the option '--modules' explicitly.<br />
<br />
Попробуйте добавить {{Ic|--recheck}} в аргументы как показано ниже:<br />
# grub-install --recheck /dev/sda<br />
<br />
== Настройка ==<br />
<br />
Файл настройки находится в {{ic|/boot/grub/grub.cfg}}. '''Не редактируйте этот файл вручную'''. Для изменения конфигураций используйте файл /etc/default/grub и файлы в каталоге /etc/grub.d/. Если Вы хотите добавить свои пункты в меню граба то настроить их можно в файле /etc/grub.d/40_custom, либо в /boot/grub/custom.cfg. После изменений запускайте команду:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
Она не только создаст файл boot/grub/grub.cfg, но и проверит конфигурации на наличие ошибок.<br />
<br />
=== grub-mkconfig ===<br />
<br />
Скрипт grub-mkconfig может быть использован для генерации файла {{ic|grub.cfg}}. Чтобы получить файл {{ic|grub.cfg}}, выполните команду:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
Для автоматического обнаружения ОС отличных от Linux установите пакет {{Ic|os-prober}}.<br />
<br />
=== grub.cfg ===<br />
<br />
Основные файлы grub используют следующие опции:<br />
* {{Ic|(hdX,Y)}} - раздел {{Ic|Y}} на диске {{Ic|X}}, нумерация разделов начинается с 1,дисков с 0<br />
* {{Ic|1=set default=N}} - это загрузка записи с номером N, которую делает загрузчик после истечения таймера на действие пользователя.<br />
* {{Ic|1=set timeout=M}} - это время {{Ic|M}} ожидания в секундах для выбора пользователя, до того, как система по умолчанию не будет загружена.<br />
* {{Ic|<nowiki>menuentry "title" {entry options}</nowiki>}} - это название загрузочной записи {{Ic|title}}<br />
* {{Ic|1=set root=(hdX,Y)}} устанавливает загрузочный раздел, где хранится ядро и модули GRUB (boot может быть не отдельным разделом, а просто папкой в корневом разделе ({{ic|/}})<br />
<br />
Пример конфигурации:<br />
<br />
{{hc|/boot/grub/grub.cfg<br />
|2=<nowiki><br />
# Config file for GRUB2 - The GNU GRand Unified Bootloader<br />
# /boot/grub/grub.cfg<br />
<br />
# DEVICE NAME CONVERSIONS<br />
#<br />
# Linux Grub<br />
# -------------------------<br />
# /dev/fd0 (fd0)<br />
# /dev/sda (hd0)<br />
# /dev/sdb2 (hd1,2)<br />
# /dev/sda3 (hd0,3)<br />
#<br />
<br />
# Timeout for menu<br />
set timeout=5<br />
<br />
# Set default boot entry as Entry 0<br />
set default=0<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
set root=(hd0,1)<br />
linux /vmlinuz26 root=/dev/sda3 ro<br />
initrd /kernel26.img<br />
}<br />
<br />
## (1) Windows<br />
#menuentry "Windows" {<br />
#set root=(hd0,3)<br />
#chainloader +1<br />
#}<br />
</nowiki>}}<br />
<br />
Если у вас нет отдельного раздела boot, {{Ic|'/boot'}} должен присутствовать в указании пути в {{ic|grub.cfg}}. Пример:<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
set root=(hd0,1)<br />
linux /boot/vmlinuz26 root=/dev/sda1 ro<br />
initrd /boot/kernel26.img<br />
}<br />
<br />
=== Мультизагрузка ===<br />
<br />
Существует два самых распространённых пути настройки файла {{ic|grub.cfg}}.<br />
<br />
==== С GNU/Linux ====<br />
<br />
Если другой дистрибутив на разделе {{ic|sda2}}:<br />
<br />
menuentry "Other Linux" {<br />
set root=(hd0,2)<br />
linux /boot/vmlinuz (add other options here as required)<br />
initrd /boot/initrd.img (if the other kernel uses/needs one)<br />
}<br />
<br />
==== С Windows ====<br />
<br />
Добавьте это в конец файла {{ic|/boot/grub/grub.cfg}}. В этом случае ваш Windows находится на разделе {{ic|sda3}}.<br />
<br />
# (2) Windows XP<br />
menuentry "Windows XP" {<br />
set root=(hd0,3)<br />
chainloader +1<br />
}<br />
<br />
==== С Windows при помощи EasyBCD и NeoGRUB ====<br />
<br />
До тех пор, пока EasyBCD's NeoGRUB не совместимы с форматом меню GRUB2, установите цепную загрузку через них, заменив содержимое файла {{ic|C:\NST\menu.lst}} на строки, подобные следующим:<br />
<br />
default 0<br />
timeout 1<br />
<br />
title Chainload into GRUB v2<br />
root (hd0,7)<br />
kernel /boot/grub/core.img<br />
<br />
===Визуальная настройка===<br />
<br />
В GRUB2 это возможно сделать, меняя вид меню.<br />
<br />
====Фоновое изображение и растровые шрифты====<br />
<br />
GRUB2 имеет поддержку фоновых изображений и растровых шрифтов в формате pf2. Шрифты unifont включены в пакет grub2 под именем {{ic|unicode.pf2}}, или, как только ascii знаки, под именем {{ic|ascii.pf2}}. Поддерживаемые форматы изображений включают tga, png и jpeg, (обеспечивается загрузкой нужных модулей). Максимальное поддерживаемое разрешение зависит от вашего оборудования. Пример настройки, устанавливающий tga файл как фоновое изображение показан ниже:<br />
<br />
if loadfont /usr/share/grub/unicode.pf2 ; then<br />
set gfxmode="1024x768x32"<br />
insmod gfxterm<br />
insmod vbe<br />
terminal_output gfxterm<br />
if terminal_output gfxterm; then true ; else<br />
terminal gfxterm<br />
fi<br />
fi<br />
insmod tga<br />
background_image /boot/grub/archlinux.tga<br />
<br />
{{Note|Если этот пример вам не подходит, попробуйте заменить {{Ic|1=gfxmode="1024x768x32"}} на {{Ic|1=vbemode="0x105"}}.}}<br />
{{Note|Чтобы показать все режимы, которые вы можете использовать, введите команду {{Ic|1=vbeinfo}} в командной строке grub2 (вы должны загрузить модуль vbe перед этим).}}<br />
{{Note|Если у вас Grub установлен на отдельный раздел, /boot/grub/archlinux.tga заменяется на /grub/archlinux.tga.}}<br />
<br />
====Цвета меню====<br />
<br />
Чтобы изменить цвета в GRUB2, вы должны сделать настройку в файле {{ic|/boot/grub/grub.cfg}}. Например, цвета по умолчанию для Arch:<br />
<br />
set menu_color_normal=light-blue/black<br />
set menu_color_highlight=light-cyan/blue<br />
<br />
Доступные цвета для GRUB2 находятся на сайте: http://www.gnu.org/software/grub/manual/html_node/Theme-file-format.html#Theme-file-format.<br />
<br />
====Скрытое меню====<br />
<br />
Для скрытого меню вставьте эти строки в файл grub.cfg после инициализации картинки, но до ''menuentries'' (например: background_image /boot/grub/archlinux.tga).<br />
<br />
set timeout=5<br />
<br />
echo -n "Press ESC to see the menu... "<br />
if sleep --verbose --interruptible 5 ; then<br />
set timeout=0<br />
fi<br />
<br />
====Установка разрешения буфера кадров====<br />
<br />
Чтобы изменить разрешение буфера кадров в grub2, добавьте строку, подобную этой, в раздел ''linux'' в grub.cfg:<br />
<br />
video=vesafb:mode=1024x768-32 vga=790<br />
<br />
В следующей формулировке, режим=<разрешение>-<глубина цвета> vga=<разрешение буфера кадров> используется, где разрешение буфера кадров можно найти по следующей схеме:<br />
<br />
+-------------------------------------------------+<br />
| 640x480 800x600 1024x768 1280x1024<br />
----+--------------------------------------------<br />
256 | 0x301=769 0x303=771 0x305=773 0x307=775<br />
32K | 0x310=784 0x313=787 0x316=790 0x319=793<br />
64K | 0x311=785 0x314=788 0x317=791 0x31A=794<br />
16M | 0x312=786 0x315=789 0x318=792 0x31B=795<br />
+-------------------------------------------------+<br />
<br />
Убедитесь, что вы вставили следующую строку где-нибудь, (insmod обычно можно найти на верху файла grub.cfg):<br />
<br />
insmod vbe<br />
<br />
=== Другие настойки ===<br />
<br />
==== LVM ====<br />
<br />
Если вы используете [[LVM]] для {{ic|/boot}}, добавьте следующую строку после до строк menuentry:<br />
<br />
insmod lvm<br />
<br />
и обозначьте ваш root в menuentry как:<br />
<br />
set root=(''lvm_group_name''-''lvm_logical_boot_partition_name'')<br />
<br />
Пример:<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
insmod lvm<br />
set root=(VolumeGroup-lv_boot)<br />
# you can only set following two lines<br />
linux /vmlinuz26 root=/dev/mapper/VolumeGroup-root ro<br />
initrd /kernel26.img<br />
}<br />
<br />
==== Постоянное наименование устройств ====<br />
<br />
Чтобы просмотреть UUIDs, наберите:<br />
# blkid<br />
<br />
Замените линию {{Ic|root}} следующей:<br />
<br />
linux /vmlinuz26 root=/dev/disk/by-uuid/<UUID> ro<br />
<br />
Тем не менее, вы ещё должны установить упоминание о Grub2's в раздел root. Чтобы сделать это, используйте команду {{Ic|search}}. Так мы устанавливаем переменную grub'а "root" через поиск раздела по его UUID'у:<br />
<br />
search --fs-uuid <UUID> --set=root<br />
Пример содержимого загрузочной записи, использующей Постоянное наименование устройств будет выглядеть так:<br />
<br />
menuentry "Arch Linux" {<br />
search --fs-uuid 355ccb5c-99e1-400d-b612-451f9247e35e --set root<br />
linux /boot/vmlinuz26 root=/dev/disk/by-uuid/355ccb5c-99e1-400d-b612-451f9247e35e ro<br />
initrd /boot/kernel26.img<br />
}<br />
<br />
==== Использование меток ====<br />
<br />
Есть возможность использовать метки - легко читаемые записи, присоединяемые к файловым системам при помощи опции {{Ic|--label}} в {{Ic|search}}. Сначала, пометьте ваши сущестующие разделы:<br />
<br />
# tune2fs -L a <LABEL> <PARTITION><br />
<br />
Затем, добавьте содержимое используя метки. Например:<br />
<br />
menuentry "Arch Linux, session texte" {<br />
search --label archroot --set root<br />
linux /boot/vmlinuz26 root=/dev/disk/by-label/archroot ro<br />
initrd /boot/kernel26.img<br />
}<br />
<br />
== Использование командной строки ==<br />
<br />
Так как MBR слишком мал, чтобы хранить все модули GRUB2, здесь располагаются только меню и несколько базовых команд. Основная часть функциональности GRUB2 заложена в модулях в {{ic|/boot/grub}}, которые загружаются по надобности. В случае возникновения ошибки GRUB2 может не загрузится. Тогда появится командная строка.<br />
<br />
GRUB2 поддерживает много консолей. Если есть проблема чтения меню, но загрузчик может найти диски, вас перебросит в "нормальную" консоль.<br />
<br />
sh:grub><br />
<br />
Если проблема серьёзная, (напримерЮ GRUB не может найти требуемые файлы),вас перебросит в консоль "восстановления".<br />
<br />
grub rescue><br />
<br />
Консоль восстановления - это ограниченная версия обычной консоли, с меньшей функциональностью. Если вы переброшены в консоль восстановления, сначала попытаетесь загрузить модуль нормальной консоли, затем запустите её.<br />
<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
grub rescue> insmod (hdX,Y)/boot/grub/normal.mod<br />
rescue:grub> normal<br />
<br />
== Использование консоли восстановления ==<br />
<br />
Сначала прочтите [[#Использование командной строки]]. Если невозможно активировать нормальную консоль, возможным решением может стать загрузка с Живого CD (LiveCD), или с других дисков восстановления чтобы исправить настройки и переустановить GRUB. Тем не менее, загрузочные диски не всегда доступны или необходимы.<br />
<br />
Доступные команды в этой консоли включают "insmod", "ls", "set", и "unset". В следующем примере используется "set" и "insmod". "set" изменяет переменные, а "insmod" загружает модули для повышения функциональности.<br />
<br />
Перед началом, пользователь должен знать местоположение своей папки {{ic|/boot}} (будь она отдельным разделом, или подпапкой в корневом разделе):<br />
<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
<br />
Где Х - это номер физического диска и Y - номер раздела.<br />
<br />
Чтобы расширить возможности консоли, загрузите модуль "linux":<br />
<br />
grub rescue> insmod (hdX,Y)/boot/grub/linux.mod<br />
<br />
{{Note|Если у вас отдельный boot раздел, исключите {{ic|/boot}} из пути, (например, пишите {{Ic|1=set prefix=(hdX,Y)/grub}} и {{Ic|insmod (hdX,Y)/grub/linux.mod}}).}}<br />
<br />
Это описание "linux" и "initrd" команд, которые должны быть вам знакомы (смотри [[#Настройка]]).<br />
<br />
Например, загрузка Arch Linux:<br />
<br />
set root=(hd0,5)<br />
linux /boot/vmlinuz26 root=/dev/sda5<br />
initrd /boot/kernel26.img<br />
boot<br />
<br />
С отдельным разделом boot измените пути, как было описано выше. Например:<br />
<br />
set root=(hd0,5)<br />
linux /vmlinuz26 root=/dev/sda6<br />
initrd /kernel26.img<br />
boot<br />
<br />
После успешной загрузки Arch Linux, пользователь сможет подкорректировать {{ic|grub.cfg}} и затем запустить:<br />
<br />
# grub-install /dev/sda<br />
<br />
для того, чтобы переустановить GRUB2 и полностью устранить проблему. Измените {{ic|/dev/sda}}, если требуется. Смотрите [[#Установка загрузчика]] для детальной информации.<br />
<br />
== Примеры исправления проблем ==<br />
<br />
Добавьте сюда сами.<br />
<br />
=== Сообщение об ошибке msdos-style ===<br />
<br />
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding won't be possible!<br />
grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.<br />
However, blocklists are UNRELIABLE and its use is discouraged.<br />
grub-setup: error: If you really want blocklists, use --force.<br />
<br />
Эта ошибка может возникнуть, когда вы попытаетесь установить в виртуальную машину VMware. Читайте больше об этом [http://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 здесь].<br />
<br />
Это также может случится, если первый раздел начинается сразу после MBR, без необходимого места в 60 блоков перед первым разделом.<br />
<br />
=== Grub-install вызывает зависание grub2 / legacy grub ===<br />
Отключите флоппи дисковод в биосе, даже если у вас его нет. Попробуйте использовать также --no-floppy и удалить fd0 строку из /boot/grub/device.map. Тем не менее, без отключения его в биосе, GRUB2 может всё равно не работать.<br />
<br />
=== Прочее ===<br />
Я не нашёл, как удалять grub1, и установил grub2 в MBR, но после этого он не стал по умолчанию загружаться. Загружался по умолчанию grub1. Лёгкий способ это исправить, это переименовать {{ic|menu.lst.pacsave}} или подобное, в {{ic|menu.lst}} (в /boot/grub/) для каждой строки меню, для которой вы хотите использовать grub2. В конце введите {{Ic|"chainloader +1"}}. Это даст команду grub1 вернуть контроль к grub2.<br />
<br />
Возможное решение: Допустим, boot раздел {{Ic|(hd0,1)}}, и корневой раздел {{Ic|(hd0,3)}} (grub2 наименование). grub-setup ищет {{ic|(hd0,3)/boot/grub/core.img}}. Он не может его найти просто потому, что он в {{ic|(hd0,1)/grub/core.img}}. Я скопировал папку grub в мою корневую дерикторию, и всё заработало отлично:<br />
<br />
Например (от root:)<br />
# mount /boot<br />
# cp -a /boot/grub /<br />
# umount /boot<br />
# mv /grub /boot/<br />
# grub-install /dev/sda</div>Archvillhttps://wiki.archlinux.org/index.php?title=Lighttpd&diff=221185Lighttpd2012-09-02T15:38:14Z<p>Archvill: /* Python FastCGI */ change python to python2, used in deprecated python 2.X branch (given code is for 2.X)</p>
<hr />
<div>[[cs:Lighttpd]]<br />
[[es:Lighttpd]]<br />
[[ru:Lighttpd]]<br />
[[zh-CN:Lighttpd]]<br />
[[zh-TW:Lighttpd]]<br />
[[Category:Web Server]]<br />
<br />
[http://www.lighttpd.net/ Lighttpd] is "a secure, fast, compliant, and very flexible [[Wikipedia:Web server|web-server]] that has been optimized for high-performance environments. It has a very low memory footprint compared to other webservers and takes care of cpu-load. Its advanced feature-set ([[Wikipedia:FastCGI|FastCGI]], [[Wikipedia:Common Gateway Interface|CGI]], Auth, Output-Compression, URL-Rewriting and many more) make lighttpd the perfect webserver-software for every server that suffers load problems."<br />
<br />
==Installation==<br />
Lighttpd is available in the extra repository so:<br />
# pacman -S lighttpd<br />
<br />
==Configuration==<br />
===Basic Setup===<br />
The lighttpd configuration file is: {{ic|/etc/lighttpd/lighttpd.conf}}. By default it should produce a working test page. <br />
<br />
To check your {{ic|lighttpd.conf}} for bugs you can use this command - helps finding misconfigurations very fast:<br />
<br />
$ lighttpd -t -f /etc/lighttpd/lighttpd.conf<br />
<br />
The default configuration file specifies {{ic|/srv/http/}} as the document directory served.<br />
<br />
It may be necessary to add a user and group for {{ic|http}} if you do not already have one. That user needs to have write permissions to {{ic|/var/log/lighttpd}} as well, so we will make it the owner of the folder:<br />
# groupadd http<br />
# adduser http<br />
# chown -R http /var/log/lighttpd<br />
<br />
To test the install<br />
# rc.d start lighttpd<br />
# touch /srv/http/index.html<br />
# chmod 755 /srv/http/index.html<br />
# echo 'TestMe!' >> /srv/http/index.html<br />
<br />
Then point your browser to {{ic|localhost}}, and you should see the test page.<br />
<br />
You may want to add lighttpd to the daemons list in {{ic|/etc/rc.conf}} to start the server on boot.<br />
<br />
Example configuration files are available in {{ic|/usr/share/doc/lighttpd/}}.<br />
<br />
===FastCGI===<br />
<br />
Install fcgi<br />
# pacman -S fcgi<br />
Now you have lighttpd with fcgi support. If it was that what you wanted you are all set. People that want Ruby on Rails, PHP or Python should continue.<br />
{{Box Note | New default user and group: Instead of group "nobody" lighttpd now runs as user/group "http" by default.}}<br />
<br />
First copy the example config file form {{ic|/usr/share/doc/lighttpd/config/conf.d/fastcgi.conf}} to {{ic|/etc/lighttpd/conf.d}}<br />
<br />
The following needs adding to the config file, {{ic|/etc/lighttpd/conf.d/fastcgi.conf}}<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "dispatch.fcgi" ) #this is deprecated<br />
index-file.names += ( "dispatch.fcgi" ) #dispatch.fcgi if rails specified<br />
<br />
server.error-handler-404 = "/dispatch.fcgi" #too<br />
fastcgi.server = (<br />
".fcgi" => (<br />
"localhost" => ( <br />
"socket" => "/run/lighttpd/rails-fastcgi.sock",<br />
"bin-path" => "/path/to/rails/application/public/dispatch.fcgi"<br />
)<br />
)<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
For PHP or Ruby on Rails see the next sections.<br />
<br />
====PHP====<br />
<br />
Install php and required modules (see also [[PHP]] and [[LAMP]]):<br />
# pacman -S php php-cgi<br />
<br />
Check that php-cgi is working {{Ic|php-cgi --version}}<br />
<br />
PHP 5.4.3 (cgi-fcgi) (built: May 8 2012 17:10:17)<br />
Copyright (c) 1997-2012 The PHP Group<br />
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies<br />
<br />
If you get a similar output then php is installed correctly.<br />
<br />
{{Note|Please keep in mind if you receive errors like ''No input file found'' after attempting to access your php files then make sure {{ic|/etc/php/php.ini}} has the directives enabled:}}<br />
cgi.fix_pathinfo=1<br />
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/another/path:/second/path<br />
And that the files are world readable, <br />
# chmod -R 755<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "index.php" ) #this is deprecated<br />
index-file.names += ( "index.php" )<br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"bin-path" => "/usr/bin/php-cgi",<br />
"socket" => "/run/lighttpd/php-fastcgi.sock",<br />
"max-procs" => 4, # default value<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "1", # default value<br />
),<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
===== Using php-fpm =====<br />
<br />
There is no adaptive spawning anymore in recent lighttpd releases. For dynamic management of PHP processes, you can use {{Pkg|php-fpm}}.<br />
# pacman -S php-fpm<br />
# rc.d start php-fpm<br />
{{Note|You can configure the number of servers in the pool and tweak other configuration options by editing the file {{ic|/etc/php/php-fpm.conf}}. More details on ''php-fpm'' can be found on the [http://php-fpm.anight.org/ php-fpm website]. You should also note that when you make changes to /etc/php/php.ini you will need to restart php-fpm}}<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
index-file.names += ( "index.php" ) <br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"socket" => "/run/php-fpm/php-fpm.sock",<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
===== eAccelerator =====<br />
<br />
Install {{AUR|eaccelerator}} from the [[Arch User Repository|AUR]].<br />
<br />
Add own config file for eaccelerator:<br />
<br />
{{hc|/etc/php/conf.d/eaccelerator-own.ini|2=<br />
zlib.output_compression = On<br />
cgi.fix_pathinfo=1<br />
eaccelerator.cache_dir="/home/phpuser/eaccelerator/cache"<br />
}}<br />
<br />
{{Tip|I additionally set {{ic|safe_mod}} to {{ic|On}} in my setup, but this is not required.}}<br />
<br />
===== Try a php page =====<br />
Create the following php page, name it index.php, and place a copy in both /srv/http/ and /srv/http-ssl/html/<br />
<?php<br />
phpinfo();<br />
?><br />
Try navigating with a web browser to both the http and https address of your server. You should see the phpinfo page.<br />
<br />
Check eaccelerator caching:<br />
# ls -l /home/phpuser/eaccelerator/cache<br />
<br />
If the above command outputs the following:<br />
-rw------- 1 phpuser phpuser 456 2005-05-05 14:53 eaccelerator-277.58081<br />
-rw------- 1 phpuser phpuser 452 2005-05-05 14:53 eaccelerator-277.88081<br />
Then eaccelerator is happily caching your php scripts to help speed things up.<br />
<br />
====Ruby on Rails====<br />
Install and configure FastCGI (see [[#FastCGI]] above).<br />
<br />
Install [[ruby]] from [extra] and {{AUR|ruby-fcgi}} from [[AUR]].<br />
<br />
Follow instructions on [[RubyOnRails]].<br />
<br />
==== Python FastCGI ====<br />
Install and configure FastCGI (see [[#FastCGI]] above).<br />
<br />
Install flup:<br />
# pacman -S python-flup<br />
Configure:<br />
fastcgi.server = (<br />
".py" =><br />
(<br />
"python-fcgi" =><br />
(<br />
"socket" => "/run/lighttpd/fastcgi.python.socket",<br />
"bin-path" => "test.py",<br />
"check-local" => "disable",<br />
"max-procs" => 1,<br />
)<br />
)<br />
)<br />
Put the test.py in the root of your server (don't forget to chmod +x it)<br />
<br />
{{bc|1=<br />
#!/usr/bin/env python2<br />
<br />
def myapp(environ, start_response):<br />
print 'got request: %s' % environ<br />
start_response('200 OK', [('Content-Type', 'text/plain')])<br />
return ['Hello World!']<br />
<br />
if __name__ == '__main__':<br />
from flup.server.fcgi import WSGIServer<br />
WSGIServer(myapp).run()<br />
}}<br />
<br />
[https://bbs.archlinux.org/viewtopic.php?pid=734173#p734173 Thanks to firecat53 for his explanation]<br />
<br />
=== SSL ===<br />
Generate an SSL Cert, e.g. like that: <br />
# mkdir /etc/lighttpd/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/lighttpd/certs/www.example.com.pem -out /etc/lighttpd/certs/www.example.com.pem<br />
# chmod 600 /etc/lighttpd/certs/www.example.com.pem<br />
<br />
Edit {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
To make lighttpd SSL-only (you probably need to set the server port to 443 as well)<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem"<br />
To enable SSL in addition to normal HTTP<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" <br />
}<br />
If you want to serve different sites, you can change the document root inside the socket conditional:<br />
$SERVER["socket"] == ":443" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
or as alternative you can use the scheme conditional to distinguish between secure and normal requests. <br />
$HTTP["scheme"] == "https" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
Note that you cannot use the scheme conditional around ssl.engine above, since lighttpd needs to know on what port to enable SSL.<br />
<br />
===== Server Name Indication =====<br />
<br />
To use [http://en.wikipedia.org/wiki/Server_Name_Indication SNI] with lighttpd, simply put additional ssl.pemfile configuration directives inside host conditionals. It seems a default ssl.pemfile is still required, though.<br />
<br />
$HTTP["host"] == "www.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.org.pem" <br />
}<br />
<br />
$HTTP["host"] == "mail.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/mail.example.org.pem" <br />
}<br />
<br />
==== Redirect HTTP requests to HTTPS ====<br />
You should add "mod_redirect" in server.modules array in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
server.modules = (<br />
...<br />
"mod_redirect", <br />
...<br />
)<br />
<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "example.org" {<br />
url.redirect = ( "^/(.*)" => "https://example.org/$1" )<br />
server.name = "example.org" <br />
}<br />
}<br />
<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/ssl/server.pem" <br />
server.document-root = "..." <br />
}<br />
<br />
To redirect all hosts to their secure equivalents use the following in place of the socket 80 configuration above:<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "(.*)" {<br />
url.redirect = ( "^/(.*)" => "https://%1/$1" )<br />
}<br />
}<br />
<br />
To redirect all hosts for part of the site (e.g. secure or phpmyadmin):<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["url"] =~ "^/secure" {<br />
url.redirect = ( "^/(.*)" => "https://example.com/$1" )<br />
}<br />
}<br />
<br />
=== Output Compression ===<br />
<br />
In {{ic|/etc/lighttpd/lighttpd.conf}} add<br />
var.cache_dir = "/var/cache/lighttpd"<br />
Then create directory for a compressed files:<br />
# mkdir /var/cache/lighttpd/compress<br />
# chown http:http /var/cache/lighttpd/compress<br />
Copy example configuration file:<br />
# mkdir /etc/lighttpd/conf.d<br />
# cp /usr/share/doc/lighttpd/config/conf.d/compress.conf /etc/lighttpd/conf.d/<br />
Add following in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/compress.conf"<br />
{{Box Note | You can not do this (copy compress.conf) and add a needed content in {{ic|/etc/lighttpd/lighttpd.conf}} instead.}}<br />
<br />
==Troubleshooting==<br />
=== Lighttpd downloads .php files ===<br />
If lighttpd downloads {{ic|.php}} files instead of "initializing" them you probably missed to add these lines to your {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
<br />
{{bc|1=<br />
server.modules = (<br />
"mod_fastcgi",<br />
)<br />
<br />
fastcgi.server = ( ".php" => ((<br />
"bin-path" => "/usr/bin/php-cgi", #depends where your php-cgi has been installed. Default here.<br />
"socket" => "/tmp/php.socket",<br />
"max-procs" => 2,<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "16",<br />
"PHP_FCGI_MAX_REQUESTS" => "10000"<br />
),<br />
"bin-copy-environment" => (<br />
"PATH", "SHELL", "USER"<br />
),<br />
"broken-scriptfilename" => "enable"<br />
)))<br />
<br />
}}<br />
<br />
=== Styles (CSS) not working properly ===<br />
The default lighttpd config does not include a mimetype definition for CSS so when standards compliant browsers get text/html instead of text/css they get confused and nothing displays properly. To fix this add an entry for CSS.<br />
<br />
{{bc|1=<br />
mimetype.assign = (<br />
".html" => "text/html",<br />
".txt" => "text/plain",<br />
".jpg" => "image/jpeg",<br />
".png" => "image/png",<br />
".css" => "text/css"<br />
)<br />
}}<br />
New lines are not needed and are only used here for readability.<br />
<br />
== See also ==<br />
* [http://redmine.lighttpd.net/projects/lighttpd/wiki Lighttpd wiki]</div>Archvillhttps://wiki.archlinux.org/index.php?title=Lighttpd&diff=220168Lighttpd2012-08-28T12:58:11Z<p>Archvill: /* FastCGI */</p>
<hr />
<div>[[cs:Lighttpd]]<br />
[[es:Lighttpd]]<br />
[[ru:Lighttpd]]<br />
[[zh-CN:Lighttpd]]<br />
[[zh-TW:Lighttpd]]<br />
[[Category:Web Server]]<br />
<br />
[http://www.lighttpd.net/ Lighttpd] is "a secure, fast, compliant, and very flexible [[Wikipedia:Web server|web-server]] that has been optimized for high-performance environments. It has a very low memory footprint compared to other webservers and takes care of cpu-load. Its advanced feature-set ([[Wikipedia:FastCGI|FastCGI]], [[Wikipedia:Common Gateway Interface|CGI]], Auth, Output-Compression, URL-Rewriting and many more) make lighttpd the perfect webserver-software for every server that suffers load problems."<br />
<br />
==Installation==<br />
Lighttpd is available in the extra repository so:<br />
# pacman -S lighttpd<br />
<br />
==Configuration==<br />
===Basic Setup===<br />
The lighttpd configuration file is: {{ic|/etc/lighttpd/lighttpd.conf}}. By default it should produce a working test page. <br />
<br />
To check your {{ic|lighttpd.conf}} for bugs you can use this command - helps finding misconfigurations very fast:<br />
<br />
$ lighttpd -t -f /etc/lighttpd/lighttpd.conf<br />
<br />
The default configuration file specifies {{ic|/srv/http/}} as the document directory served.<br />
<br />
It may be necessary to add a user and group for {{ic|http}} if you do not already have one. That user needs to have write permissions to {{ic|/var/log/lighttpd}} as well, so we will make it the owner of the folder:<br />
# groupadd http<br />
# adduser http<br />
# chown -R http /var/log/lighttpd<br />
<br />
To test the install<br />
# rc.d start lighttpd<br />
# touch /srv/http/index.html<br />
# chmod 755 /srv/http/index.html<br />
# echo 'TestMe!' >> /srv/http/index.html<br />
<br />
Then point your browser to {{ic|localhost}}, and you should see the test page.<br />
<br />
You may want to add lighttpd to the daemons list in {{ic|/etc/rc.conf}} to start the server on boot.<br />
<br />
Example configuration files are available in {{ic|/usr/share/doc/lighttpd/}}.<br />
<br />
===FastCGI===<br />
<br />
Install fcgi<br />
# pacman -S fcgi<br />
Now you have lighttpd with fcgi support. If it was that what you wanted you are all set. People that want Ruby on Rails, PHP or Python should continue.<br />
{{Box Note | New default user and group: Instead of group "nobody" lighttpd now runs as user/group "http" by default.}}<br />
<br />
First copy the example config file form {{ic|/usr/share/doc/lighttpd/config/conf.d/fastcgi.conf}} to {{ic|/etc/lighttpd/conf.d}}<br />
<br />
The following needs adding to the config file, {{ic|/etc/lighttpd/conf.d/fastcgi.conf}}<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "dispatch.fcgi" ) #this is deprecated<br />
index-file.names += ( "dispatch.fcgi" ) #dispatch.fcgi if rails specified<br />
<br />
server.error-handler-404 = "/dispatch.fcgi" #too<br />
fastcgi.server = (<br />
".fcgi" => (<br />
"localhost" => ( <br />
"socket" => "/run/lighttpd/rails-fastcgi.sock",<br />
"bin-path" => "/path/to/rails/application/public/dispatch.fcgi"<br />
)<br />
)<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
For PHP or Ruby on Rails see the next sections.<br />
<br />
====PHP====<br />
<br />
Install php and required modules (see also [[PHP]] and [[LAMP]]):<br />
# pacman -S php php-cgi<br />
<br />
Check that php-cgi is working {{Ic|php-cgi --version}}<br />
<br />
PHP 5.4.3 (cgi-fcgi) (built: May 8 2012 17:10:17)<br />
Copyright (c) 1997-2012 The PHP Group<br />
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies<br />
<br />
If you get a similar output then php is installed correctly.<br />
<br />
{{Note|Please keep in mind if you receive errors like ''No input file found'' after attempting to access your php files then make sure {{ic|/etc/php/php.ini}} has the directives enabled:}}<br />
cgi.fix_pathinfo=1<br />
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/another/path:/second/path<br />
And that the files are world readable, <br />
# chmod -R 755<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "index.php" ) #this is deprecated<br />
index-file.names += ( "index.php" )<br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"bin-path" => "/usr/bin/php-cgi",<br />
"socket" => "/run/lighttpd/php-fastcgi.sock",<br />
"max-procs" => 4, # default value<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "1", # default value<br />
),<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
===== Using php-fpm =====<br />
<br />
There is no adaptive spawning anymore in recent lighttpd releases. For dynamic management of PHP processes, you can use {{Pkg|php-fpm}}.<br />
# pacman -S php-fpm<br />
# rc.d start php-fpm<br />
{{Note|You can configure the number of servers in the pool and tweak other configuration options by editing the file {{ic|/etc/php/php-fpm.conf}}. More details on ''php-fpm'' can be found on the [http://php-fpm.anight.org/ php-fpm website]. You should also note that when you make changes to /etc/php/php.ini you will need to restart php-fpm}}<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
index-file.names += ( "index.php" ) <br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"socket" => "/run/php-fpm/php-fpm.sock",<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
===== eAccelerator =====<br />
<br />
Install {{AUR|eaccelerator}} from the [[Arch User Repository|AUR]].<br />
<br />
Add own config file for eaccelerator:<br />
<br />
{{hc|/etc/php/conf.d/eaccelerator-own.ini|2=<br />
zlib.output_compression = On<br />
cgi.fix_pathinfo=1<br />
eaccelerator.cache_dir="/home/phpuser/eaccelerator/cache"<br />
}}<br />
<br />
{{Tip|I additionally set {{ic|safe_mod}} to {{ic|On}} in my setup, but this is not required.}}<br />
<br />
===== Try a php page =====<br />
Create the following php page, name it index.php, and place a copy in both /srv/http/ and /srv/http-ssl/html/<br />
<?php<br />
phpinfo();<br />
?><br />
Try navigating with a web browser to both the http and https address of your server. You should see the phpinfo page.<br />
<br />
Check eaccelerator caching:<br />
# ls -l /home/phpuser/eaccelerator/cache<br />
<br />
If the above command outputs the following:<br />
-rw------- 1 phpuser phpuser 456 2005-05-05 14:53 eaccelerator-277.58081<br />
-rw------- 1 phpuser phpuser 452 2005-05-05 14:53 eaccelerator-277.88081<br />
Then eaccelerator is happily caching your php scripts to help speed things up.<br />
<br />
====Ruby on Rails====<br />
Install and configure FastCGI (see [[#FastCGI]] above).<br />
<br />
Install [[ruby]] from [extra] and {{AUR|ruby-fcgi}} from [[AUR]].<br />
<br />
Follow instructions on [[RubyOnRails]].<br />
<br />
==== Python FastCGI ====<br />
Install and configure FastCGI (see [[#FastCGI]] above).<br />
<br />
Install flup:<br />
# pacman -S python-flup<br />
Configure:<br />
fastcgi.server = (<br />
".py" =><br />
(<br />
"python-fcgi" =><br />
(<br />
"socket" => "/run/lighttpd/fastcgi.python.socket",<br />
"bin-path" => "test.py",<br />
"check-local" => "disable",<br />
"max-procs" => 1,<br />
)<br />
)<br />
)<br />
Put the test.py in the root of your server (don't forget to chmod +x it)<br />
<br />
{{bc|1=<br />
#!/usr/bin/env python<br />
<br />
def myapp(environ, start_response):<br />
print 'got request: %s' % environ<br />
start_response('200 OK', [('Content-Type', 'text/plain')])<br />
return ['Hello World!']<br />
<br />
if __name__ == '__main__':<br />
from flup.server.fcgi import WSGIServer<br />
WSGIServer(myapp).run()<br />
}}<br />
<br />
[https://bbs.archlinux.org/viewtopic.php?pid=734173#p734173 Thanks to firecat53 for his explanation]<br />
<br />
=== SSL ===<br />
Generate an SSL Cert, e.g. like that: <br />
# mkdir /etc/lighttpd/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/lighttpd/certs/www.example.com.pem -out /etc/lighttpd/certs/www.example.com.pem<br />
# chmod 600 /etc/lighttpd/certs/www.example.com.pem<br />
<br />
Edit {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
To make lighttpd SSL-only (you probably need to set the server port to 443 as well)<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem"<br />
To enable SSL in addition to normal HTTP<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" <br />
}<br />
If you want to serve different sites, you can change the document root inside the socket conditional:<br />
$SERVER["socket"] == ":443" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
or as alternative you can use the scheme conditional to distinguish between secure and normal requests. <br />
$HTTP["scheme"] == "https" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
Note that you cannot use the scheme conditional around ssl.engine above, since lighttpd needs to know on what port to enable SSL.<br />
<br />
===== Server Name Indication =====<br />
<br />
To use [http://en.wikipedia.org/wiki/Server_Name_Indication SNI] with lighttpd, simply put additional ssl.pemfile configuration directives inside host conditionals. It seems a default ssl.pemfile is still required, though.<br />
<br />
$HTTP["host"] == "www.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.org.pem" <br />
}<br />
<br />
$HTTP["host"] == "mail.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/mail.example.org.pem" <br />
}<br />
<br />
==== Redirect HTTP requests to HTTPS ====<br />
You should add "mod_redirect" in server.modules array in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
server.modules = (<br />
...<br />
"mod_redirect", <br />
...<br />
)<br />
<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "example.org" {<br />
url.redirect = ( "^/(.*)" => "https://example.org/$1" )<br />
server.name = "example.org" <br />
}<br />
}<br />
<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/ssl/server.pem" <br />
server.document-root = "..." <br />
}<br />
<br />
To redirect all hosts to their secure equivalents use the following in place of the socket 80 configuration above:<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "(.*)" {<br />
url.redirect = ( "^/(.*)" => "https://%1/$1" )<br />
}<br />
}<br />
<br />
To redirect all hosts for part of the site (e.g. secure or phpmyadmin):<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["url"] =~ "^/secure" {<br />
url.redirect = ( "^/(.*)" => "https://example.com/$1" )<br />
}<br />
}<br />
<br />
=== Output Compression ===<br />
<br />
In {{ic|/etc/lighttpd/lighttpd.conf}} add<br />
var.cache_dir = "/var/cache/lighttpd"<br />
Then create directory for a compressed files:<br />
# mkdir /var/cache/lighttpd/compress<br />
# chown http:http /var/cache/lighttpd/compress<br />
Copy example configuration file:<br />
# mkdir /etc/lighttpd/conf.d<br />
# cp /usr/share/doc/lighttpd/config/conf.d/compress.conf /etc/lighttpd/conf.d/<br />
Add following in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/compress.conf"<br />
{{Box Note | You can not do this (copy compress.conf) and add a needed content in {{ic|/etc/lighttpd/lighttpd.conf}} instead.}}<br />
<br />
==Troubleshooting==<br />
=== Lighttpd downloads .php files ===<br />
If lighttpd downloads {{ic|.php}} files instead of "initializing" them you probably missed to add these lines to your {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
<br />
{{bc|1=<br />
server.modules = (<br />
"mod_fastcgi",<br />
)<br />
<br />
fastcgi.server = ( ".php" => ((<br />
"bin-path" => "/usr/bin/php-cgi", #depends where your php-cgi has been installed. Default here.<br />
"socket" => "/tmp/php.socket",<br />
"max-procs" => 2,<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "16",<br />
"PHP_FCGI_MAX_REQUESTS" => "10000"<br />
),<br />
"bin-copy-environment" => (<br />
"PATH", "SHELL", "USER"<br />
),<br />
"broken-scriptfilename" => "enable"<br />
)))<br />
<br />
}}<br />
<br />
=== Styles (CSS) not working properly ===<br />
The default lighttpd config does not include a mimetype definition for CSS so when standards compliant browsers get text/html instead of text/css they get confused and nothing displays properly. To fix this add an entry for CSS.<br />
<br />
{{bc|1=<br />
mimetype.assign = (<br />
".html" => "text/html",<br />
".txt" => "text/plain",<br />
".jpg" => "image/jpeg",<br />
".png" => "image/png",<br />
".css" => "text/css"<br />
)<br />
}}<br />
New lines are not needed and are only used here for readability.<br />
<br />
== See also ==<br />
* [http://redmine.lighttpd.net/projects/lighttpd/wiki Lighttpd wiki]</div>Archvillhttps://wiki.archlinux.org/index.php?title=Lighttpd&diff=220167Lighttpd2012-08-28T12:56:32Z<p>Archvill: /* Python FastCGI */</p>
<hr />
<div>[[cs:Lighttpd]]<br />
[[es:Lighttpd]]<br />
[[ru:Lighttpd]]<br />
[[zh-CN:Lighttpd]]<br />
[[zh-TW:Lighttpd]]<br />
[[Category:Web Server]]<br />
<br />
[http://www.lighttpd.net/ Lighttpd] is "a secure, fast, compliant, and very flexible [[Wikipedia:Web server|web-server]] that has been optimized for high-performance environments. It has a very low memory footprint compared to other webservers and takes care of cpu-load. Its advanced feature-set ([[Wikipedia:FastCGI|FastCGI]], [[Wikipedia:Common Gateway Interface|CGI]], Auth, Output-Compression, URL-Rewriting and many more) make lighttpd the perfect webserver-software for every server that suffers load problems."<br />
<br />
==Installation==<br />
Lighttpd is available in the extra repository so:<br />
# pacman -S lighttpd<br />
<br />
==Configuration==<br />
===Basic Setup===<br />
The lighttpd configuration file is: {{ic|/etc/lighttpd/lighttpd.conf}}. By default it should produce a working test page. <br />
<br />
To check your {{ic|lighttpd.conf}} for bugs you can use this command - helps finding misconfigurations very fast:<br />
<br />
$ lighttpd -t -f /etc/lighttpd/lighttpd.conf<br />
<br />
The default configuration file specifies {{ic|/srv/http/}} as the document directory served.<br />
<br />
It may be necessary to add a user and group for {{ic|http}} if you do not already have one. That user needs to have write permissions to {{ic|/var/log/lighttpd}} as well, so we will make it the owner of the folder:<br />
# groupadd http<br />
# adduser http<br />
# chown -R http /var/log/lighttpd<br />
<br />
To test the install<br />
# rc.d start lighttpd<br />
# touch /srv/http/index.html<br />
# chmod 755 /srv/http/index.html<br />
# echo 'TestMe!' >> /srv/http/index.html<br />
<br />
Then point your browser to {{ic|localhost}}, and you should see the test page.<br />
<br />
You may want to add lighttpd to the daemons list in {{ic|/etc/rc.conf}} to start the server on boot.<br />
<br />
Example configuration files are available in {{ic|/usr/share/doc/lighttpd/}}.<br />
<br />
===FastCGI===<br />
<br />
Install fcgi<br />
# pacman -S fcgi<br />
Now you have lighttpd with fcgi support. If it was that what you wanted you are all set. People that want Ruby on Rails and/or PHP should continue.<br />
{{Box Note | New default user and group: Instead of group "nobody" lighttpd now runs as user/group "http" by default.}}<br />
<br />
First copy the example config file form {{ic|/usr/share/doc/lighttpd/config/conf.d/fastcgi.conf}} to {{ic|/etc/lighttpd/conf.d}}<br />
<br />
The following needs adding to the config file, {{ic|/etc/lighttpd/conf.d/fastcgi.conf}}<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "dispatch.fcgi" ) #this is deprecated<br />
index-file.names += ( "dispatch.fcgi" ) #dispatch.fcgi if rails specified<br />
<br />
server.error-handler-404 = "/dispatch.fcgi" #too<br />
fastcgi.server = (<br />
".fcgi" => (<br />
"localhost" => ( <br />
"socket" => "/run/lighttpd/rails-fastcgi.sock",<br />
"bin-path" => "/path/to/rails/application/public/dispatch.fcgi"<br />
)<br />
)<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
For PHP or Ruby on Rails see the next sections.<br />
<br />
====PHP====<br />
<br />
Install php and required modules (see also [[PHP]] and [[LAMP]]):<br />
# pacman -S php php-cgi<br />
<br />
Check that php-cgi is working {{Ic|php-cgi --version}}<br />
<br />
PHP 5.4.3 (cgi-fcgi) (built: May 8 2012 17:10:17)<br />
Copyright (c) 1997-2012 The PHP Group<br />
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies<br />
<br />
If you get a similar output then php is installed correctly.<br />
<br />
{{Note|Please keep in mind if you receive errors like ''No input file found'' after attempting to access your php files then make sure {{ic|/etc/php/php.ini}} has the directives enabled:}}<br />
cgi.fix_pathinfo=1<br />
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/another/path:/second/path<br />
And that the files are world readable, <br />
# chmod -R 755<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "index.php" ) #this is deprecated<br />
index-file.names += ( "index.php" )<br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"bin-path" => "/usr/bin/php-cgi",<br />
"socket" => "/run/lighttpd/php-fastcgi.sock",<br />
"max-procs" => 4, # default value<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "1", # default value<br />
),<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
===== Using php-fpm =====<br />
<br />
There is no adaptive spawning anymore in recent lighttpd releases. For dynamic management of PHP processes, you can use {{Pkg|php-fpm}}.<br />
# pacman -S php-fpm<br />
# rc.d start php-fpm<br />
{{Note|You can configure the number of servers in the pool and tweak other configuration options by editing the file {{ic|/etc/php/php-fpm.conf}}. More details on ''php-fpm'' can be found on the [http://php-fpm.anight.org/ php-fpm website]. You should also note that when you make changes to /etc/php/php.ini you will need to restart php-fpm}}<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
index-file.names += ( "index.php" ) <br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"socket" => "/run/php-fpm/php-fpm.sock",<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
===== eAccelerator =====<br />
<br />
Install {{AUR|eaccelerator}} from the [[Arch User Repository|AUR]].<br />
<br />
Add own config file for eaccelerator:<br />
<br />
{{hc|/etc/php/conf.d/eaccelerator-own.ini|2=<br />
zlib.output_compression = On<br />
cgi.fix_pathinfo=1<br />
eaccelerator.cache_dir="/home/phpuser/eaccelerator/cache"<br />
}}<br />
<br />
{{Tip|I additionally set {{ic|safe_mod}} to {{ic|On}} in my setup, but this is not required.}}<br />
<br />
===== Try a php page =====<br />
Create the following php page, name it index.php, and place a copy in both /srv/http/ and /srv/http-ssl/html/<br />
<?php<br />
phpinfo();<br />
?><br />
Try navigating with a web browser to both the http and https address of your server. You should see the phpinfo page.<br />
<br />
Check eaccelerator caching:<br />
# ls -l /home/phpuser/eaccelerator/cache<br />
<br />
If the above command outputs the following:<br />
-rw------- 1 phpuser phpuser 456 2005-05-05 14:53 eaccelerator-277.58081<br />
-rw------- 1 phpuser phpuser 452 2005-05-05 14:53 eaccelerator-277.88081<br />
Then eaccelerator is happily caching your php scripts to help speed things up.<br />
<br />
====Ruby on Rails====<br />
Install and configure FastCGI (see [[#FastCGI]] above).<br />
<br />
Install [[ruby]] from [extra] and {{AUR|ruby-fcgi}} from [[AUR]].<br />
<br />
Follow instructions on [[RubyOnRails]].<br />
<br />
==== Python FastCGI ====<br />
Install and configure FastCGI (see [[#FastCGI]] above).<br />
<br />
Install flup:<br />
# pacman -S python-flup<br />
Configure:<br />
fastcgi.server = (<br />
".py" =><br />
(<br />
"python-fcgi" =><br />
(<br />
"socket" => "/run/lighttpd/fastcgi.python.socket",<br />
"bin-path" => "test.py",<br />
"check-local" => "disable",<br />
"max-procs" => 1,<br />
)<br />
)<br />
)<br />
Put the test.py in the root of your server (don't forget to chmod +x it)<br />
<br />
{{bc|1=<br />
#!/usr/bin/env python<br />
<br />
def myapp(environ, start_response):<br />
print 'got request: %s' % environ<br />
start_response('200 OK', [('Content-Type', 'text/plain')])<br />
return ['Hello World!']<br />
<br />
if __name__ == '__main__':<br />
from flup.server.fcgi import WSGIServer<br />
WSGIServer(myapp).run()<br />
}}<br />
<br />
[https://bbs.archlinux.org/viewtopic.php?pid=734173#p734173 Thanks to firecat53 for his explanation]<br />
<br />
=== SSL ===<br />
Generate an SSL Cert, e.g. like that: <br />
# mkdir /etc/lighttpd/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/lighttpd/certs/www.example.com.pem -out /etc/lighttpd/certs/www.example.com.pem<br />
# chmod 600 /etc/lighttpd/certs/www.example.com.pem<br />
<br />
Edit {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
To make lighttpd SSL-only (you probably need to set the server port to 443 as well)<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem"<br />
To enable SSL in addition to normal HTTP<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" <br />
}<br />
If you want to serve different sites, you can change the document root inside the socket conditional:<br />
$SERVER["socket"] == ":443" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
or as alternative you can use the scheme conditional to distinguish between secure and normal requests. <br />
$HTTP["scheme"] == "https" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
Note that you cannot use the scheme conditional around ssl.engine above, since lighttpd needs to know on what port to enable SSL.<br />
<br />
===== Server Name Indication =====<br />
<br />
To use [http://en.wikipedia.org/wiki/Server_Name_Indication SNI] with lighttpd, simply put additional ssl.pemfile configuration directives inside host conditionals. It seems a default ssl.pemfile is still required, though.<br />
<br />
$HTTP["host"] == "www.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.org.pem" <br />
}<br />
<br />
$HTTP["host"] == "mail.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/mail.example.org.pem" <br />
}<br />
<br />
==== Redirect HTTP requests to HTTPS ====<br />
You should add "mod_redirect" in server.modules array in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
server.modules = (<br />
...<br />
"mod_redirect", <br />
...<br />
)<br />
<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "example.org" {<br />
url.redirect = ( "^/(.*)" => "https://example.org/$1" )<br />
server.name = "example.org" <br />
}<br />
}<br />
<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/ssl/server.pem" <br />
server.document-root = "..." <br />
}<br />
<br />
To redirect all hosts to their secure equivalents use the following in place of the socket 80 configuration above:<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "(.*)" {<br />
url.redirect = ( "^/(.*)" => "https://%1/$1" )<br />
}<br />
}<br />
<br />
To redirect all hosts for part of the site (e.g. secure or phpmyadmin):<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["url"] =~ "^/secure" {<br />
url.redirect = ( "^/(.*)" => "https://example.com/$1" )<br />
}<br />
}<br />
<br />
=== Output Compression ===<br />
<br />
In {{ic|/etc/lighttpd/lighttpd.conf}} add<br />
var.cache_dir = "/var/cache/lighttpd"<br />
Then create directory for a compressed files:<br />
# mkdir /var/cache/lighttpd/compress<br />
# chown http:http /var/cache/lighttpd/compress<br />
Copy example configuration file:<br />
# mkdir /etc/lighttpd/conf.d<br />
# cp /usr/share/doc/lighttpd/config/conf.d/compress.conf /etc/lighttpd/conf.d/<br />
Add following in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/compress.conf"<br />
{{Box Note | You can not do this (copy compress.conf) and add a needed content in {{ic|/etc/lighttpd/lighttpd.conf}} instead.}}<br />
<br />
==Troubleshooting==<br />
=== Lighttpd downloads .php files ===<br />
If lighttpd downloads {{ic|.php}} files instead of "initializing" them you probably missed to add these lines to your {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
<br />
{{bc|1=<br />
server.modules = (<br />
"mod_fastcgi",<br />
)<br />
<br />
fastcgi.server = ( ".php" => ((<br />
"bin-path" => "/usr/bin/php-cgi", #depends where your php-cgi has been installed. Default here.<br />
"socket" => "/tmp/php.socket",<br />
"max-procs" => 2,<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "16",<br />
"PHP_FCGI_MAX_REQUESTS" => "10000"<br />
),<br />
"bin-copy-environment" => (<br />
"PATH", "SHELL", "USER"<br />
),<br />
"broken-scriptfilename" => "enable"<br />
)))<br />
<br />
}}<br />
<br />
=== Styles (CSS) not working properly ===<br />
The default lighttpd config does not include a mimetype definition for CSS so when standards compliant browsers get text/html instead of text/css they get confused and nothing displays properly. To fix this add an entry for CSS.<br />
<br />
{{bc|1=<br />
mimetype.assign = (<br />
".html" => "text/html",<br />
".txt" => "text/plain",<br />
".jpg" => "image/jpeg",<br />
".png" => "image/png",<br />
".css" => "text/css"<br />
)<br />
}}<br />
New lines are not needed and are only used here for readability.<br />
<br />
== See also ==<br />
* [http://redmine.lighttpd.net/projects/lighttpd/wiki Lighttpd wiki]</div>Archvillhttps://wiki.archlinux.org/index.php?title=Lighttpd&diff=220166Lighttpd2012-08-28T12:56:15Z<p>Archvill: /* Python FastCGI */</p>
<hr />
<div>[[cs:Lighttpd]]<br />
[[es:Lighttpd]]<br />
[[ru:Lighttpd]]<br />
[[zh-CN:Lighttpd]]<br />
[[zh-TW:Lighttpd]]<br />
[[Category:Web Server]]<br />
<br />
[http://www.lighttpd.net/ Lighttpd] is "a secure, fast, compliant, and very flexible [[Wikipedia:Web server|web-server]] that has been optimized for high-performance environments. It has a very low memory footprint compared to other webservers and takes care of cpu-load. Its advanced feature-set ([[Wikipedia:FastCGI|FastCGI]], [[Wikipedia:Common Gateway Interface|CGI]], Auth, Output-Compression, URL-Rewriting and many more) make lighttpd the perfect webserver-software for every server that suffers load problems."<br />
<br />
==Installation==<br />
Lighttpd is available in the extra repository so:<br />
# pacman -S lighttpd<br />
<br />
==Configuration==<br />
===Basic Setup===<br />
The lighttpd configuration file is: {{ic|/etc/lighttpd/lighttpd.conf}}. By default it should produce a working test page. <br />
<br />
To check your {{ic|lighttpd.conf}} for bugs you can use this command - helps finding misconfigurations very fast:<br />
<br />
$ lighttpd -t -f /etc/lighttpd/lighttpd.conf<br />
<br />
The default configuration file specifies {{ic|/srv/http/}} as the document directory served.<br />
<br />
It may be necessary to add a user and group for {{ic|http}} if you do not already have one. That user needs to have write permissions to {{ic|/var/log/lighttpd}} as well, so we will make it the owner of the folder:<br />
# groupadd http<br />
# adduser http<br />
# chown -R http /var/log/lighttpd<br />
<br />
To test the install<br />
# rc.d start lighttpd<br />
# touch /srv/http/index.html<br />
# chmod 755 /srv/http/index.html<br />
# echo 'TestMe!' >> /srv/http/index.html<br />
<br />
Then point your browser to {{ic|localhost}}, and you should see the test page.<br />
<br />
You may want to add lighttpd to the daemons list in {{ic|/etc/rc.conf}} to start the server on boot.<br />
<br />
Example configuration files are available in {{ic|/usr/share/doc/lighttpd/}}.<br />
<br />
===FastCGI===<br />
<br />
Install fcgi<br />
# pacman -S fcgi<br />
Now you have lighttpd with fcgi support. If it was that what you wanted you are all set. People that want Ruby on Rails and/or PHP should continue.<br />
{{Box Note | New default user and group: Instead of group "nobody" lighttpd now runs as user/group "http" by default.}}<br />
<br />
First copy the example config file form {{ic|/usr/share/doc/lighttpd/config/conf.d/fastcgi.conf}} to {{ic|/etc/lighttpd/conf.d}}<br />
<br />
The following needs adding to the config file, {{ic|/etc/lighttpd/conf.d/fastcgi.conf}}<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "dispatch.fcgi" ) #this is deprecated<br />
index-file.names += ( "dispatch.fcgi" ) #dispatch.fcgi if rails specified<br />
<br />
server.error-handler-404 = "/dispatch.fcgi" #too<br />
fastcgi.server = (<br />
".fcgi" => (<br />
"localhost" => ( <br />
"socket" => "/run/lighttpd/rails-fastcgi.sock",<br />
"bin-path" => "/path/to/rails/application/public/dispatch.fcgi"<br />
)<br />
)<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
For PHP or Ruby on Rails see the next sections.<br />
<br />
====PHP====<br />
<br />
Install php and required modules (see also [[PHP]] and [[LAMP]]):<br />
# pacman -S php php-cgi<br />
<br />
Check that php-cgi is working {{Ic|php-cgi --version}}<br />
<br />
PHP 5.4.3 (cgi-fcgi) (built: May 8 2012 17:10:17)<br />
Copyright (c) 1997-2012 The PHP Group<br />
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies<br />
<br />
If you get a similar output then php is installed correctly.<br />
<br />
{{Note|Please keep in mind if you receive errors like ''No input file found'' after attempting to access your php files then make sure {{ic|/etc/php/php.ini}} has the directives enabled:}}<br />
cgi.fix_pathinfo=1<br />
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/another/path:/second/path<br />
And that the files are world readable, <br />
# chmod -R 755<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "index.php" ) #this is deprecated<br />
index-file.names += ( "index.php" )<br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"bin-path" => "/usr/bin/php-cgi",<br />
"socket" => "/run/lighttpd/php-fastcgi.sock",<br />
"max-procs" => 4, # default value<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "1", # default value<br />
),<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
===== Using php-fpm =====<br />
<br />
There is no adaptive spawning anymore in recent lighttpd releases. For dynamic management of PHP processes, you can use {{Pkg|php-fpm}}.<br />
# pacman -S php-fpm<br />
# rc.d start php-fpm<br />
{{Note|You can configure the number of servers in the pool and tweak other configuration options by editing the file {{ic|/etc/php/php-fpm.conf}}. More details on ''php-fpm'' can be found on the [http://php-fpm.anight.org/ php-fpm website]. You should also note that when you make changes to /etc/php/php.ini you will need to restart php-fpm}}<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
index-file.names += ( "index.php" ) <br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"socket" => "/run/php-fpm/php-fpm.sock",<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
===== eAccelerator =====<br />
<br />
Install {{AUR|eaccelerator}} from the [[Arch User Repository|AUR]].<br />
<br />
Add own config file for eaccelerator:<br />
<br />
{{hc|/etc/php/conf.d/eaccelerator-own.ini|2=<br />
zlib.output_compression = On<br />
cgi.fix_pathinfo=1<br />
eaccelerator.cache_dir="/home/phpuser/eaccelerator/cache"<br />
}}<br />
<br />
{{Tip|I additionally set {{ic|safe_mod}} to {{ic|On}} in my setup, but this is not required.}}<br />
<br />
===== Try a php page =====<br />
Create the following php page, name it index.php, and place a copy in both /srv/http/ and /srv/http-ssl/html/<br />
<?php<br />
phpinfo();<br />
?><br />
Try navigating with a web browser to both the http and https address of your server. You should see the phpinfo page.<br />
<br />
Check eaccelerator caching:<br />
# ls -l /home/phpuser/eaccelerator/cache<br />
<br />
If the above command outputs the following:<br />
-rw------- 1 phpuser phpuser 456 2005-05-05 14:53 eaccelerator-277.58081<br />
-rw------- 1 phpuser phpuser 452 2005-05-05 14:53 eaccelerator-277.88081<br />
Then eaccelerator is happily caching your php scripts to help speed things up.<br />
<br />
====Ruby on Rails====<br />
Install and configure FastCGI (see [[#FastCGI]] above).<br />
<br />
Install [[ruby]] from [extra] and {{AUR|ruby-fcgi}} from [[AUR]].<br />
<br />
Follow instructions on [[RubyOnRails]].<br />
<br />
==== Python FastCGI ====<br />
Install and configure FastCGI (see [[#FastCGI]] above).<br />
<br />
Install flup<br />
# pacman -S python-flup<br />
Configure:<br />
fastcgi.server = (<br />
".py" =><br />
(<br />
"python-fcgi" =><br />
(<br />
"socket" => "/run/lighttpd/fastcgi.python.socket",<br />
"bin-path" => "test.py",<br />
"check-local" => "disable",<br />
"max-procs" => 1,<br />
)<br />
)<br />
)<br />
Put the test.py in the root of your server (don't forget to chmod +x it)<br />
<br />
{{bc|1=<br />
#!/usr/bin/env python<br />
<br />
def myapp(environ, start_response):<br />
print 'got request: %s' % environ<br />
start_response('200 OK', [('Content-Type', 'text/plain')])<br />
return ['Hello World!']<br />
<br />
if __name__ == '__main__':<br />
from flup.server.fcgi import WSGIServer<br />
WSGIServer(myapp).run()<br />
}}<br />
<br />
[https://bbs.archlinux.org/viewtopic.php?pid=734173#p734173 Thanks to firecat53 for his explanation]<br />
<br />
=== SSL ===<br />
Generate an SSL Cert, e.g. like that: <br />
# mkdir /etc/lighttpd/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/lighttpd/certs/www.example.com.pem -out /etc/lighttpd/certs/www.example.com.pem<br />
# chmod 600 /etc/lighttpd/certs/www.example.com.pem<br />
<br />
Edit {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
To make lighttpd SSL-only (you probably need to set the server port to 443 as well)<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem"<br />
To enable SSL in addition to normal HTTP<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" <br />
}<br />
If you want to serve different sites, you can change the document root inside the socket conditional:<br />
$SERVER["socket"] == ":443" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
or as alternative you can use the scheme conditional to distinguish between secure and normal requests. <br />
$HTTP["scheme"] == "https" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
Note that you cannot use the scheme conditional around ssl.engine above, since lighttpd needs to know on what port to enable SSL.<br />
<br />
===== Server Name Indication =====<br />
<br />
To use [http://en.wikipedia.org/wiki/Server_Name_Indication SNI] with lighttpd, simply put additional ssl.pemfile configuration directives inside host conditionals. It seems a default ssl.pemfile is still required, though.<br />
<br />
$HTTP["host"] == "www.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.org.pem" <br />
}<br />
<br />
$HTTP["host"] == "mail.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/mail.example.org.pem" <br />
}<br />
<br />
==== Redirect HTTP requests to HTTPS ====<br />
You should add "mod_redirect" in server.modules array in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
server.modules = (<br />
...<br />
"mod_redirect", <br />
...<br />
)<br />
<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "example.org" {<br />
url.redirect = ( "^/(.*)" => "https://example.org/$1" )<br />
server.name = "example.org" <br />
}<br />
}<br />
<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/ssl/server.pem" <br />
server.document-root = "..." <br />
}<br />
<br />
To redirect all hosts to their secure equivalents use the following in place of the socket 80 configuration above:<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "(.*)" {<br />
url.redirect = ( "^/(.*)" => "https://%1/$1" )<br />
}<br />
}<br />
<br />
To redirect all hosts for part of the site (e.g. secure or phpmyadmin):<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["url"] =~ "^/secure" {<br />
url.redirect = ( "^/(.*)" => "https://example.com/$1" )<br />
}<br />
}<br />
<br />
=== Output Compression ===<br />
<br />
In {{ic|/etc/lighttpd/lighttpd.conf}} add<br />
var.cache_dir = "/var/cache/lighttpd"<br />
Then create directory for a compressed files:<br />
# mkdir /var/cache/lighttpd/compress<br />
# chown http:http /var/cache/lighttpd/compress<br />
Copy example configuration file:<br />
# mkdir /etc/lighttpd/conf.d<br />
# cp /usr/share/doc/lighttpd/config/conf.d/compress.conf /etc/lighttpd/conf.d/<br />
Add following in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/compress.conf"<br />
{{Box Note | You can not do this (copy compress.conf) and add a needed content in {{ic|/etc/lighttpd/lighttpd.conf}} instead.}}<br />
<br />
==Troubleshooting==<br />
=== Lighttpd downloads .php files ===<br />
If lighttpd downloads {{ic|.php}} files instead of "initializing" them you probably missed to add these lines to your {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
<br />
{{bc|1=<br />
server.modules = (<br />
"mod_fastcgi",<br />
)<br />
<br />
fastcgi.server = ( ".php" => ((<br />
"bin-path" => "/usr/bin/php-cgi", #depends where your php-cgi has been installed. Default here.<br />
"socket" => "/tmp/php.socket",<br />
"max-procs" => 2,<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "16",<br />
"PHP_FCGI_MAX_REQUESTS" => "10000"<br />
),<br />
"bin-copy-environment" => (<br />
"PATH", "SHELL", "USER"<br />
),<br />
"broken-scriptfilename" => "enable"<br />
)))<br />
<br />
}}<br />
<br />
=== Styles (CSS) not working properly ===<br />
The default lighttpd config does not include a mimetype definition for CSS so when standards compliant browsers get text/html instead of text/css they get confused and nothing displays properly. To fix this add an entry for CSS.<br />
<br />
{{bc|1=<br />
mimetype.assign = (<br />
".html" => "text/html",<br />
".txt" => "text/plain",<br />
".jpg" => "image/jpeg",<br />
".png" => "image/png",<br />
".css" => "text/css"<br />
)<br />
}}<br />
New lines are not needed and are only used here for readability.<br />
<br />
== See also ==<br />
* [http://redmine.lighttpd.net/projects/lighttpd/wiki Lighttpd wiki]</div>Archvillhttps://wiki.archlinux.org/index.php?title=Lighttpd&diff=220165Lighttpd2012-08-28T12:55:53Z<p>Archvill: /* Python FastCGI */</p>
<hr />
<div>[[cs:Lighttpd]]<br />
[[es:Lighttpd]]<br />
[[ru:Lighttpd]]<br />
[[zh-CN:Lighttpd]]<br />
[[zh-TW:Lighttpd]]<br />
[[Category:Web Server]]<br />
<br />
[http://www.lighttpd.net/ Lighttpd] is "a secure, fast, compliant, and very flexible [[Wikipedia:Web server|web-server]] that has been optimized for high-performance environments. It has a very low memory footprint compared to other webservers and takes care of cpu-load. Its advanced feature-set ([[Wikipedia:FastCGI|FastCGI]], [[Wikipedia:Common Gateway Interface|CGI]], Auth, Output-Compression, URL-Rewriting and many more) make lighttpd the perfect webserver-software for every server that suffers load problems."<br />
<br />
==Installation==<br />
Lighttpd is available in the extra repository so:<br />
# pacman -S lighttpd<br />
<br />
==Configuration==<br />
===Basic Setup===<br />
The lighttpd configuration file is: {{ic|/etc/lighttpd/lighttpd.conf}}. By default it should produce a working test page. <br />
<br />
To check your {{ic|lighttpd.conf}} for bugs you can use this command - helps finding misconfigurations very fast:<br />
<br />
$ lighttpd -t -f /etc/lighttpd/lighttpd.conf<br />
<br />
The default configuration file specifies {{ic|/srv/http/}} as the document directory served.<br />
<br />
It may be necessary to add a user and group for {{ic|http}} if you do not already have one. That user needs to have write permissions to {{ic|/var/log/lighttpd}} as well, so we will make it the owner of the folder:<br />
# groupadd http<br />
# adduser http<br />
# chown -R http /var/log/lighttpd<br />
<br />
To test the install<br />
# rc.d start lighttpd<br />
# touch /srv/http/index.html<br />
# chmod 755 /srv/http/index.html<br />
# echo 'TestMe!' >> /srv/http/index.html<br />
<br />
Then point your browser to {{ic|localhost}}, and you should see the test page.<br />
<br />
You may want to add lighttpd to the daemons list in {{ic|/etc/rc.conf}} to start the server on boot.<br />
<br />
Example configuration files are available in {{ic|/usr/share/doc/lighttpd/}}.<br />
<br />
===FastCGI===<br />
<br />
Install fcgi<br />
# pacman -S fcgi<br />
Now you have lighttpd with fcgi support. If it was that what you wanted you are all set. People that want Ruby on Rails and/or PHP should continue.<br />
{{Box Note | New default user and group: Instead of group "nobody" lighttpd now runs as user/group "http" by default.}}<br />
<br />
First copy the example config file form {{ic|/usr/share/doc/lighttpd/config/conf.d/fastcgi.conf}} to {{ic|/etc/lighttpd/conf.d}}<br />
<br />
The following needs adding to the config file, {{ic|/etc/lighttpd/conf.d/fastcgi.conf}}<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "dispatch.fcgi" ) #this is deprecated<br />
index-file.names += ( "dispatch.fcgi" ) #dispatch.fcgi if rails specified<br />
<br />
server.error-handler-404 = "/dispatch.fcgi" #too<br />
fastcgi.server = (<br />
".fcgi" => (<br />
"localhost" => ( <br />
"socket" => "/run/lighttpd/rails-fastcgi.sock",<br />
"bin-path" => "/path/to/rails/application/public/dispatch.fcgi"<br />
)<br />
)<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
For PHP or Ruby on Rails see the next sections.<br />
<br />
====PHP====<br />
<br />
Install php and required modules (see also [[PHP]] and [[LAMP]]):<br />
# pacman -S php php-cgi<br />
<br />
Check that php-cgi is working {{Ic|php-cgi --version}}<br />
<br />
PHP 5.4.3 (cgi-fcgi) (built: May 8 2012 17:10:17)<br />
Copyright (c) 1997-2012 The PHP Group<br />
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies<br />
<br />
If you get a similar output then php is installed correctly.<br />
<br />
{{Note|Please keep in mind if you receive errors like ''No input file found'' after attempting to access your php files then make sure {{ic|/etc/php/php.ini}} has the directives enabled:}}<br />
cgi.fix_pathinfo=1<br />
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/another/path:/second/path<br />
And that the files are world readable, <br />
# chmod -R 755<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "index.php" ) #this is deprecated<br />
index-file.names += ( "index.php" )<br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"bin-path" => "/usr/bin/php-cgi",<br />
"socket" => "/run/lighttpd/php-fastcgi.sock",<br />
"max-procs" => 4, # default value<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "1", # default value<br />
),<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
===== Using php-fpm =====<br />
<br />
There is no adaptive spawning anymore in recent lighttpd releases. For dynamic management of PHP processes, you can use {{Pkg|php-fpm}}.<br />
# pacman -S php-fpm<br />
# rc.d start php-fpm<br />
{{Note|You can configure the number of servers in the pool and tweak other configuration options by editing the file {{ic|/etc/php/php-fpm.conf}}. More details on ''php-fpm'' can be found on the [http://php-fpm.anight.org/ php-fpm website]. You should also note that when you make changes to /etc/php/php.ini you will need to restart php-fpm}}<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
index-file.names += ( "index.php" ) <br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"socket" => "/run/php-fpm/php-fpm.sock",<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
===== eAccelerator =====<br />
<br />
Install {{AUR|eaccelerator}} from the [[Arch User Repository|AUR]].<br />
<br />
Add own config file for eaccelerator:<br />
<br />
{{hc|/etc/php/conf.d/eaccelerator-own.ini|2=<br />
zlib.output_compression = On<br />
cgi.fix_pathinfo=1<br />
eaccelerator.cache_dir="/home/phpuser/eaccelerator/cache"<br />
}}<br />
<br />
{{Tip|I additionally set {{ic|safe_mod}} to {{ic|On}} in my setup, but this is not required.}}<br />
<br />
===== Try a php page =====<br />
Create the following php page, name it index.php, and place a copy in both /srv/http/ and /srv/http-ssl/html/<br />
<?php<br />
phpinfo();<br />
?><br />
Try navigating with a web browser to both the http and https address of your server. You should see the phpinfo page.<br />
<br />
Check eaccelerator caching:<br />
# ls -l /home/phpuser/eaccelerator/cache<br />
<br />
If the above command outputs the following:<br />
-rw------- 1 phpuser phpuser 456 2005-05-05 14:53 eaccelerator-277.58081<br />
-rw------- 1 phpuser phpuser 452 2005-05-05 14:53 eaccelerator-277.88081<br />
Then eaccelerator is happily caching your php scripts to help speed things up.<br />
<br />
====Ruby on Rails====<br />
Install and configure FastCGI (see [[#FastCGI]] above).<br />
<br />
Install [[ruby]] from [extra] and {{AUR|ruby-fcgi}} from [[AUR]].<br />
<br />
Follow instructions on [[RubyOnRails]].<br />
<br />
==== Python FastCGI ====<br />
Install and configure FastCGI (see [[#FastCGI]] above).<br />
Install flup<br />
# pacman -S python-flup<br />
Configure:<br />
fastcgi.server = (<br />
".py" =><br />
(<br />
"python-fcgi" =><br />
(<br />
"socket" => "/run/lighttpd/fastcgi.python.socket",<br />
"bin-path" => "test.py",<br />
"check-local" => "disable",<br />
"max-procs" => 1,<br />
)<br />
)<br />
)<br />
Put the test.py in the root of your server (don't forget to chmod +x it)<br />
<br />
{{bc|1=<br />
#!/usr/bin/env python<br />
<br />
def myapp(environ, start_response):<br />
print 'got request: %s' % environ<br />
start_response('200 OK', [('Content-Type', 'text/plain')])<br />
return ['Hello World!']<br />
<br />
if __name__ == '__main__':<br />
from flup.server.fcgi import WSGIServer<br />
WSGIServer(myapp).run()<br />
}}<br />
<br />
[https://bbs.archlinux.org/viewtopic.php?pid=734173#p734173 Thanks to firecat53 for his explanation]<br />
<br />
=== SSL ===<br />
Generate an SSL Cert, e.g. like that: <br />
# mkdir /etc/lighttpd/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/lighttpd/certs/www.example.com.pem -out /etc/lighttpd/certs/www.example.com.pem<br />
# chmod 600 /etc/lighttpd/certs/www.example.com.pem<br />
<br />
Edit {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
To make lighttpd SSL-only (you probably need to set the server port to 443 as well)<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem"<br />
To enable SSL in addition to normal HTTP<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" <br />
}<br />
If you want to serve different sites, you can change the document root inside the socket conditional:<br />
$SERVER["socket"] == ":443" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
or as alternative you can use the scheme conditional to distinguish between secure and normal requests. <br />
$HTTP["scheme"] == "https" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
Note that you cannot use the scheme conditional around ssl.engine above, since lighttpd needs to know on what port to enable SSL.<br />
<br />
===== Server Name Indication =====<br />
<br />
To use [http://en.wikipedia.org/wiki/Server_Name_Indication SNI] with lighttpd, simply put additional ssl.pemfile configuration directives inside host conditionals. It seems a default ssl.pemfile is still required, though.<br />
<br />
$HTTP["host"] == "www.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.org.pem" <br />
}<br />
<br />
$HTTP["host"] == "mail.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/mail.example.org.pem" <br />
}<br />
<br />
==== Redirect HTTP requests to HTTPS ====<br />
You should add "mod_redirect" in server.modules array in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
server.modules = (<br />
...<br />
"mod_redirect", <br />
...<br />
)<br />
<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "example.org" {<br />
url.redirect = ( "^/(.*)" => "https://example.org/$1" )<br />
server.name = "example.org" <br />
}<br />
}<br />
<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/ssl/server.pem" <br />
server.document-root = "..." <br />
}<br />
<br />
To redirect all hosts to their secure equivalents use the following in place of the socket 80 configuration above:<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "(.*)" {<br />
url.redirect = ( "^/(.*)" => "https://%1/$1" )<br />
}<br />
}<br />
<br />
To redirect all hosts for part of the site (e.g. secure or phpmyadmin):<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["url"] =~ "^/secure" {<br />
url.redirect = ( "^/(.*)" => "https://example.com/$1" )<br />
}<br />
}<br />
<br />
=== Output Compression ===<br />
<br />
In {{ic|/etc/lighttpd/lighttpd.conf}} add<br />
var.cache_dir = "/var/cache/lighttpd"<br />
Then create directory for a compressed files:<br />
# mkdir /var/cache/lighttpd/compress<br />
# chown http:http /var/cache/lighttpd/compress<br />
Copy example configuration file:<br />
# mkdir /etc/lighttpd/conf.d<br />
# cp /usr/share/doc/lighttpd/config/conf.d/compress.conf /etc/lighttpd/conf.d/<br />
Add following in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/compress.conf"<br />
{{Box Note | You can not do this (copy compress.conf) and add a needed content in {{ic|/etc/lighttpd/lighttpd.conf}} instead.}}<br />
<br />
==Troubleshooting==<br />
=== Lighttpd downloads .php files ===<br />
If lighttpd downloads {{ic|.php}} files instead of "initializing" them you probably missed to add these lines to your {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
<br />
{{bc|1=<br />
server.modules = (<br />
"mod_fastcgi",<br />
)<br />
<br />
fastcgi.server = ( ".php" => ((<br />
"bin-path" => "/usr/bin/php-cgi", #depends where your php-cgi has been installed. Default here.<br />
"socket" => "/tmp/php.socket",<br />
"max-procs" => 2,<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "16",<br />
"PHP_FCGI_MAX_REQUESTS" => "10000"<br />
),<br />
"bin-copy-environment" => (<br />
"PATH", "SHELL", "USER"<br />
),<br />
"broken-scriptfilename" => "enable"<br />
)))<br />
<br />
}}<br />
<br />
=== Styles (CSS) not working properly ===<br />
The default lighttpd config does not include a mimetype definition for CSS so when standards compliant browsers get text/html instead of text/css they get confused and nothing displays properly. To fix this add an entry for CSS.<br />
<br />
{{bc|1=<br />
mimetype.assign = (<br />
".html" => "text/html",<br />
".txt" => "text/plain",<br />
".jpg" => "image/jpeg",<br />
".png" => "image/png",<br />
".css" => "text/css"<br />
)<br />
}}<br />
New lines are not needed and are only used here for readability.<br />
<br />
== See also ==<br />
* [http://redmine.lighttpd.net/projects/lighttpd/wiki Lighttpd wiki]</div>Archvillhttps://wiki.archlinux.org/index.php?title=Lighttpd&diff=220164Lighttpd2012-08-28T12:55:37Z<p>Archvill: /* Ruby on Rails */</p>
<hr />
<div>[[cs:Lighttpd]]<br />
[[es:Lighttpd]]<br />
[[ru:Lighttpd]]<br />
[[zh-CN:Lighttpd]]<br />
[[zh-TW:Lighttpd]]<br />
[[Category:Web Server]]<br />
<br />
[http://www.lighttpd.net/ Lighttpd] is "a secure, fast, compliant, and very flexible [[Wikipedia:Web server|web-server]] that has been optimized for high-performance environments. It has a very low memory footprint compared to other webservers and takes care of cpu-load. Its advanced feature-set ([[Wikipedia:FastCGI|FastCGI]], [[Wikipedia:Common Gateway Interface|CGI]], Auth, Output-Compression, URL-Rewriting and many more) make lighttpd the perfect webserver-software for every server that suffers load problems."<br />
<br />
==Installation==<br />
Lighttpd is available in the extra repository so:<br />
# pacman -S lighttpd<br />
<br />
==Configuration==<br />
===Basic Setup===<br />
The lighttpd configuration file is: {{ic|/etc/lighttpd/lighttpd.conf}}. By default it should produce a working test page. <br />
<br />
To check your {{ic|lighttpd.conf}} for bugs you can use this command - helps finding misconfigurations very fast:<br />
<br />
$ lighttpd -t -f /etc/lighttpd/lighttpd.conf<br />
<br />
The default configuration file specifies {{ic|/srv/http/}} as the document directory served.<br />
<br />
It may be necessary to add a user and group for {{ic|http}} if you do not already have one. That user needs to have write permissions to {{ic|/var/log/lighttpd}} as well, so we will make it the owner of the folder:<br />
# groupadd http<br />
# adduser http<br />
# chown -R http /var/log/lighttpd<br />
<br />
To test the install<br />
# rc.d start lighttpd<br />
# touch /srv/http/index.html<br />
# chmod 755 /srv/http/index.html<br />
# echo 'TestMe!' >> /srv/http/index.html<br />
<br />
Then point your browser to {{ic|localhost}}, and you should see the test page.<br />
<br />
You may want to add lighttpd to the daemons list in {{ic|/etc/rc.conf}} to start the server on boot.<br />
<br />
Example configuration files are available in {{ic|/usr/share/doc/lighttpd/}}.<br />
<br />
===FastCGI===<br />
<br />
Install fcgi<br />
# pacman -S fcgi<br />
Now you have lighttpd with fcgi support. If it was that what you wanted you are all set. People that want Ruby on Rails and/or PHP should continue.<br />
{{Box Note | New default user and group: Instead of group "nobody" lighttpd now runs as user/group "http" by default.}}<br />
<br />
First copy the example config file form {{ic|/usr/share/doc/lighttpd/config/conf.d/fastcgi.conf}} to {{ic|/etc/lighttpd/conf.d}}<br />
<br />
The following needs adding to the config file, {{ic|/etc/lighttpd/conf.d/fastcgi.conf}}<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "dispatch.fcgi" ) #this is deprecated<br />
index-file.names += ( "dispatch.fcgi" ) #dispatch.fcgi if rails specified<br />
<br />
server.error-handler-404 = "/dispatch.fcgi" #too<br />
fastcgi.server = (<br />
".fcgi" => (<br />
"localhost" => ( <br />
"socket" => "/run/lighttpd/rails-fastcgi.sock",<br />
"bin-path" => "/path/to/rails/application/public/dispatch.fcgi"<br />
)<br />
)<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
For PHP or Ruby on Rails see the next sections.<br />
<br />
====PHP====<br />
<br />
Install php and required modules (see also [[PHP]] and [[LAMP]]):<br />
# pacman -S php php-cgi<br />
<br />
Check that php-cgi is working {{Ic|php-cgi --version}}<br />
<br />
PHP 5.4.3 (cgi-fcgi) (built: May 8 2012 17:10:17)<br />
Copyright (c) 1997-2012 The PHP Group<br />
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies<br />
<br />
If you get a similar output then php is installed correctly.<br />
<br />
{{Note|Please keep in mind if you receive errors like ''No input file found'' after attempting to access your php files then make sure {{ic|/etc/php/php.ini}} has the directives enabled:}}<br />
cgi.fix_pathinfo=1<br />
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/another/path:/second/path<br />
And that the files are world readable, <br />
# chmod -R 755<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "index.php" ) #this is deprecated<br />
index-file.names += ( "index.php" )<br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"bin-path" => "/usr/bin/php-cgi",<br />
"socket" => "/run/lighttpd/php-fastcgi.sock",<br />
"max-procs" => 4, # default value<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "1", # default value<br />
),<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
===== Using php-fpm =====<br />
<br />
There is no adaptive spawning anymore in recent lighttpd releases. For dynamic management of PHP processes, you can use {{Pkg|php-fpm}}.<br />
# pacman -S php-fpm<br />
# rc.d start php-fpm<br />
{{Note|You can configure the number of servers in the pool and tweak other configuration options by editing the file {{ic|/etc/php/php-fpm.conf}}. More details on ''php-fpm'' can be found on the [http://php-fpm.anight.org/ php-fpm website]. You should also note that when you make changes to /etc/php/php.ini you will need to restart php-fpm}}<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
index-file.names += ( "index.php" ) <br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"socket" => "/run/php-fpm/php-fpm.sock",<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
===== eAccelerator =====<br />
<br />
Install {{AUR|eaccelerator}} from the [[Arch User Repository|AUR]].<br />
<br />
Add own config file for eaccelerator:<br />
<br />
{{hc|/etc/php/conf.d/eaccelerator-own.ini|2=<br />
zlib.output_compression = On<br />
cgi.fix_pathinfo=1<br />
eaccelerator.cache_dir="/home/phpuser/eaccelerator/cache"<br />
}}<br />
<br />
{{Tip|I additionally set {{ic|safe_mod}} to {{ic|On}} in my setup, but this is not required.}}<br />
<br />
===== Try a php page =====<br />
Create the following php page, name it index.php, and place a copy in both /srv/http/ and /srv/http-ssl/html/<br />
<?php<br />
phpinfo();<br />
?><br />
Try navigating with a web browser to both the http and https address of your server. You should see the phpinfo page.<br />
<br />
Check eaccelerator caching:<br />
# ls -l /home/phpuser/eaccelerator/cache<br />
<br />
If the above command outputs the following:<br />
-rw------- 1 phpuser phpuser 456 2005-05-05 14:53 eaccelerator-277.58081<br />
-rw------- 1 phpuser phpuser 452 2005-05-05 14:53 eaccelerator-277.88081<br />
Then eaccelerator is happily caching your php scripts to help speed things up.<br />
<br />
====Ruby on Rails====<br />
Install and configure FastCGI (see [[#FastCGI]] above).<br />
<br />
Install [[ruby]] from [extra] and {{AUR|ruby-fcgi}} from [[AUR]].<br />
<br />
Follow instructions on [[RubyOnRails]].<br />
<br />
==== Python FastCGI ====<br />
Install flup<br />
# pacman -S python-flup<br />
Configure:<br />
fastcgi.server = (<br />
".py" =><br />
(<br />
"python-fcgi" =><br />
(<br />
"socket" => "/run/lighttpd/fastcgi.python.socket",<br />
"bin-path" => "test.py",<br />
"check-local" => "disable",<br />
"max-procs" => 1,<br />
)<br />
)<br />
)<br />
Put the test.py in the root of your server (don't forget to chmod +x it)<br />
<br />
{{bc|1=<br />
#!/usr/bin/env python<br />
<br />
def myapp(environ, start_response):<br />
print 'got request: %s' % environ<br />
start_response('200 OK', [('Content-Type', 'text/plain')])<br />
return ['Hello World!']<br />
<br />
if __name__ == '__main__':<br />
from flup.server.fcgi import WSGIServer<br />
WSGIServer(myapp).run()<br />
}}<br />
<br />
[https://bbs.archlinux.org/viewtopic.php?pid=734173#p734173 Thanks to firecat53 for his explanation]<br />
<br />
=== SSL ===<br />
Generate an SSL Cert, e.g. like that: <br />
# mkdir /etc/lighttpd/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/lighttpd/certs/www.example.com.pem -out /etc/lighttpd/certs/www.example.com.pem<br />
# chmod 600 /etc/lighttpd/certs/www.example.com.pem<br />
<br />
Edit {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
To make lighttpd SSL-only (you probably need to set the server port to 443 as well)<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem"<br />
To enable SSL in addition to normal HTTP<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" <br />
}<br />
If you want to serve different sites, you can change the document root inside the socket conditional:<br />
$SERVER["socket"] == ":443" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
or as alternative you can use the scheme conditional to distinguish between secure and normal requests. <br />
$HTTP["scheme"] == "https" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
Note that you cannot use the scheme conditional around ssl.engine above, since lighttpd needs to know on what port to enable SSL.<br />
<br />
===== Server Name Indication =====<br />
<br />
To use [http://en.wikipedia.org/wiki/Server_Name_Indication SNI] with lighttpd, simply put additional ssl.pemfile configuration directives inside host conditionals. It seems a default ssl.pemfile is still required, though.<br />
<br />
$HTTP["host"] == "www.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.org.pem" <br />
}<br />
<br />
$HTTP["host"] == "mail.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/mail.example.org.pem" <br />
}<br />
<br />
==== Redirect HTTP requests to HTTPS ====<br />
You should add "mod_redirect" in server.modules array in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
server.modules = (<br />
...<br />
"mod_redirect", <br />
...<br />
)<br />
<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "example.org" {<br />
url.redirect = ( "^/(.*)" => "https://example.org/$1" )<br />
server.name = "example.org" <br />
}<br />
}<br />
<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/ssl/server.pem" <br />
server.document-root = "..." <br />
}<br />
<br />
To redirect all hosts to their secure equivalents use the following in place of the socket 80 configuration above:<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "(.*)" {<br />
url.redirect = ( "^/(.*)" => "https://%1/$1" )<br />
}<br />
}<br />
<br />
To redirect all hosts for part of the site (e.g. secure or phpmyadmin):<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["url"] =~ "^/secure" {<br />
url.redirect = ( "^/(.*)" => "https://example.com/$1" )<br />
}<br />
}<br />
<br />
=== Output Compression ===<br />
<br />
In {{ic|/etc/lighttpd/lighttpd.conf}} add<br />
var.cache_dir = "/var/cache/lighttpd"<br />
Then create directory for a compressed files:<br />
# mkdir /var/cache/lighttpd/compress<br />
# chown http:http /var/cache/lighttpd/compress<br />
Copy example configuration file:<br />
# mkdir /etc/lighttpd/conf.d<br />
# cp /usr/share/doc/lighttpd/config/conf.d/compress.conf /etc/lighttpd/conf.d/<br />
Add following in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/compress.conf"<br />
{{Box Note | You can not do this (copy compress.conf) and add a needed content in {{ic|/etc/lighttpd/lighttpd.conf}} instead.}}<br />
<br />
==Troubleshooting==<br />
=== Lighttpd downloads .php files ===<br />
If lighttpd downloads {{ic|.php}} files instead of "initializing" them you probably missed to add these lines to your {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
<br />
{{bc|1=<br />
server.modules = (<br />
"mod_fastcgi",<br />
)<br />
<br />
fastcgi.server = ( ".php" => ((<br />
"bin-path" => "/usr/bin/php-cgi", #depends where your php-cgi has been installed. Default here.<br />
"socket" => "/tmp/php.socket",<br />
"max-procs" => 2,<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "16",<br />
"PHP_FCGI_MAX_REQUESTS" => "10000"<br />
),<br />
"bin-copy-environment" => (<br />
"PATH", "SHELL", "USER"<br />
),<br />
"broken-scriptfilename" => "enable"<br />
)))<br />
<br />
}}<br />
<br />
=== Styles (CSS) not working properly ===<br />
The default lighttpd config does not include a mimetype definition for CSS so when standards compliant browsers get text/html instead of text/css they get confused and nothing displays properly. To fix this add an entry for CSS.<br />
<br />
{{bc|1=<br />
mimetype.assign = (<br />
".html" => "text/html",<br />
".txt" => "text/plain",<br />
".jpg" => "image/jpeg",<br />
".png" => "image/png",<br />
".css" => "text/css"<br />
)<br />
}}<br />
New lines are not needed and are only used here for readability.<br />
<br />
== See also ==<br />
* [http://redmine.lighttpd.net/projects/lighttpd/wiki Lighttpd wiki]</div>Archvillhttps://wiki.archlinux.org/index.php?title=Network_configuration&diff=219601Network configuration2012-08-24T18:58:28Z<p>Archvill: /* Manually run DHCP */</p>
<hr />
<div>[[Category:Networking]]<br />
[[Category:Getting and installing Arch]]<br />
[[cs:Configuring Network]]<br />
[[es:Configuring Network]]<br />
[[fr:Connexions reseau]]<br />
[[it:Configuring Network]]<br />
[[nl:Configuring Network]]<br />
[[pt:Configuring Network]]<br />
[[ro:Configurare retea]]<br />
[[ru:Configuring Network]]<br />
[[sk:Configuring Network]]<br />
[[tr:Ağ_Yapılandırması]]<br />
[[zh-CN:Configuring Network]]<br />
{{Article summary start}}<br />
{{Article summary text|A simple guide for setting up and troubleshooting network.}}<br />
{{Article summary heading|Overview}}<br />
{{Article summary text|{{Networking overview}}}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Jumbo Frames}}<br />
{{Article summary wiki|Firewalls}}<br />
{{Article summary wiki|Samba}}<br />
{{Article summary wiki|Wireless Setup}}<br />
{{Article summary end}}<br />
<br />
==Check first==<br />
Many times, the basic installation procedure has created a working network configuration. To check if this is so, use the following command:<br />
{{hc|ping -c 3 www.google.com|<nowiki><br />
PING www.l.google.com (74.125.224.146) 56(84) bytes of data.<br />
64 bytes from 74.125.224.146: icmp_req=1 ttl=50 time=437 ms<br />
64 bytes from 74.125.224.146: icmp_req=2 ttl=50 time=385 ms<br />
64 bytes from 74.125.224.146: icmp_req=3 ttl=50 time=298 ms<br />
<br />
--- www.l.google.com ping statistics ---<br />
3 packets transmitted, 3 received, 0% packet loss, time 1999ms<br />
rtt min/avg/max/mdev = 298.107/373.642/437.202/57.415 ms<br />
</nowiki>}}<br />
{{Tip| The {{ic|-c 3}} options instruct {{ic|ping}} to do so three times. See {{ic|man ping}} for more information.}}<br />
<br />
If it works, then you may only wish to personalize your settings from the options below.<br />
<br />
If the previous command complains about unknown hosts, it means that your machine was unable to resolve this domain name. It might be related to your service provider or your router/gateway. You can try pinging a static IP address to prove that your machine has access to the Internet.<br />
{{hc |<br />
ping -c 3 8.8.8.8 |<br />
<nowiki>PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.<br />
64 bytes from 8.8.8.8: icmp_req=1 ttl=53 time=52.9 ms<br />
64 bytes from 8.8.8.8: icmp_req=2 ttl=53 time=72.5 ms<br />
64 bytes from 8.8.8.8: icmp_req=3 ttl=53 time=70.6 ms<br />
<br />
--- 8.8.8.8 ping statistics ---<br />
3 packets transmitted, 3 received, 0% packet loss, time 2002ms<br />
rtt min/avg/max/mdev = 52.975/65.375/72.543/8.803 ms</nowiki>}}<br />
<br />
{{Tip|8.8.8.8 is a static address that is easy to remember. It is the address of Google's primary DNS server, therefore it can be considered reliable, and is generally not blocked by content filtering systems and proxies.}}<br />
<br />
If you are able to ping this address, you may try [[Configuring_Network#For_Static_IP_Addresses|adding this nameserver to your resolv.conf file]].<br />
<br />
==Set the host name==<br />
A host name is a unique name created to identify a machine on a network. With Arch Linux, a machine's host name is set in {{ic|/etc/hostname}} or until a restart using the {{ic|hostname}} command.<br />
Host names are restricted to alphanumeric characters. The hyphen ({{ic|-}}) can be used, but a host name cannot start or end with it. Length is restricted to 63 characters. <br />
<br />
Simply put your host name in to {{ic|/etc/hostname}} ({{ic|archlinux}} is the host name in this example):<br />
archlinux<br />
<br />
After setting a host name, it is also important to include the same host name in {{ic|/etc/hosts}}. This will help processes that refer to the computer by its host name to find its IP address, as well as programs that rely on the {{ic|gethostname()}} system call to determine the system's host name.<br />
<br />
Edit {{ic|/etc/hosts}} and add the same HOSTNAME you entered in {{ic|/etc/hostname}}:<br />
127.0.0.1 archlinux.domain.org localhost.localdomain localhost archlinux<br />
<br />
{{Note|The fully qualified domain name (FQDN) should be '''the first item following the IP address'''. All of the names on the right side are just aliases for the left-most host/domain name. You can check if this has been properly configured by running {{ic|hostname --fqdn}}.}}<br />
<br />
To set the host name temporarily (until the next reboot) use the {{ic|hostname}} command from package {{Pkg|inetutils}} as root:<br />
{{bc|hostname archlinux}}<br />
<br />
== Device Driver ==<br />
<br />
=== Check Driver Status ===<br />
Udev should detect your network interface card (NIC) module and load it automatically at start up. Check the "Ethernet controller" entry in the output of {{ic|lspci -v}}. It should tell you which kernel module contains the driver of your network device. For example:<br />
{{hc|lspci -v|<nowiki><br />
02:00.0 Ethernet controller: Attansic Technology Corp. L1 Gigabit Ethernet Adapter (rev b0)<br />
...<br />
Kernel driver in use: atl1<br />
Kernel modules: atl1<br />
</nowiki>}}<br />
<br />
Next, check that the driver was loaded via ''dmesg | grep <module name>''. For example:<br />
dmesg |grep atl1<br />
...<br />
atl1 0000:02:00.0: eth0 link is up 100 Mbps full duplex<br />
<br />
If driver loads success, skip this section. Otherwise, you will need to know which module is needed for your particular model.<br />
<br />
=== Load the device module ===<br />
Google for the right module/driver for the chip. Once you know which module to use, you can load it with:<br />
# modprobe <modulename><br />
<br />
If [[udev]] is not detecting and loading the proper module automatically during bootup, you can add it into the {{ic|MODULES}} array in {{ic|/etc/rc.conf}} so you do not need to {{ic|modprobe}} it everytime you boot. For example, if {{ic|tg3}} is the network module:<br />
MODULES=(... tg3 snd-cmipci ...)<br />
<br />
Other common modules are 8139too for cards with the Realtek chipset or {{ic|sis900}} for SiS cards.<br />
<br />
== Network Interfaces ==<br />
<br />
=== Persistent Device Names ===<br />
For motherboards that have integrated NICs, it is important to know which one is considered the primary NIC (e.g., ''eth0'') and which is considered the secondary NIC (e.g., eth1). Many configuration issues are caused by users incorrectly configuring ''eth0'' in their {{ic|/etc/rc.conf}}, when in fact, they have their Ethernet cable plugged into ''eth1''. <br />
<br />
[[Udev]] is responsible for which device gets which name. With Udev and modular network drivers, the network interface numbering is not persistent across reboots by default, because the drivers are loaded in parallel and, thus, in random order. Configuring your network connection is hard if you do not know if your card will be called {{ic|eth0}} or {{ic|eth1}}. You can fix this using {{ic|ifrename}}, see [[Rename network interfaces]]. It is also possible to manually create udev rules that assign interface names based on the interface's MAC address. See [[Udev#Network device|Persistent Device Names]].<br />
<br />
=== Get Current Device Names ===<br />
Current NIC Names can be found with the ''ip'' tool.<br />
{{hc|<nowiki>$ ip addr | sed '/^[0-9]/!d;s/: <.*$//'</nowiki>|<br />
1: lo<br />
2: eth1<br />
3: eth0<br />
4: firewire0}}<br />
<br />
=== Enable/disable interface ===<br />
You can activate or deactivate net interface:<br />
ip link set <interface> up/down<br />
<br />
Check the result with {{ic|ip addr show dev eth0}}. For example:<br />
{{hc|ip addr show dev eth0|<nowiki><br />
2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc vboxnetflt state UP qlen 1000<br />
[...]<br />
</nowiki>}}<br />
<br />
== Configure the IP address ==<br />
You have two options: a dynamically assigned address using DHCP or an unchanging "static" address. See [[Wikipedia:Dynamic Host Configuration Protocol|Wikipedia:DHCP]] for more information.<br />
<br />
=== Dynamic IP address===<br />
<br />
==== Manually run DHCP Client Daemon ====<br />
<br />
Please note that dhcpcd is not dhcpd.<br />
<br />
{{hc|dhcpcd eth0|<nowiki><br />
dhcpcd: version 5.1.1 starting<br />
dhcpcd: eth0: broadcasting for a lease<br />
...<br />
dhcpcd: eth0: leased 192.168.1.70 for 86400 seconds<br />
</nowiki>}}<br />
<br />
And now {{ic|ip addr show dev <interface>}} should show your inet address.<br />
<br />
For some people, the {{ic|dhclient}} package (available in [extra]) works where {{ic|dhcpcd}} fails.<br />
<br />
==== Run DHCP at booting ====<br />
<br />
For this option, you need the {{Pkg|dhcpcd}} package (already available on most installations). To make use of it, edit {{ic|[[Rc.conf#Networking|/etc/rc.conf]]}} like this:<br />
interface="eth0"<br />
address=<br />
netmask=<br />
gateway=<br />
<br />
Only the interface has to be defined, as leaving the other options blank will set network to DHCP.<br />
<br />
If you use DHCP and you do '''not''' want your DNS servers automatically assigned every time you start your network, be sure to add the following to the last section of {{ic|/etc/dhcpcd.conf}}:<br />
nohook resolv.conf<br />
<br />
Then add your own DNS nameserver to {{ic|/etc/resolv.conf}}.<br />
<br />
You may use the {{Pkg|openresolv}} package if several different processes want to control {{ic|/etc/resolv.conf}} (e.g., {{Pkg|dhcpcd}} and a VPN client). No additional configuration for {{Pkg|dhcpcd}} is needed to use {{Pkg|openresolv}}.<br />
<br />
{{Note|1=It is possible to have a static IP address using {{Pkg|dhcpcd}}. Simply edit your {{ic|/etc/conf.d/dhcpcd}} file to look something like this (where x.x.x.x is your desired IP address):<br />
DHCPCD_ARGS="-q -s x.x.x.x"}}<br />
<br />
=== Static IP address ===<br />
There are various reasons why you may wish to assign static IP addresses on your network. For instance, one may gain a certain degree of predictability. Or you may not want the dhcp daemon running all the time. <br />
<br />
{{Note|If you share your Internet connection from a Windows box without a router, be sure to use static IP addresses on both computers to avoid LAN issues.}}<br />
<br />
You need:<br />
* Static IP address,<br />
* Subnet mask,<br />
* Broadcast address,<br />
* Gateway's IP address,<br />
* Name servers' IP addresses,<br />
* Domain name (unless a local LAN, in which case you can make it up).<br />
<br />
If you are running a private network, it is safe to use IP addresses in 192.168.*.* for your IP addresses, with a netmask of 255.255.255.0 and a broadcast address of 192.168.*.255. Unless your network has a router, the gateway IP address does not matter. Edit {{ic|/etc/rc.conf}} like this, substituting your own values for the IP address, netmask, broadcast, and gateway:<br />
interface=eth0<br />
address=192.168.0.2<br />
netmask=255.255.255.0<br />
broadcast=192.168.1.255<br />
gateway=192.168.22.1<br />
<br />
Edit your {{ic|/etc/resolv.conf}} like this, substituting your name servers' IP addresses and your local domain name:<br />
nameserver 61.23.173.5<br />
nameserver 61.95.849.8<br />
search example.com<br />
<br />
{{Note|Currently, you may include a maximum of 3 {{ic|nameserver}} lines.}}<br />
<br />
====Manual assignment====<br />
You can assign a static IP address in the console:<br />
# ip addr add <ip address>/<netmask> dev <interface><br />
For example:<br />
# ip addr add 192.168.1.2/24 dev eth0<br />
<br />
For more options, see: {{ic|man ip}}<br />
<br />
Add your gateway like so:<br />
# ip route add default via <ip address><br />
(Substitute your own gateway's IP address)<br />
<br />
For example:<br />
# ip route add default via 192.168.1.1<br />
<br />
If you the get the error "No such process", it means you have to run {{Ic|# ip link set dev eth0 up}}.<br />
<br />
==== Calculating Addresses ====<br />
You can use ''ipcalc'' provided by the ipcalc package to calculate IP broadcast, network, netmask, and host ranges for more advanced configurations. For example, I use ethernet over firewire to connect a windows machine to arch. For security and network organization, I placed them on their own network and configured the netmask and broadcast so that they are the only 2 machines on it. To figure out the netmask and broadcast addresses for this, I used ipcalc, providing it with the IP of the arch firewire nic 10.66.66.1, and specifying ipcalc should create a network of only 2 hosts.<br />
<br />
{{hc|$ ipcalc -nb 10.66.66.1 -s 1|2=<br />
Address: 10.66.66.1<br />
<br />
Netmask: 255.255.255.252 = 30<br />
Network: 10.66.66.0/30<br />
HostMin: 10.66.66.1<br />
HostMax: 10.66.66.2<br />
Broadcast: 10.66.66.3<br />
Hosts/Net: 2 Class A, Private Internet}}<br />
<br />
==Load configuration==<br />
To test your settings either reboot the computer, or as root:<br />
{{bc|rc.d restart network}}<br />
<br />
Try pinging your gateway, DNS server, ISP provider and other Internet sites, in that order, to detect any connection problems along the way, as in this example:<br />
{{bc|ping -c 3 www.google.com}}<br />
<br />
==Additional settings==<br />
<br />
=== ifplugd for laptops ===<br />
{{Pkg|ifplugd}} in [[Official Repositories]] is a daemon which will automatically configure your Ethernet device when a cable is plugged in and automatically unconfigure it if the cable is pulled. This is useful on laptops with onboard network adapters, since it will only configure the interface when a cable is really connected. Another use is when you just need to restart the network but do not want to restart the computer or do it from the shell.<br />
<br />
By default it is configured to work for the {{ic|eth0}} device. This and other settings like delays can be configured in {{ic|/etc/ifplugd/ifplugd.conf}}.<br />
<br />
[[Daemon#Performing daemon actions manually|Start the ifplugd daemon]] and add {{ic|ifplugd}} to your [[Daemons#Starting on Boot|DAEMONS array]] so it starts automatically on boot.<br />
<br />
===Bonding or LAG===<br />
You will need {{Pkg|netcfg}} from the [[Official Repositories]], as well as the {{AUR|netcfg-bonding}} package from the [[AUR]].<br />
<br />
Edit/create the following files:<br />
{{hc<br />
|/etc/network.d/bonded<br />
|<nowiki><br />
CONNECTION="bonding"<br />
INTERFACE="bond0"<br />
SLAVES="eth0 eth1"<br />
IP="dhcp"<br />
DHCP_TIMEOUT=10<br />
</nowiki>}}<br />
<br />
{{hc<br />
|/etc/rc.conf<br />
|<nowiki><br />
MODULES=(... bonding ...)<br />
...<br />
interface=bond0 #comment other lines (address,netmask,gateway,...)<br />
...<br />
NETWORKS=(... bonded ...)<br />
...<br />
DAEMONS=(... net-profiles ...) #replace network <br />
</nowiki>}}<br />
<br />
{{Note|To change the bonding mode (default is round robin) to, e.g, dynamic link aggregation:<br />
<br />
Create {{ic|/etc/modprobe.d/bonding.conf}}:<br />
{{hc<br />
|/etc/modprobe.d/bonding.conf<br />
|<nowiki><br />
options bonding mode=4<br />
options bonding miimon=100<br />
</nowiki>}}<br />
<br />
For more information about the different bonding policies (and other driver settings) see the [http://sourceforge.net/projects/bonding/files/Documentation/ Linux Ethernet Bonding Driver HOWTO].}}<br />
<br />
To activate the new bonded ports modprobe {{ic|bonding}}, stop {{ic|network}} and start the {{ic|net-profiles}} service:<br />
<br />
# modprobe bonding<br />
# rc.d stop network<br />
# rc.d start net-profiles<br />
<br />
To check the status and bonding mode:<br />
<br />
cat /proc/net/bonding/bond0<br />
<br />
===IP address aliasing===<br />
{{Expansion}}<br />
If you want to use multiple IP addresses on an interface, you will have to use [[netcfg]] and its {{ic|POST_UP}} and {{ic|PRE_DOWN}} commands in your network profile to set up the additional IP addresses manually. See [https://bbs.archlinux.org/viewtopic.php?pid=1036395#p1036395 here] for details.<br />
<br />
====Example====<br />
You will need {{Pkg|netcfg}} from the [[Official Repositories]].<br />
<br />
Prepare configuration<br />
<br />
{{hc<br />
|/etc/network.d/mynetwork<br />
|<nowiki><br />
<br />
CONNECTION='ethernet'<br />
DESCRIPTION='Five different addresses on the same NIC.'<br />
INTERFACE='eth0'<br />
IP='static'<br />
ADDR='192.168.1.10'<br />
GATEWAY='192.168.1.1'<br />
DNS=('192.168.1.1')<br />
DOMAIN=''<br />
POST_UP='x=0; for i in 11 12 13 14; do ip addr add 192.168.1.$i/24 brd 192.168.1.255 dev eth0 label eth0:$((x++)); done'<br />
PRE_DOWN='for i in 11 12 13 14; do ip addr del 192.168.1.$i/24 dev eth0; done'<br />
<br />
</nowiki>}}<br />
<br />
{{hc<br />
|/etc/rc.conf<br />
|<nowiki><br />
NETWORKS=(mynetwork)<br />
<br />
...<br />
<br />
DAEMONS=(... net-profiles ...)<br />
</nowiki>}}<br />
<br />
===Change MAC/hardware address===<br />
Changing your MAC address is not possible anymore via {{ic|/etc/rc.conf}}. See [[MAC Address Spoofing]] for details.<br />
<br />
==Troubleshooting==<br />
<br />
===Swapping computers on the cable modem===<br />
Most domestic cable ISPs (videotron for example) have the cable modem configured to recognize only one client PC, by the MAC address of its network interface. Once the cable modem has learned the MAC address of the first PC or equipment that talks to it, it will not respond to another MAC address in any way. Thus if you swap one PC for another (or for a router), the new PC (or router) will not work with the cable modem, because the new PC (or router) has a MAC address different from the old one. To reset the cable modem so that it will recognise the new PC, you must power the cable modem off and on again. Once the cable modem has rebooted and gone fully online again (indicator lights settled down), reboot the newly connected PC so that it makes a DHCP request, or manually make it request a new DHCP lease.<br />
<br />
If this method does not work, you will need to clone the MAC address of the original machine. See also [[Configuring Network#Change MAC/hardware address|Change MAC/hardware address]].<br />
<br />
===The TCP window scaling issue===<br />
TCP packets contain a "window" value in their headers indicating how much data the other host may send in return. This value is represented with only 16 bits, hence the window size is at most 64Kb. TCP packets are cached for a while (they have to be reordered), and as memory is (or used to be) limited, one host could easily run out of it.<br />
<br />
Back in 1992, as more and more memory became available, [http://www.faqs.org/rfcs/rfc1323.html RFC 1323] was written to improve the situation: Window Scaling. The "window" value, provided in all packets, will be modified by a Scale Factor defined once, at the very beginning of the connection.<br />
<br />
That 8-bit Scale Factor allows the Window to be up to 32 times higher than the initial 64Kb.<br />
<br />
It appears that some broken routers and firewalls on the Internet are rewriting the Scale Factor to 0 which causes misunderstandings between hosts.<br />
<br />
The Linux kernel 2.6.17 introduced a new calculation scheme generating higher Scale Factors, virtually making the aftermaths of the broken routers and firewalls more visible. <br />
<br />
The resulting connection is at best very slow or broken.<br />
<br />
====How to diagnose the problem====<br />
First of all, let's make it clear: this problem is odd. In some cases, you will not be able to use TCP connections (HTTP, FTP, ...) at all and in others, you will be able to communicate with some hosts (very few).<br />
<br />
When you have this problem, the {{ic|dmesg}}'s output is OK, logs are clean and {{ic|ip addr}} will report normal status... and actually everything appears normal.<br />
<br />
If you cannot browse any website, but you can ping some random hosts, chances are great that you're experiencing this issue: ping uses ICMP and is not affected by TCP issues.<br />
<br />
You can try to use Wireshark. You might see successful UDP and ICMP communications but unsuccessful TCP communications (only to foreign hosts).<br />
<br />
====How to fix it (The bad way)====<br />
To fix it the bad way, you can change the tcp_rmem value, on which Scale Factor calculation is based. Although it should work for most hosts, it is not guaranteed, especially for very distant ones.<br />
<br />
echo "4096 87380 174760" > /proc/sys/net/ipv4/tcp_rmem<br />
<br />
====How to fix it (The good way)====<br />
Simply disable Window Scaling. Since Window Scaling is a nice TCP feature, it may be uncomfortable to disable it, especially if you cannot fix the broken router. There are several ways to disable Window Scaling, and it seems that the most bulletproof way (which will work with most kernels) is to add the following line to {{ic|/etc/sysctl.conf}} (see also [[sysctl]])<br />
<br />
net.ipv4.tcp_window_scaling = 0<br />
<br />
====How to fix it (The best way)====<br />
This issue is caused by broken routers/firewalls, so let's change them. Some users have reported that the broken router was their very own DSL router.<br />
<br />
====More about it====<br />
This section is based on the LWN article [http://lwn.net/Articles/92727/ TCP window scaling and broken routers] and a Kernel Trap article: [http://kerneltrap.org/node/6723 Window Scaling on the Internet].<br />
<br />
There are also several relevant threads on the LKML.<br />
<br />
===Realtek no link / WOL issue===<br />
Users with Realtek 8168 8169 8101 8111(C) based NICs (cards / and on-board) may notice an issue where the NIC seems to be disabled on boot and has no Link light. This can usually be found on a dual boot system where Windows is also installed. It seems that using the offical Realtek drivers (dated anything after May 2007) under Windows is the cause. These newer drivers disable the Wake-On-LAN feature by disabling the NIC at Windows shutdown time, where it will remain disabled until the next time Windows boots. You will be able to notice if this issue is affecting you if the Link light remains off until Windows boots up; during Windows shutdown the Link light will switch off. Normal operation should be that the link light is always on as long as the system is on, even during POST. This issue will also affect other operative systems without newer drivers (eg. Live CDs). Here are a few fixes for this issue:<br />
<br />
====Method 1 - Rollback/change Windows driver====<br />
You can roll back your Windows NIC driver to the Microsoft provided one (if available), or roll back/install an official Realtek driver pre-dating May 2007 (may be on the CD that came with your hardware).<br />
<br />
====Method 2 - Enable WOL in Windows driver====<br />
Probably the best and the fastest fix is to change this setting in the Windows driver. This way it should be fixed system-wide and not only under Arch (eg. live CDs, other operative systems). In Windows, under Device Manager, find your Realtek network adapter and double-click it. Under the Advanced tab, change "Wake-on-LAN after shutdown" to Enable.<br />
In Windows XP (example)<br />
Right click my computer<br />
--> Hardware tab<br />
--> Device Manager<br />
--> Network Adapters<br />
--> "double click" Realtek ...<br />
--> Advanced tab<br />
--> Wake-On-Lan After Shutdown<br />
--> Enable<br />
<br />
{{Note|Newer Realtek Windows drivers (tested with ''Realtek 8111/8169 LAN Driver v5.708.1030.2008'', dated 2009/01/22, available from GIGABYTE) may refer to this option slightly differently, like ''Shutdown Wake-On-LAN --> Enable''. It seems that switching it to {{ic|Disable}} has no effect (you will notice the Link light still turns off upon Windows shutdown). One rather dirty workaround is to boot to Windows and just reset the system (perform an ungraceful restart/shutdown) thus not giving the Windows driver a chance to disable LAN. The Link light will remain on and the LAN adapter will remain accessible after POST - that is until you boot back to Windows and shut it down properly again.}}<br />
<br />
====Method 3 - Newer Realtek Linux driver====<br />
Any newer driver for these Realtek cards can be found for Linux on the realtek site. (untested but believed to also solve the problem).<br />
<br />
====Method 4 - Enable ''LAN Boot ROM'' in BIOS/CMOS====<br />
It appears that setting ''Integrated Peripherals --> Onboard LAN Boot ROM --> Enabled'' in BIOS/CMOS reactivates the Realtek LAN chip on system boot-up, despite the Windows driver disabling it on OS shutdown.<br />
<br><small>This was tested successfully multiple times with GIGABYTE system board GA-G31M-ES2L with BIOS version F8 released on 2009/02/05. YMMV.</small><br />
<br />
===DLink G604T/DLink G502T DNS issue===<br />
Users with a DLink G604T/DLink G502T router, using DHCP and have firmware v2.00+ (typically users with AUS firmware) may have issues with certain programs not resolving the DNS. One of these programs are unfortunatley pacman. The problem is basically the router in certain situations is not sending the DNS properly to DHCP, which causes programs to try and connect to servers with an IP address of 1.0.0.0 and fail with a connection timed out error<br />
<br />
====How to diagnose the problem====<br />
The best way to diagnose the problem is to use Firefox/Konqueror/links/seamonkey and to enable wget for pacman. If this is a fresh install of Arch Linux, then you may want to consider installing {{ic|links}} through the live CD.<br />
<br />
Firstly, enable wget for pacman (since it gives us info about pacman when it is downloading packages)<br />
Open {{ic|/etc/pacman.conf}} with your favourite editor and uncomment the following line (remove the # if it is there)<br />
<br />
XferCommand=/usr/bin/wget --passive-ftp -c -O %o %u<br />
<br />
While you are editing {{ic|/etc/pacman.conf}}, check the default mirror that pacman uses to download packages.<br />
<br />
Now open up the default mirror in an Internet browser to see if the mirror actually works. If it does work, then do {{ic|pacman -Syy}} (otherwise pick another working mirror and set it to the pacman default). If you get something similar to the following (notice the 1.0.0.0),<br />
<nowiki>ftp://mirror.pacific.net.au/linux/archlinux/extra/os/i686/extra.db.tar.gz</nowiki> <br />
<nowiki>=> `/var/lib/pacman/community.db.tar.gz.part'</nowiki><br />
Resolving mirror.pacific.net.au... 1.0.0.0<br />
then you most likely have this problem. The 1.0.0.0 means it is unable to resolve DNS, so we must add it to {{ic|/etc/resolv.conf}}.<br />
<br />
====How to fix it====<br />
Basically what we need to do is to manually add the DNS servers to our {{ic|/etc/resolv.conf}} file. The problem is that DHCP automatically deletes and replaces this file on boot, so we need to edit {{ic|/etc/conf.d/dhcpcd}} and change the flags to stop DHCP from doing this.<br />
<br />
When you open {{ic|/etc/conf.d/dhcpcd}}, you should see something close to the following:<br />
DHCPCD_ARGS="-t 30 -h $HOSTNAME"<br />
Add the -R flag to the arguments, e.g.,<br />
DHCPCD_ARGS="-R -t 30 -h $HOSTNAME"<br />
<br />
{{Note|1=If you are using {{Pkg|dhcpcd}} >= 4.0.2, the {{ic|-R}} flag has been deprecated. Please see the [[#For DHCP assigned IP address]] section for information on how to use a custom {{ic|/etc/resolv.conf}} file.}}<br />
<br />
Save and close the file; now open {{ic|/etc/resolv.conf}}. You should see a single nameserver (most likely 10.1.1.1). This is the gateway to your router, which we need to connect to in order to get the DNS servers of your ISP. Paste the IP address into your browser and log in to your router. Go to the DNS section, and you should see an IP address in the Primary DNS Server field; copy it and paste it as a nameserver '''ABOVE''' the current gateway one.<br />
<br />
E.g., {{ic|/etc/resolv.conf}} should look something along the lines of<br />
nameserver 10.1.1.1<br />
<br />
If my primary DNS server is 211.29.132.12, then change {{ic|/etc/resolv.conf}} to<br />
nameserver 211.29.132.12<br />
nameserver 10.1.1.1<br />
<br />
Now restart the network daemon by doing {{ic|rc.d restart network}} and do {{ic|pacman -Syy}}. If it syncs correctly with the server, then the problem is solved.<br />
<br />
====More about it====<br />
This is the whirlpool forum (Australian ISP community) which talks about and gives the same solution to the problem<br />
http://forums.whirlpool.net.au/forum-replies-archive.cfm/461625.html<br />
<br />
=== Check DHCP problem by releasing IP first ===<br />
<br />
Problem may occur when DHCP get wrong IP assignment. For example when two routers are tied together through VPN. The router that is connected to me by VPN may assigning IP address. To fix it. On a console, as root, release IP address:<br />
# dhcpcd -k<br />
<br />
Then request a new one:<br />
# dhcpcd<br />
<br />
Maybe you had to run those two commands many times.<br />
<br />
===Realtek 8111E loses lots of packets/dmesg is flooded with link messages===<br />
This issue currently plagues rev6 of the 8111. To check if you have this chip, check the output of the following:<br />
lspci | grep 8111<br />
<br />
If you see a line like the following:<br />
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)<br />
and dmesg has a bunch of this:<br />
r8169 0000:03:00.0: eth0: link up<br />
you are using a bad r8169 driver. To fix this, install the {{AUR|r8168}} package from the [[AUR]], [[Kernel_modules#Blacklisting|blacklist]] the r8169 kernel module, and reboot in order to fix the issue.<br />
<br />
Supposedly there is a fix for this in Linux 3.0.<br />
<br />
Source: http://forums.gentoo.org/viewtopic-t-881217-start-0.html</div>Archvillhttps://wiki.archlinux.org/index.php?title=Dhcpd&diff=219600Dhcpd2012-08-24T18:44:08Z<p>Archvill: revert</p>
<hr />
<div>[[Category:Networking]]<br />
[[Category:Daemons and system services]]<br />
dhcpd is the [http://www.isc.org/software/dhcp/documentation Internet Systems Consortium] DHCP Server<br />
<br />
== Installation ==<br />
[[pacman|Install]] the {{pkg|dhcp}} package, available in the [[official repositories]].<br />
<br />
== Configuration ==<br />
=== Directly connecting another computer ===<br />
{{Note|The process described is untested}}<br />
Read if you are directly connecting your Arch computer to another host (e.g. over ethernet), and want the other computer to have its IP automatically assigned.<br />
<br />
Assign an IPv4 address to the interface you want to use (usually {{ic|eth0}}). The first 3 bytes of this address cannot be exactly the same as those of another interface.<br />
# ifconfig eth0 139.96.30.100 # arbitrary address<br />
The default dhcpd.conf contains many uncommented examples, so relocate it<br />
# mv /etc/dhcpd.conf /etc/dhcpd.conf.example<br />
Edit {{ic|/etc/dhcpd.conf}} to contain<br />
subnet 139.96.30.0 netmask 255.255.255.0 {<br />
range 139.96.30.200 139.96.30.200;<br />
}<br />
Start the daemon<br />
# rc.d start dhcp4<br />
Now, any computer you connect over ethernet will be assigned an IPv4 address (139.96.30.200 in this example).<br />
<br />
=== Listening on only one interface ===<br />
An example of such a use case would be if a machine (with more than one network interface) is connected to a corporate network (with routers, DHCP servers, ...) and you need to set up a small local network for development purposes.<br />
This machine will then have one network interface connected to the corporate network ("corporate") and another interface connected on the local development network ("local").<br />
If the DHCP server is not forced to listen on the "local" interface, the DHCP server will listen to any network interface and a DHCP request coming from any corporate machine could be served by your DHCP server, giving wrong IP addresses, nameservers, ... and the IT managers might not appreciate...<br />
{{Note|We will assume that all the configuration is for IPv4 networks, please refer to IPv6 documents to adapt the relevant parts.}}<br />
In order to force the DHCP server to listen only on one of the network interfaces, you need to specify it in the dhcpd command line. <br />
This is done by editing the configuration file /etc/conf.d/dhcp:<br />
DHCP4_ARGS="... '''eth1'''"<br />
Another step is to tell the routing table on which interface to listen to for the 255.255.255.255 broadcasts:<br />
# route add -host 255.255.255.255 eth1<br />
Now, the clients on eth1 will be managed by your DHCP server without having any impact on any client / server on any other ntework interface.<br />
<br />
== Notes ==<br />
You will see configuration files, etc. related to {{ic|dhcpcd}}. This is the DHCP client executable and has nothing to do with {{ic|dhcpd}}.<br />
<br />
==See also==<br />
*[[Dhcpcd]]</div>Archvillhttps://wiki.archlinux.org/index.php?title=Dhcpd&diff=219599Dhcpd2012-08-24T18:42:46Z<p>Archvill: change /etc/conf.d/dhcp to dhcpd</p>
<hr />
<div>[[Category:Networking]]<br />
[[Category:Daemons and system services]]<br />
dhcpd is the [http://www.isc.org/software/dhcp/documentation Internet Systems Consortium] DHCP Server<br />
<br />
== Installation ==<br />
[[pacman|Install]] the {{pkg|dhcp}} package, available in the [[official repositories]].<br />
<br />
== Configuration ==<br />
=== Directly connecting another computer ===<br />
{{Note|The process described is untested}}<br />
Read if you are directly connecting your Arch computer to another host (e.g. over ethernet), and want the other computer to have its IP automatically assigned.<br />
<br />
Assign an IPv4 address to the interface you want to use (usually {{ic|eth0}}). The first 3 bytes of this address cannot be exactly the same as those of another interface.<br />
# ifconfig eth0 139.96.30.100 # arbitrary address<br />
The default dhcpd.conf contains many uncommented examples, so relocate it<br />
# mv /etc/dhcpd.conf /etc/dhcpd.conf.example<br />
Edit {{ic|/etc/dhcpd.conf}} to contain<br />
subnet 139.96.30.0 netmask 255.255.255.0 {<br />
range 139.96.30.200 139.96.30.200;<br />
}<br />
Start the daemon<br />
# rc.d start dhcp4<br />
Now, any computer you connect over ethernet will be assigned an IPv4 address (139.96.30.200 in this example).<br />
<br />
=== Listening on only one interface ===<br />
An example of such a use case would be if a machine (with more than one network interface) is connected to a corporate network (with routers, DHCP servers, ...) and you need to set up a small local network for development purposes.<br />
This machine will then have one network interface connected to the corporate network ("corporate") and another interface connected on the local development network ("local").<br />
If the DHCP server is not forced to listen on the "local" interface, the DHCP server will listen to any network interface and a DHCP request coming from any corporate machine could be served by your DHCP server, giving wrong IP addresses, nameservers, ... and the IT managers might not appreciate...<br />
{{Note|We will assume that all the configuration is for IPv4 networks, please refer to IPv6 documents to adapt the relevant parts.}}<br />
In order to force the DHCP server to listen only on one of the network interfaces, you need to specify it in the dhcpd command line. <br />
This is done by editing the configuration file /etc/conf.d/dhcpd:<br />
DHCP4_ARGS="... '''eth1'''"<br />
Another step is to tell the routing table on which interface to listen to for the 255.255.255.255 broadcasts:<br />
# route add -host 255.255.255.255 eth1<br />
Now, the clients on eth1 will be managed by your DHCP server without having any impact on any client / server on any other ntework interface.<br />
<br />
== Notes ==<br />
You will see configuration files, etc. related to {{ic|dhcpcd}}. This is the DHCP client executable and has nothing to do with {{ic|dhcpd}}.<br />
<br />
==See also==<br />
*[[Dhcpcd]]</div>Archvill